ca-10. フラグ,フラグレジスタ

1.3K Views

December 23, 21

スライド概要

コンピュータ・アーキテクチャ演習
URL: https://www.kkaneko.jp/cc/ca/index.html

profile-image

金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ca-10. フラグ,フラグレジスタ (コンピュータ・アーキテクチャ演習) URL: https://www.kkaneko.jp/cc/ca/index.html 金子邦彦 謝辞:「いらすとや」のイラストを使用しています 1

2.

10-1 フラグ 2

3.

フラグの用途の例 自動で分岐させたい → フラグを使う 左 分岐 右 3

4.

フラグ フラグを立てる (セット) フラグを下げる (クリア) 4

5.

フラグ • フラグの値は 0 または 1 • プログラムの進行を決めるのに利用できる • フラグの値は,自動で変化する 5

6.

10-2 フラグレジスタ 6

7.

フラグレジスタ フラグレジスタは, レジスタウインドウ「EFL」 この値が変化 フラグレジスタ (名前は EFLAGS で、縮めて EFL)に、 たくさんのフラグが入っている フラグの名前 値 I D V I P V I F A V R C MF N T IOPL O D I T S Z F F F F F F A F P F C F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 長さ 32 ビット 7

8.

フラグレジスタ • 桁上がりフラグ (Carry Flag, CF) • 演算結果に桁上がりが生じると 1 • 桁あふれフラグ (Overflow Flag, OF) • 演算結果に桁あふれが生じると 1 • ゼロフラグ (Zero Flag, ZF) • 演算結果がゼロになると 1 • サインフラグ (Sign Flag, SF) • 演算結果がマイナスの数になると 1 など 8

9.

フラグレジスタ 00000212 フラグの名前 値 I D V I P V I F A V R C M F N T IOP L O D I T S Z F F F F F F A F P F C F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 9

10.

フラグレジスタ 00000293 フラグの名前 値 I D V I P V I F A V R C M F N T IOP L O D I T S Z F F F F F F A F P F C F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 10

11.

フラグレジスタ • フラグレジスタのビット1つ1つが,フラグに なっている 11

12.

10-3 Visual Studio で フラグの変化を見る 12

13.

今から行うこと • フラグの値(0 または1)の変化を見る • フラグの値がある条件のときだけジャンプする命 令(条件ジャンプ命令)を見る 13

14.

簡単な条件分岐の例 • 12歳以上は 1800円 • 12歳未満は 500円 14

15.

Visual C++ のソースファイル例 15

16.

パソコン演習 では,フラグレジスタ (EFL) の値の変化と,ジャン プの様子を確認してください ステップオーバー機能を利用 16

17.

演習 ① Visual Studio を起動しなさい ② Visual Studio で,Win32 コンソールアプリケー ション用プロジェクトを新規作成しなさい プロジェクトの「名前」は何でもよい 17

18.

③ Visual Studioのエディタを使って,ソースファイ ルを編集しなさい 追加 18

19.

④ ビルドしなさい.ビルドのあと「1 0 失敗」の表示を確認しなさい 正常終了, → 表示されなければ,プログラムのミスを自分で 確認し,修正して,ビルドをやり直す 19

20.

⑤ Visual Studioで「age = 20;」の行に,ブレーク ポイントを設定しなさい ① 「age = 20;」の行を マウスでクリック ② 「デバッグ」→「ブレーク ポイントの設定/解除」 ③ ブレークポイントが 設定されるので確認. 赤丸がブレークポイント の印

21.

⑥ Visual Studioで,デバッガーを起動しなさい. 「デバッグ」 → 「デバッグ開始」 ⑦「age = 20;」の行で,実行が中断することを確認 しなさい あとで使うので,中断したままにしておくこと 黄色の 矢印 「age = 20;」の行で実行が 中断している 21

22.

⑧「age = 20;」の行で,実行が中断した状態で,逆 アセンブルを行いなさい. ① 「デバッグ」→ 「ウインド ウ」→「逆アセンブル」 ② 逆アセンブルの結果が表示される 22

23.

⑨「age = 20;」の行で,実行が中断した状態で,レ ジスタの中身を表示させなさい.手順は次の通り. デバッガーを起動済みで, プログラムの実行が中断し ているときに・・・ ② レジスタが表示 される. EFL に注目 ① 「デバッグ」 → 「ウインドウ」→「レジスタ」 23

24.

EFL がフラグレジスタ 24

25.

⑩ステップオーバーの操作を1回ずつ行いながら, ・プログラムカウンタ(黄色の矢印) ・フラフレジスタ(レジスタウインドウの中の EFL) の変化を確認しなさい. 「デバッグ」 → 「ステップオーバー」 (あるいは F10 キー) 25

26.

⑪ 最後に,プログラム実行の再開の操作を行いなさ い.これで,デバッガーが終了する. 「デバッグ」 → 「続行」 26

27.

⑫ 今度は,「age = 20;」の行を「age = 10;」に変 えて. ステップオーバーの操作を1回ずつ行いながら, ・プログラムカウンタ(黄色の矢印) ・フラフレジスタ(レジスタウインドウの中の EFL) の変化を確認しなさい. 27

28.

Visual C++ の プログラム age = 20; if (age >= 12) p = 1800; else p = 500; こちらが 有効 無視 される age = 10; if (age >= 12) p = 1800; else p = 500; 無視 される こちらが 有効 28

29.

この2行で「変数 age が12 未満のときだけジャンプせよ」 という意味 条件ジャンプ 29

30.

必ずジャンプせよ という無条件ジャンプ命令 無条件ジャンプ 30