ニャオニャオ21世紀

レトロゲーム(MSX、PCエンジン、セガサターン)と、MSXぽいアプリ開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハックほか雑記を綴っています

MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート 第17回 CALL命令のメカニズム

スポンサーリンク

今日勉強するところはなんかややこしそう!

CALL命令っていったら、

 

CALL C120H

 

とか書いて、その番地に飛んで、

 

RET

 

があったら、また戻ってくるというやつでした。

BASICでいうGOSUB ~ RETURNみたいなの。

 

別にメカニズムといっても、不思議なところはないのですが^^

 

読み進めると、

RETがあったときに、どうやって元の行番号へ戻ってくるか?

つまり元の行番号をどこに覚えているか?

ということが書いてありました。

 

覚えておくところがスタックと言うそうです。

メモリの中にとられるそうです。

そのスタックのアドレスを指定するのが、

SP(スタックポインタ)

というレジスタだそうです。

 

例:

     プログラム

&HC010        CALL  C120H

&HC013       

~

&HC120     -------------------

&HC14B        RET

&C~~      --------------------

&C~~      スタック

 

&C010 CALL C120Hの時点で、スタックに&HC013が入ります。

(戻ってきた時、&HC013から始めるから) 

 

RETでスタックのアドレスを読んで、そのアドレスに飛びます。

 

まぁ、戻るアドレスをスタックに入れておきましたよってだけの

話です。

 

なお、スタックに2バイトのアドレスを入れるわけですが、

入れたときにSPの値が-2されるそうです。

メモリ:

-----------      -------------  

                                   スタック   SPが-2される

-----------  ー>  -------------

スタック

-----------                   -------------

 

ややこしいことに、メモリに2バイトのアドレスを入れるときに、

手前に追加されていくみたいです。

 

 

スタックに値を入れると、スタックポインタに入っているアドレスは

2づつ減っていくのだそうです。

 

ちょっと変ですねぇ。

アドレスの値を減らしていくなんて(怒

 

まぁそういうものと覚えておきます。

それで、スタックの値を取り出すと、SPは+2されていきます。

SPを元に戻すだけですね。

 

ふーんって感じですがw

 

それから、

この原理を使うと、サブルーチンは何重にも入れ子にすることができる

そうです。

サブルーチンの中から、サブルーチンを呼ぶというやつですね。

スタックにアドレスを入れて、さらに手前にアドレスを入れて

ってやっていくそうです。

SPを-2、さらにSPを-2と。

 

今回はそれだけです。

スタックとSP(スタックポインタ)

というのが新しかったです。

 

このスタックというのはPUSH / POP命令というのにも

でてくるそうです。

おお!

意外に重要なんですね。

しっかり覚えておいたほうが良さそうです^^

 

今回はここまでです。それでは〜。

 

 

 

 

www.nyaonyao21.com

 

 

「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください