озадачен синтаксисом сборки x86 - PullRequest
2 голосов
/ 24 марта 2012

Используя 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 все в порядке.Я не знаю почему.

1 Ответ

1 голос
/ 30 марта 2012

как я недавно узнал, lea ebx, DWORD PTR [ds:eax] должно работать.
Если ваша цель состоит в том, чтобы просто нажать эти указатели через ebx, я думаю, вы должны написать push DWORD PTR [ds:eax]. Я не знаю, будет ли это работать с ассемблером GCC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...