【发布时间】:2017-11-01 12:18:31
【问题描述】:
我应该将代码从 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':%-字母 asm volatile (
-
你为什么把它写成内联汇编?这很容易出现各种错误,就像您遇到的错误一样。
-
相反,创建一个程序集文件 (
.s) 并将整个代码写入程序集。
标签: c gcc assembly hex inline-assembly