【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ランキング
-
Cプログラミングの関数電卓のア...
-
最大スタックサイズを大きくす...
-
VB.netでDLLを読み込んで実行す...
-
ポインタ版リスト構造によるス...
-
エラー?メッセージ
-
基本情報技術者のデータ構造あ...
-
キューとスタックの問題です、...
-
プログラムの規模を表す単位「k...
-
タッチタイプの拗音が苦手です...
-
hdmiはパラレル?シリアル?
-
TCPではなく、UDPが音声や動画...
-
ステップ数??
-
ubuntuで デイスク/deb/loopと...
-
ライン数とステップ数の違いに...
-
ステップ数について
-
社内LANのネットワークトラフィ...
-
MoveNextの処理速度は?
-
[ASP]If~Else If~End If 対 Case
-
ネットワークの問題の解き方を...
-
「ByRef引数の型が一致しません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.netでDLLを読み込んで実行す...
-
最大スタックサイズを大きくす...
-
エラー?メッセージ
-
printf / sprintf のスタック消...
-
_CRTIMPの意味は?
-
スタックを用いて整数配列を入...
-
スタックフレームの消滅
-
関数呼び出しでのスタック消費量
-
逆ポーランド記法
-
スタックの伸張方向
-
スタック領域変更
-
関数のプロローグとエピローグ...
-
スタックとキューの使い所
-
再帰処理を非再帰処理に書き換...
-
CASLとCASL2の違いについて
-
Ethernetヘッダの取得 NDIS
-
VC++6.0 Stack Overflow !!
-
マス目上の移動のアルゴリズム
-
VCでのスタックサイズ
-
コンパイラオプション
おすすめ情報