【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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.netでDLLを読み込んで実行す...
-
_CRTIMPの意味は?
-
pthreadのスタックサイズ設定取...
-
スタックモジュール
-
printf / sprintf のスタック消...
-
エラー?メッセージ
-
基本情報技術者のデータ構造あ...
-
パソコンでインターネット接続...
-
プログラムの規模を表す単位「k...
-
ubuntuで デイスク/deb/loopと...
-
hdmiはパラレル?シリアル?
-
7bitのデータ列に1bitのパリテ...
-
ステップ数によるスケジュール
-
同じサブネットに属するIPアドレス
-
ブロック化因数(ブロッキング...
-
ホストアドレスの0とは
-
L2スイッチの管理VLANに...
-
トランザクションとは何のこと...
-
イーサネット10Mbpsの通信速度...
-
100台のPCをLAN接続する時に必...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.netでDLLを読み込んで実行す...
-
printf / sprintf のスタック消...
-
最大スタックサイズを大きくす...
-
_CRTIMPの意味は?
-
スタックフレームの消滅
-
スタックの伸張方向
-
エラー?メッセージ
-
スタックとキューの使い所
-
CASLとCASL2の違いについて
-
逆ポーランド記法
-
キューとスタックの問題です、...
-
再帰関数を使うとき、ソフトウ...
-
pthreadのスタックサイズ設定取...
-
再帰処理を非再帰処理に書き換...
-
二分探索木の行きがけ順走査
-
gccでスタックサイズを変更する...
-
スタックのpush/pop動作について
-
スタックを用いて整数配列を入...
-
ゆゆにゃ。
-
スタック領域変更
おすすめ情報