2
在Windows 7主機上的VMware播放器使用的CentOS 5.5不解我寫了一個彙編代碼文件gpi.S:由x86彙編語法
.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中是可以的。我不知道爲什麼。
彙編語法只與編譯器相關,而不是操作系統或硬件,所以這不是罪魁禍首...你是否嘗試過使用AT&T語法?嘗試本節結尾處的表格:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s3 – Irfy 2012-03-24 14:43:23
括號很奇怪,dword ptr屬於它們之外。 – 2012-03-24 14:44:39
我更感到驚訝的是,代碼曾經在第一個地方工作.. – harold 2012-03-24 15:02:51