• ベストアンサー

ハノイの塔

次の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); }

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.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

aho-3-aho
質問者

お礼

親切にありがとうございます。自分でいろいろいじってみます。

その他の回答 (1)

noname#30727
noname#30727
回答No.1

質問の意味がよくわかりません。 再帰関数moveをアセンブリで書く例が欲しいという事ですか?

aho-3-aho
質問者

補足

分かりにくてすみません。Z80で動作させたいのでアセンブリでの例が知りたいのです。

関連するQ&A