困惑的是x86汇编语法

时间:2012-03-24 14:35:20

标签: assembly x86

在Windows 7主机上的vmware播放器中使用CentOS 5.5我编写了一个汇编代码文件gpi.S:

.intel_syntax noprefix
... /* cut off some code */
lea eax, string_label
mov ebx, [DWORD PTR ds:eax]
push ebx
mov ebx, [DWORD PTR cs:eax]
push ebx
... /* cut off some code */

编译:

gcc -o gpi gsi.S

没关系。

我后来在VMware中安装了新的CentOS版本6.2,然后使用相同的命令编译相同的汇编代码,但我发现了一些错误:

汇编信息:

Error: invalid use of register

这些错误指向行:

mov ebx, [DWORD PTR ds:eax]
mov ebx, [DWORD PTR cs:eax]

在CentOS 6.2中,GNU gcc版本为4.6.6。 GNU as版本是2.20.51.0.2(i686-redhat-lnux)。

我认为这两行使用的是标准的英特尔汇编语法,所以它们在CentOS 5.5中都可以。我不知道为什么。

1 个答案:

答案 0 :(得分:1)

我最近了解到的, lea ebx, DWORD PTR [ds:eax]应该有效。
如果你的目标只是通过ebx推送这些指针,我认为你应该能够写push DWORD PTR [ds:eax]。但我不知道这是否适用于GCC汇编程序。