---
title: ca-8. 算術演算命令
tags:  #プロセッサ #アセンブリ言語 #レジスタ #算術演算命令 #visual studio  
author: [kunihikokaneko](https://www.docswell.com/user/6674398749)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/5GE8D9QYED.jpg?width=480
description: コンピュータ・アーキテクチャ演習 URL: https://www.kkaneko.jp/cc/ca/index.html
published: December 23, 21
canonical: https://www.docswell.com/s/6674398749/K7E3JZ-2021-12-23-134906
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/5GE8D9QYED.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/MLELMWX97R.jpg)

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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/54JMY9LVJW.jpg)

8-1 算術演算の例
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/ZPJR9GKW79.jpg)

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


# Page. 5

![Page Image](https://bcdn.docswell.com/page/NPEXQXLVJX.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/63EK9WL5ED.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/4L73W13175.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/V87DKX4KJG.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/4VJPKPM3E8.jpg)

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


# Page. 10

![Page Image](https://bcdn.docswell.com/page/L2EVV29NEQ.jpg)

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


# Page. 11

![Page Image](https://bcdn.docswell.com/page/Z57GLRZ5EL.jpg)

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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/V4EQYVLLJP.jpg)

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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/DKJ4WMD571.jpg)

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


# Page. 14

![Page Image](https://bcdn.docswell.com/page/PLE1Y8Z27G.jpg)

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


# Page. 15

![Page Image](https://bcdn.docswell.com/page/8GEWGZ92J2.jpg)

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


# Page. 16

![Page Image](https://bcdn.docswell.com/page/W47ZL194J3.jpg)

8-2 算術演算命令
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/KYJ6WLKGJV.jpg)

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


# Page. 18

![Page Image](https://bcdn.docswell.com/page/5GJ5M1PXJ4.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4LE3W134E5.jpg)

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


# Page. 20

![Page Image](https://bcdn.docswell.com/page/V8EDKX457G.jpg)

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


# Page. 21

![Page Image](https://bcdn.docswell.com/page/4V7PKPMDJ8.jpg)

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


# Page. 22

![Page Image](https://bcdn.docswell.com/page/L2JVV29GJQ.jpg)

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


# Page. 23

![Page Image](https://bcdn.docswell.com/page/Z5EGLR4DJL.jpg)

乗算
Visual C++ の
プログラム
アセンブリ言語
同じ意味
IMUL は独特．
第２オペランドと第３オペランドを
乗算して，第１オペランドに格納
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/V4JQYVGX7P.jpg)

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


# Page. 25

![Page Image](https://bcdn.docswell.com/page/DK74WM52E1.jpg)

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


# Page. 26

![Page Image](https://bcdn.docswell.com/page/PLJ1Y8WKEG.jpg)

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


# Page. 27

![Page Image](https://bcdn.docswell.com/page/8GJWGZ6P72.jpg)

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


# Page. 28

![Page Image](https://bcdn.docswell.com/page/W4EZL1Y673.jpg)

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


# Page. 29

![Page Image](https://bcdn.docswell.com/page/KY76WLDL7V.jpg)

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


# Page. 30

![Page Image](https://bcdn.docswell.com/page/5G75M13M74.jpg)

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


# Page. 31

![Page Image](https://bcdn.docswell.com/page/V9J291ZRER.jpg)

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


# Page. 32

![Page Image](https://bcdn.docswell.com/page/5DEY4ZR5JM.jpg)

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


# Page. 33

![Page Image](https://bcdn.docswell.com/page/2VJNY3D478.jpg)

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


# Page. 34

![Page Image](https://bcdn.docswell.com/page/GYE9P9G4J3.jpg)

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


# Page. 35

![Page Image](https://bcdn.docswell.com/page/5GE8D9VVED.jpg)

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


# Page. 36

![Page Image](https://bcdn.docswell.com/page/MLELMW5R7R.jpg)

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


