【3+5の計算をするプログラム】
シミュレータで汎用レジスタの内容をトレースしていったのですが
初心者なもので、どうしてそうなるかわからなかったので質問
させていただきます。
アドレス SMP0613 START
8000 PUSH 5
8002 PUSH 3
8004 CALL SUB
8006 POP GR6
8007 ST GR6,ANS
8009 RET
800A ANS DS 1
END
SUB START
800B POP GR7
800C POP GR1
800D POP GR2
800E ADDA GR1,GR2
800F PUSH 0,GR1
8011 PUSH 0,GR7
8013 RET
END
800B番地までトレースするとGR7に8006番地が格納されました。
GR7に数字の3が格納されると思ったのですが、その下のGR1に3が
格納されました。なぜこうなるのか教えていただきたいです。
また、CALLを抜けるとGR6をスタックからPOPすることになるのですが、
この内容が8になっていました。
スタックの仕組みについて触れながら説明していただきたいです。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
スタックはFILO(First In, Last Out=最初に入れたものが最後に取り出される)データ構造です。
実行される順番でスタックの中を追いかけてみましょう。
以下はアドレス、スタックの先頭→最後の順に並んでいます。
8000 5
8002 3 5
8004 8006 3 5
※CALLは戻り先(=CALLの次の行)のアドレスをスタックに格納してから指定番地にジャンプします
800B 3 5 ←戻り先の8006がGR7に取り出される
800C 5 ←3がGR1に取り出される
800D ←5がGR2に取り出される
800E
800F 8
8011 8006 8
8013 8 ←RETを実行するとスタックの先頭の戻り先アドレスを取り出してジャンプ
8006 ←8がGR6に取り出される
ポイントはCALLもスタックを使うと言うところですね。
なるほど。スタックは自分ではわかっていたのですが、
コールの使い方をよくわかっていませんでした。
わざわざトレースしていただいてありがとうございました^^
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- F1・モータースポーツ SUPER GT 2022 SERIES | トヨタ自動車 GT500 編 1 2022/05/15 04:04
- 中古車 ランクル300 2 2022/08/20 11:33
- 英語 There are various anatomical and mucogingival cond 3 2022/05/05 10:28
- デジタルカメラ ricoh gr iiix の次は出ると思いますか?ricoh gr iiixを買おうか迷い中です 1 2023/04/15 17:54
- その他(車) GRヤリス や GRアクアといった スポーツモデルは煽られやすい? 4 2022/11/29 20:17
- デジタルカメラ 手持ちのRICOH GR DigitalをWebカメラとして使いたい。 2 2023/07/25 07:54
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- 電気工事士 送りのケーブルのGRやDGRの連動試験をする際、LBSのトリップコイルに電圧をかける必要があるも思う 1 2022/08/28 11:33
- 国産車 トヨタGRカローラ GRヤリスの3気筒エンジン四駆システム ブースト圧上げてパワー絞り出しただけ。 12 2022/12/04 13:44
- 日用品・生活雑貨 ボタン電池「SR-927W」「GR-927」と互換できるボタン電池を教えて下さい。 5 2022/10/29 10:44
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイルが保存されてい...
-
ITパスポートの勉強をしていま...
-
Python... 環境設定 初心者です...
-
プログラミングサイトについて。
-
vba クリップボードクリアにつ...
-
Google ColaboでGUI作成
-
入力された文字列が、LD22000を...
-
google formsを使ったタスク依...
-
このURLで広告を出しているのは...
-
40代後半でゼロからのプログラ...
-
Fortran の定数表現について
-
https://youtube.com/shorts/bT...
-
AIの登場でプログラマーたちが...
-
https://paiza.jp/challenges/5...
-
そのまま使っただけなのに・・...
-
BATファイルについて
-
符号誤り率の計算は例題でどの...
-
VBA 電話番号の正規表現について
-
三菱シーケンサーの命令でFROM ...
-
シェルのSTEP数について教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.netでDLLを読み込んで実行す...
-
最大スタックサイズを大きくす...
-
printf / sprintf のスタック消...
-
エラー?メッセージ
-
スタックフレームの消滅
-
_CRTIMPの意味は?
-
関数のプロローグとエピローグ...
-
逆ポーランド記法
-
マス目上の移動のアルゴリズム
-
C言語・スタックを使用した逆...
-
CASLとCASL2の違いについて
-
スタック領域変更
-
Cプログラミングの関数電卓のア...
-
スタック C言語
-
再帰処理を非再帰処理に書き換...
-
gccでスタックサイズを変更する...
-
スタックを用いて整数配列を入...
-
スタックの仕組み
-
スタックの伸張方向
-
H8マイコン スタック領域に...
おすすめ情報