在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中都可以。我不知道为什么。
答案 0 :(得分:1)
lea ebx, DWORD PTR [ds:eax]
应该有效。 ebx
推送这些指针,我认为你应该能够写push DWORD PTR [ds:eax]
。但我不知道这是否适用于GCC汇编程序。