ca-8. 算術演算命令

>100 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

シェア

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

各ページのテキスト
1.

ca-8. 算術演算命令 (コンピュータ・アーキテクチャ演習) URL: https://www.kkaneko.jp/cc/ca/index.html 金子邦彦 1

2.

アウトライン 8-1 算術演算の例 8-2 算術演算命令 2

3.

8-1 算術演算の例 3

4.

足し算 add の例 アセンブリ言語のプログラム a に 100 をセット a に 200 を足しこむ 実行結果の例 4

5.

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

6.

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

7.

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

8.

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

9.

• Visual Studioで,デバッガーを起動しなさい. 「デバッグ」 → 「デバッグ開始」 • 「printf」の行で,実行が中断することを確認しな さい • あとで使うので,中断したままにしておくこと 「printf」の行で実行が 中断している 9

10.

• 「printf」の行で,実行が中断した状態で,変数の 値を表示させなさい.手順は次の通り. ② 変数名と値の対応表が 表示される ①「デバッグ」 → 「ウインドウ」 → 「ローカル」 10

11.

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

12.

• 次のように書き替えて,同じ手順を繰り返しなさ い. そして,変数 a の値を確認しなさい add 加算 12

13.

• 次のように書き替えて,同じ手順を繰り返しなさ い. そして,変数 a の値を確認しなさい sub 加算 13

14.

• 次のように書き替えて,同じ手順を繰り返しなさ い. そして,変数 a の値を確認しなさい imul 乗算 次ページに解説 14

15.

アセンブリ言語の プログラム ① a に 30 をセット ② a × 20 の結果を, レジスタ eax にセット ③ a にレジスタ eax の 値をセット 15

16.

8-2 算術演算命令 16

17.

算術演算命令とは • 数に関する各種の演算を行う命令 加算 減算 乗算 除算 算術シフト など 17

18.

プロセッサの中の算術演算ユニット アドレスバス CPU データバス データ等の記 憶, スタックの管 理, 比較の結果の 保存 算術演算,論理 演算などの実行 算術演算 ユニット レジスタ プログラムカウンタ (インストラクションポインタ) 次に実行すべき プログラム命令の メモリアドレスを 記憶 R/W メモリ プログラム命令の解読 制御系 命令デコーダ 命令レジスタ 18

19.

Pentium 系列プロセッサでの算術演算の例 Visual C++ アセンブリ言語 a = a + 100; add eax,64h a = a – 100; sub eax,64h a = a * 100; imul eax,dword ptr ds:[0C08130h],64h a = a / 100; mov ecx,64h idiv eax,ecx a は整数の変数 19

20.

Pentium 系列プロセッサでの算術演算の例 Visual C++ アセンブリ言語 a = a + 100; add eax,64h a = a – 100; sub eax,64h a = a * 100; imul eax,dword ptr ds:[0C08130h],64h a = a / 100; mov ecx,64h idiv eax,ecx a は整数の変数 20

21.

加算 Visual C++ の プログラム アセンブリ言語 同じ意味 21

22.

減算 Visual C++ の プログラム アセンブリ言語 同じ意味 22

23.

乗算 Visual C++ の プログラム アセンブリ言語 同じ意味 IMUL は独特. 第2オペランドと第3オペランドを 乗算して,第1オペランドに格納 23

24.

除算 Visual C++ の プログラム アセンブリ言語 同じ意味 Pentium 系列プロセッサで の除算は,割った余りを扱う ための準備が必要で, プログラムが長くなる 24

25.

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

26.

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

27.

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

28.

• Visual Studioで「printf」の行に,ブレークポイン トを設定しなさい ※ 設定されていないときは,下のように操作して設定する ① 「 printf」の行をマウ スでクリック ② 「デバッグ」→「ブレー クポイントの設定/解除」 ③ ブレークポイントが 設定されるので確認. 赤丸がブレークポイント の印 28

29.

• Visual Studioで,デバッガーを起動しなさい. 「デバッグ」 → 「デバッグ開始」 • 「printf」の行で,実行が中断することを確認しな さい • あとで使うので,中断したままにしておくこと 「printf」の行で実行が 中断している 29

30.

• 「printf」の行で,実行が中断した状態で,変数の 値を表示させなさい.手順は次の通り. ② 変数名と値の対応表が 表示される ①「デバッグ」 → 「ウインドウ」 → 「ローカル」 30

31.

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

32.

• 逆アセンブルの結果で,「a = a + 100」のところ にある「add」を確認しなさい 32

33.

• 次のように書き替えて,同じ手順を繰り返しなさ い. • 逆アセンブルで「a = a - 10」のところの sub を確 認しなさい. 33

34.

• 次のように書き替えて,同じ手順を繰り返しなさ い. • 逆アセンブルで「a = a * 40」のところの imul を 確認しなさい. 34

35.

• 次のように書き替えて,同じ手順を繰り返しなさ い. • 逆アセンブルで「a = a / 5」のところの idiv を確 認しなさい. 35

36.

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