使用intel2gas的NASM到GAS语法

时间:2013-09-16 12:03:06

标签: assembly nasm gas

我有一个用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

1 个答案:

答案 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