我應該重寫代碼從C到內聯彙編。代碼將十進制數轉換爲十六進制。C到內聯彙編
代碼我應該轉移是:
#include <stdio.h>
static int a;
int main() {
char str[]="XX je hex\n";
if (scanf("%i", &a)==1) {
/* This part of code i am supposed to transfer */
int tmp = (a>>4)&0x0f;
if (tmp <= 9) {
tmp+='0';
} else {
tmp+='A'-10;
}
str[0]=tmp;
tmp = a&0x0f;
if (tmp <= 9) {
tmp+='0';
} else {
tmp+='A'-10;
}
str[1]=tmp;
/* Ends here */
write(1, str, 10);
}
return 0;
}
到目前爲止,我得到這個
asm volatile (
"mov %a,%bx;"
"shrw $4,%%bx;"
"and $0x0f, %%bx;"
"cmp $9,%bx;"
"jle lessOrEq;"
"jg greater;"
"mov %bx,%str[0];"
"mov %a,%bx;"
"and $0x0f, %%bx;"
"cmp $9,%bx;"
"jle lessOrEq;"
"jg greater;"
"mov %bx,%str[1];"
"lessOrEq: add '0',%bx; ret;"
"greater: add 'A',%bx; sub 10,%bx; ret;"
:"=c"(str[0]), "=d" (str[1])
:"a"(a),"c"(str[0]),"d"(str[1])
:
);
和我收到此錯誤:無效的 'ASM':%-letter後數編號缺失。
任何想法我有什麼錯誤?任何意見,將不勝感激。
可能是一個好主意,提及哪一行會給出錯誤。 –
對不起..它給第一行上的錯誤..錯誤:無效'asm':操作數編號在%-letter asm volatile後丟失( –
)爲什麼你把它寫成內聯程序集呢?這很容易出現類似的錯誤你的經驗 – fuz