2013-09-16 3 views
2

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

Я никогда раньше не использовал ГАЗ, только чистый 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

ответ

2
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 
+0

Whoaaa! Спасибо чувак! : D У меня есть следующий вопрос, если я могу .. У меня есть эта строка: 'movb% cl, $ byte [ebx]', который производит эту ошибку: junk '[ebx]' после выражения и недопустимое выражение суффикс для 'mov' Как мне подойти к этому? –

+1

Если 'byte' является меткой, объявленной где-то в коде, у вас не должно быть' $ 'перед его именем, поскольку оно предшествует только константам. Ключи BTW '[]' не допускаются в синтаксисе GAS, поэтому вы можете использовать это: 'movb% cl, byte (% ebx)'. Если вы написали 'byte' как спецификатор размера перед' ebx', обратите внимание, что он либо недействителен, либо вообще не нужен. Суффикс 'b' после' mov' уже содержит эту информацию. – user35443

+0

ohhhh .. этот movb реальный портативный. : D Большое спасибо! : D –

Смежные вопросы