Синтаксис NASM в GAS с использованием intel2gas

У меня есть код, написанный в синтаксисе NASM, и он хорошо работает. Затем я использовал intel2gas для преобразования моего кода NASM в GAS. (используется -i, по умолчанию используется формат Intel в & t).

Я никогда раньше не использовал ГАЗ, просто NASM во всех моих нуждах по сборке. Я использовал intel2gas для изучения формата кода GAS. Теперь у меня есть строка в преобразованном коде GAS с предупреждениями от intel2gas, к которой добавлен префикс «MISMATCH:».

Я управлял другими, как в разделах .data и .bss, но у меня все еще есть:

MISMATCH: "lea ecx, [array + esi]"
MISMATCH: "lea ebx, [array + esi + 1]"
MISMATCH: "mov al, [array + esi]"
MISMATCH: "mov cl, [array + esi + 1]"

Каков эквивалентный синтаксис GAS приведенным выше строкам NASM?

Почему intel2gas не полностью преобразовал мой код и оставил несколько строк MISMATCH?

Пожалуйста, помогите, спасибо!


Использование Ubuntu 13 x86


person Kevin Lloyd Bernal    schedule 16.09.2013    source источник


Ответы (1)


lea ecx, [array + esi]
lea ebx, [array + esi + 1]
mov al, [array + esi]
mov cl, [array + esi + 1]

Во всех этих строках не используется постоянное смещение от адреса, хранящегося в регистре. С точки зрения транслятора синтаксиса, адреса меток неизвестны, и нельзя быть уверенным, какую конфигурацию использует целевой компилятор.

Перевод:

lea array(%esi), %ecx
lea array+1(%esi), %ebx
movb array(%esi), %al
movb array+1(%esi), %cl
person user35443    schedule 16.09.2013
comment
Ого! Спасибо чувак! : D У меня есть дополнительный вопрос, если можно .. У меня есть эта строка: movb %cl, $byte[ebx], которая вызывает эту ошибку: мусор '[ebx]' после выражения и недопустимый суффикс выражения для 'mov' Как мне подойти к этому? - person Kevin Lloyd Bernal; 16.09.2013
comment
Если byte - это метка, объявленная где-то в коде, у вас не должно быть $ перед ее именем, так как она предшествует только константам. Кстати, [] скобки не разрешены в синтаксисе GAS, поэтому вы можете использовать это: movb %cl, byte(%ebx). Если вы написали byte в качестве спецификатора размера перед ebx, обратите внимание, что он либо недействителен, либо вообще не нужен. Суффикс b после mov уже содержит эту информацию. - person user35443; 16.09.2013
comment
оххх .. этот мовб действительно пригодится. : D Большое спасибо! : D - person Kevin Lloyd Bernal; 17.09.2013