我有一个用NASM语法编写的代码并且运行良好。然后我使用intel2gas将我的NASM代码转换为GAS。 (使用 -i ,默认为英特尔格式)。
我之前从未使用过GAS,只是在我所有的装配需求中使用纯粹的NASM。我使用intel2gas来学习GAS代码格式。现在,我在转换后的GAS代码中有一些行,其中包含来自intel2gas的警告,并附加了“ MISMATCH:”前缀。
我在.data和.bss部分管理过其他人,但我仍然有这些:
MISMATCH: "lea ecx, [array + esi]"
MISMATCH: "lea ebx, [array + esi + 1]"
MISMATCH: "mov al, [array + esi]"
MISMATCH: "mov cl, [array + esi + 1]"
上述NASM系列的等效GAS语法是什么?
为什么intel2gas没有完全转换我的代码并留下了几条MISMATCH线?
请帮助,谢谢!
使用Ubuntu 13 x86
答案 0 :(得分:2)
lea ecx, [array + esi]
lea ebx, [array + esi + 1]
mov al, [array + esi]
mov cl, [array + esi + 1]
所有这些行都不使用寄存器中存储的地址的常量偏移量。从语法转换器的角度来看,标签地址是未知的,并且无法确定目标编译器使用的配置。
翻译:
lea array(%esi), %ecx
lea array+1(%esi), %ebx
movb array(%esi), %al
movb array+1(%esi), %cl