• 検索結果がありません。

8-1 算術演算の例

N/A
N/A
Protected

Academic year: 2021

シェア "8-1 算術演算の例"

Copied!
36
0
0

読み込み中.... (全文を見る)

全文

(1)

ca-8. 算術演算命令

1

金子邦彦

(コンピュータ・アーキテクチャ演習)

URL: https://www.kkaneko.jp/cc/ca/index.html

(2)

アウトライン

8-1 算術演算の例 8-2 算術演算命令

2

(3)

8-1 算術演算の例

3

(4)

足し算 add の例

4

アセンブリ言語のプログラム

a 100 をセット a 200 を足しこむ

実行結果の例

(5)

演習

• Visual Studio を起動しなさい

• Visual Studio で, Win32 コンソールアプリケー ション用プロジェクトを新規作成しなさい

5

プロジェクトの「名前」は何でもよい

(6)

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

6 6行追加

(7)

ビルドしなさい.ビルドのあと「1 正常終了,

0 失敗」の表示を確認しなさい

表示されなければ,プログラムのミスを自分 で確認し,修正して,ビルドをやり直す

7

(8)

printf 」の行をマ

ウスでクリック

② 「デバッグ」→「ブレ ークポイントの設定 /

除」

③ ブレークポイントが 設定されるので確認.

赤丸がブレークポイント の印

• Visual Studio で「 printf 」の行に,ブレークポイ ントを設定しなさい

8

(9)

• Visual Studio で,デバッガーを起動しなさい.

printf 」の行で,実行が中断することを確認し

なさい

あとで使うので,中断したままにしておくこと

9

「デバッグ」

→ 「デバッグ開始」

printf 」の行で実行が

中断している

(10)

printf 」の行で,実行が中断した状態で,変数 の値を表示させなさい.手順は次の通り.

10

① 「デバッグ」

→ 「ウインドウ」

→  「ローカル」

② 変数名と値の対応表が 表示される

(11)

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

11

「デバッグ」

→ 「続行」

(12)

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

12 add 加算

(13)

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

13 sub 加算

(14)

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

14 imul 乗算

次ページに解説

(15)

15

アセンブリ言語の

プログラム ①   a 30 をセット

②   a × 20 の結果を,

 レジスタ eax にセット

③   a にレジスタ eax  値をセット

(16)

8-2 算術演算命令

16

(17)

算術演算命令とは

数に関する各種の演算を行う命令 加算

減算 乗算 除算

算術シフト など

17

(18)

プロセッサの中の算術演算ユニット

18

レジスタ

CPU アドレスバスデータバス

メモリ

R/W

命令レジスタ 命令デコーダ

制御系

プログラムカウンタ

(インストラクションポインタ)

ユニット算術演算 プログラム命令の解読

算術演算,論理 演算などの実行

データ等の記 憶,スタックの管 理,比較の結果の

保存 次に実行すべき

プログラム命令 メモリアドレス を記憶

(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

19

a は整数の変数

(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

20

a は整数の変数

(21)

加算

21

Visual C++ プログラム

同じ意味

アセンブリ言語

(22)

減算

22

Visual C++ プログラム

同じ意味

アセンブリ言語

(23)

乗算

23

Visual C++ プログラム

同じ意味

アセンブリ言語

IMUL は独特.

第2オペランドと第3オペランドを 乗算して,第1オペランドに格納

(24)

除算

24

Visual C++ プログラム

同じ意味

アセンブリ言語

Pentium 系列プロセッサで の除算は,割った余りを扱う ための準備が必要で,

プログラムが長くなる

(25)

• Visual Studio を起動しなさい

• Visual Studio で, Win32 コンソールアプリケー ション用プロジェクトを新規作成しなさい

25

プロジェクトの「名前」は何でもよい

演習

(26)

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

26 4行追加

(27)

ビルドしなさい.ビルドのあと「1 正常終了,

0 失敗」の表示を確認しなさい

表示されなければ,プログラムのミスを自分 で確認し,修正して,ビルドをやり直す

27

(28)

• Visual Studio で「 printf 」の行に,ブレークポイ ントを設定しなさい

28

※ 設定されていないときは,下のように操作して設定す

printf 」の行をマ

ウスでクリック

② 「デバッグ」→「ブレ ークポイントの設定 /

除」

③ ブレークポイントが 設定されるので確認.

赤丸がブレークポイント の印

(29)

• Visual Studio で,デバッガーを起動しなさい.

printf 」の行で,実行が中断することを確認し

なさい

あとで使うので,中断したままにしておくこと

29

「デバッグ」

→ 「デバッグ開始」

printf 」の行で実行が

中断している

(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

「デバッグ」

→ 「続行」

参照

関連したドキュメント

一階算術(自然数論)に議論を限定する。ひとたび一階算術に身を置くと、そこに算術的 階層の存在とその厳密性

事業セグメントごとの資本コスト(WACC)を算定するためには、BS を作成後、まず株

Bluetooth® Low Energy プロトコルスタック GUI ツールは、Microsoft Visual Studio 2012 でビルドされた C++アプリケーションです。GUI

Visual Studio 2008、または Visual Studio 2010 で開発した要素モデルを Visual Studio

平成 28 年 3 月 31 日現在のご利用者は 28 名となり、新規 2 名と転居による廃 止が 1 件ありました。年間を通し、 20 名定員で 1

プロジェクト初年度となる平成 17 年には、排気量 7.7L の新短期規制対応のベースエンジ ンにおいて、後処理装置を装着しない場合に、 JIS 2 号軽油及び

・太陽光発電設備 BEI ZE に算入しない BEIに算入 ・太陽熱利用設備 BEI ZE に算入しない BEIに算入 ・コージェネレーション BEI ZE に算入

平成 27 年 4