Используя CentOS 5.5 в vmware player на хосте Windows 7, я написал файл кода сборки 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 */
compile:
gcc -o gpi gsi.S
Все нормально.
Позже я установил новую версию CentOS 6.2 в VMware, затем скомпилировал тот же код сборки с той же командой, но обнаружил некоторые ошибки:
Сообщения сборки:
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 как версия - 2.20.51.0.2 (i686-redhat-lnux).
Я думаю, что эти две строки используют стандартный синтаксис сборки Intel, поэтому в CentOS 5.5 все в порядке.Я не знаю почему.