我正在通過Jack Crenshaw的「Let's Build A Compiler」。我正在將他的Motorola 680x0指令翻譯成x86 GAS語法。GAS組件中的變量賦值
在變量賦值期間,所需的語義是通過使用PC相對尋址(至少這就是Crenshaw所要做的)創建一個變量的引用。該變量可以在由摩托羅拉語法來訪問:
MOVE X(PC),D0
其中x是變量名。
下面是實際的過程是什麼樣的分配(以帕斯卡):
procedure Assignment;
var Name: char;
begin
Name := GetName;
Match('=');
Expression;
EmitLn('LEA ' + Name + '(PC),A0');
EmitLn('MOVE D0,(A0)')
end;
試圖模仿氣體裝置結果相同的語法在垃圾表達錯誤。希望這個問題不是太天真,但我一直在尋找幾天,並沒有看到明顯的解決方案。
如何在Linux(i386)上用x86處理器的GAS語法完成此操作?我正在尋找最簡單的方法來完成變量賦值。我爲我的彙編器和編譯器分別使用了as
和ld
。
下面是我在哪裏目前,第3章中的鏈接克倫肖:
http://compilers.iecc.com/crenshaw/tutor3.txt
你需要它使用PC相對尋址?如果沒有,它看起來像一個'movl%eax,'+ Name'會做(沒有讀過Crenshaw的書)。 – Michael 2014-09-05 13:28:53