Jack Crenshawによる優れたLet's Buildコンパイラのチュートリアルに続き、http://compilers.iecc.com/crenshawにあります。私は、Easy68k http://www.easy68k.com/ 68000エディタ/アセンブラ/シミュレータを使用して生成された68kアセンブリをテストしています。私はパート2になっているhttp://compilers.iecc.com/crenshaw/tutor2.txtが、分裂手順は私のために適切に動作していません。テストとしてI入力「8/2」は、その後、コンパイラは、次のコードを生成した場合ジャンクションでDivine(DIVS)が動作しないcrenshawのコンパイラを構築しましょう
...
{ Recognize and Translate a Divide }
procedure Divide;
begin
Match('/');
Factor;
EmitLn('MOVE (SP)+,D1');
EmitLn('DIVS D1,D0');
end;
...
:
MOVE #8,D0
MOVE D0,-(SP)
MOVE #2,D0
MOVE (SP)+,D1
DIVS D1,D0
実際に2/8(すなわち、それはだ計算されるように私には思えます最後の行をDIVS D0、D1として書き直すことでこれを修正することができますが、これは他のルーチンと同様にD0ではなくD1に結果を残します。そのような精緻な作業は間違っているでしょう。私はインターネットを検索しましたが、他の誰かがこの問題に遭遇しているのを見ることはできません。だからどういう意味: 1)私が間違ってそれを行っている - そう 2)ジャックは間違ってそれをやった - そう 3)Easy68kエミュレータが間違って何かやっている - 私はちょうど私が間違って行っているものを見ることができないしかしそう を。 助けてください。