Я работаю над созданием компилятора Джека Креншоу. Я переводил свои инструкции Motorola 680x0 в синтаксис x86 GAS.Переменное назначение в сборке GAS
При назначении переменных желаемая семантика заключается в создании ссылки на переменную с помощью относительной адресации на ПК (по крайней мере, это то, что делает Crenshaw). Переменная может быть доступна в синтаксисе Motorola по:
MOVE х (ПК), D0
где х имя переменной.
Вот что фактическая процедура выглядит для назначения (в Pascal):
procedure Assignment;
var Name: char;
begin
Name := GetName;
Match('=');
Expression;
EmitLn('LEA ' + Name + '(PC),A0');
EmitLn('MOVE D0,(A0)')
end;
Попытка имитировать тот же синтаксис в результатах сборки ГАЗ в ошибке экспрессии барахло. Надеюсь, этот вопрос не слишком наивен, но я искал несколько дней и не вижу очевидного решения.
Как это сделать с синтаксисом GAS для процессора x86 в Linux (i386)? Я ищу простейшие средства для выполнения задания переменной. Я использую as
и ld
для моего ассемблера и компилятора, соответственно.
Вот ссылка, где я в настоящее время, глава 3 в Креншоу:
http://compilers.iecc.com/crenshaw/tutor3.txt
ли вам это нужно использовать PC-относительной адресации? Если нет, это похоже на «movl% eax», «+ Name» (без чтения книги Креншоу). – Michael