- ベストアンサー
ハノイの塔
次のc言語で書かれたハノイの塔のプログラムをZ80で動作させたいのですが、アセンブルするとどうなるのでしょうか??教えてください。 void move(char n,char a,char b){ if(n>1)move(n-1,a,6-a-b); if(n>1)move(n-1,6-a-b,b); } int main(){ char n=5; move(n,1,2); }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
まず、このmove関数は、事実上何もしない関数ですが、それでいいのですか? つまりmoveを呼び出す以外は何もしていないので、実行してもただ終了するだけになります。 if(n>1)は1つで十分なので、以下のように書き換えたものとします。 if (n > 1) { move(n-1, a, 6-a-b); move(n-1, 6-a-b, b); } charをunsignedとして、変数n, a, bをレジスタC, B, Eに割り当てるものとします。 ORGとか、SPの初期化、MAINの呼び出しは別途記述してください。 Z80は何年も使ってないので、間違いは簡便してください(笑 MOVE: LD A,C CP 2 JR C,MOVE_1 LD A,6 SUB B SUB E LD D,A ; Dに6-a-bを保存しておく PUSH BC PUSH DE DEC C LD E,D CALL MOVE POP DE POP BC PUSH BC PUSH DE DEC C LD B,D CALL MOVE POP DE POP BC MOVE_1: RET MAIN: LD C,5 LD B,1 LD E,2 JP MOVE
その他の回答 (1)
質問の意味がよくわかりません。 再帰関数moveをアセンブリで書く例が欲しいという事ですか?
補足
分かりにくてすみません。Z80で動作させたいのでアセンブリでの例が知りたいのです。
お礼
親切にありがとうございます。自分でいろいろいじってみます。