---
title: NO12　メカトロニクス CPU（命令、アドレスモード）
tags:  #メカトロニクス　cpu #opcodeとoperand #machine cycle #アドレスモード #機械系のためのメカトロニクス  
author: [下条誠](https://convert.docswell.com/user/m_shimojo)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/V47QWRVN7P.jpg?width=480
description: 1. CPUの内部構造の初歩がわかる 2. 高級言語(C, pythonなど)と、CPUが理解できる命令 （機械語）との関係がわかる 3. CPU内部での命令実行サイクルがわかる 4. CPUがメモリへアクセスする方法は巧みな􀩵夫がある 機械系のためのメカトロニクス  内容 1. CPUの概要 ①コンピュータの基本構成要素 ②内部構造：レジスタ、ALU、BUS 2. CPUへの命令とは何か ①命令（高水準言語と機械語） ②opcodeとoperand(s) ③命令セット 3. 命令の実行のしくみ 1. Instruction とMachine cycle ①ステップ1（Fetch） ②ステップ2（Decode） ③ステップ3（Execute) ④実行結果の状態を示す(PSW) 4. アドレスモード 1. 直接アドレス(direct addressing) 2. 間接アドレス(indirect addressing) 3. レジスタを使ったアドレス指定 ①レジスタアドレス ②レジスタ間接アドレス ③レジスタを使ったアドレス修飾 a. インデックスアドレス b. ベーススアドレス c. ベースインデックススアドレス d. 相対アドレス 4. イミーディエイトアドレス 5. プログラムが再配置可能とは
published: April 17, 22
canonical: https://convert.docswell.com/s/m_shimojo/KNG4LZ-2022-04-17-202613
---
# Page. 1

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

第12回コンピュータの原理
メカトロニクス
CPU（命令、アドレスモード）
下
条
誠
電気通信大学名誉教授
https://researchmap.jp/read0072509/
機械系のためのメカトロニクス
The University of Electro-Communications Department of Mechanical Engineering and Intelligent System


# Page. 2

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

達成目標
2
1. CPUの内部構造の初歩がわかる
2. 高級言語(C, pythonなど)と、CPUが理解できる命令
（機械語）との関係がわかる
3. CPU内部での命令実行サイクルがわかる
4. CPUがメモリへアクセスする方法は巧みな工夫がある
これらのことがわかる
参考のためのスライドです。とばしても構いません。
参考文献：都倉信樹、コンピュータ概論、岩波書店（１９９２）


# Page. 3

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

内
1.
2.
3.
4.
容
CPUの概要
① コンピュータの基本構成要素
② 内部構造：レジスタ、ALU、BUS
CPUへの命令とは何か
① 命令（高水準言語と機械語）
② opcodeとoperand(s)
③ 命令セット
命令の実行のしくみ
1. Instruction と Machine cycle
① ステップ1（Fetch）
② ステップ2（ Decode）
③ ステップ3（Execute)
④ 実行結果の状態を示す(PSW)
アドレスモード
1. 直接アドレス(direct addressing)
2. 間接アドレス(indirect addressing)
3. レジスタを使ったアドレス指定
① レジスタアドレス
② レジスタ間接アドレス
③ レジスタを使ったアドレス修飾
a. インデックスアドレス
b. ベーススアドレス
c. ベースインデックススアドレス
d. 相対アドレス
4. イミーディエイトアドレス
5. プログラムが再配置可能とは
3
③
②
④
①
memory
データが格納されてい
るメモリへアクセスす
る巧みな工夫
アドレスモード


# Page. 4

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

CPUの概要
4


# Page. 5

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

1. CPUの基礎について
5
1. バス（BUS)の説明
2. 算術論理演算器（ALU）の働きとその回路
3. CPUの基礎
① CPUの内部構造
② CPUへの命令
③ アドレス指定モード
④ 実行順序の制御
⑤ 割込み
4. メモリーの説明
説明は、往年の名機“PDP-11”を参考とする。その考え方
や構造はシンプルであり、後のコンピュータに大きな影響を
与えた。
PDP-11上のオペレーティングシステム (OS) の設計は他
のOS、例えばCP/MやMS-DOSの設計に影響を及ぼしている。
最初の公式にUNIXと名付けられたバージョンのOSは、
1970年に PDP-11/20 上で動作した。PDP-11のプログラ
ミング上の低レベルな特徴とC言語の言語要素の類似は非常
によく言われている（wikipedia）
PDP-11は16ビットマシンです。ただし、メモ
リ番地はバイト単位(8ビット)となっています。


# Page. 6

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

1.0
6
コンピュータの基本構成要素のイメージ
基本構成要素
CPU →
工場
data
Memory→倉庫
Bus →
道路
製品の搬入
製品の搬出
製品材料
の格納
CPUの動作
サイクル
製品の製造
材料の搬入
CPU
材料の搬出
工場
Memory
data
道路
Bus
倉庫


# Page. 7

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

1.0
コンピュータの基本構成（簡単化したモデル）
data
Bus
保存
store
実行
execute
データの保存
命令解読
decode
CPUの動作
サイクル
命令取出し
fetch
データの読出し
Memory
NO
割込み処理へ
Yes
割込み？
interrupt
割込み機能は、メカトロニクス
に大変重要な技術
Bus
data
メモリは、データを記憶する
（プログラムもデータの一種）
Busは、CPUとメモリの間でデータ
のやり取りを行う通信路
7


# Page. 8

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

1.0 コンピュータの基本構成
8
⚫ CPUはBUSを通して
メモリ、周辺機器と
データのやり取りを
行う
⚫ CPUは、メモリ、周
辺機器とはアドレス
（番地）を用いて
データの通信を行う
CPUは、各種アーキテク
チャがあり、その内部構
造は違ってくる。
⚫ BUSの通信容量/速
度がコンピュータの
性能を左右する
今回の説明は後のコンピュータ
に大きな影響を与えた、往年の
名機“PDP-11”を参考にする
PDP-11”の構造はシンプルで
あり、その構造は後のコン
ピュータに大きな影響を与えた、
往年の名機である。
data
Busには、system bus、 Internal bus、
Storage busなど各種別ある


# Page. 9

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

CPU, BUS, Memory, I/O（CPU直結バス例）
CPUは、 ①番地を指定して、 ②データの入出力（ ③読み/書き指令）を行う
電気を通す配線の束
①
②
③
CPU直結バス
(IBM PC, PDP11 Unibusなど)
9


# Page. 10

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

1.1 CPUの内部構造の話し
CPU
Memory
データ
レジスタ
内部バス
制
御
部
命令
instructions
算術演算器
ALU
次では、これらについて簡単に
説明します。
CPUは、
1. データの保持を行うレジスタと
2. 算術論理演算を行うALUと
3. これらをつなぐデータ通信路で
ある内部バス、
4. そしてこれらを制御する制御部
により構成されている
10


# Page. 11

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

1.1 CPUの内部構造の話し
11
⚫ CPUの内部構造を見てみよう
RAM
レジスタ
registor
address
内部BUS
Bus Address Reg.
control
Bus Control Reg.
SP
stack pointer
data
Bus Data Reg.
PC
内部BUS
CPU
(PDP11)
算術論理演算器
都倉信樹、コンピュータ概論、岩波書店（１９９２）
状態表示器
内部BUS
program counter


# Page. 12

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

1.２
レジスタとは何か
12
◼ レジスタとは、CPU内部にある高速・小容量なメモリである
◼ 計算結果や途中経過などの保持や、メモリのアドレス修飾などに用いられる
汎用レジスタ
1. 役割が決まっている専用レジ
スタと、様々な用途に用いら
れる汎用レジスタがある
2. 専用レジスタとして、
① プログラムカウンタ
(PC: Program Counter)
② スタックポインタ
(SP:Stack Pointer)
SP
③ ステータスレジスタ
(SR:Status Register)
PC
④ この他、インデックスレジス
タ、ベースレジスタ、アキュ
ムレータなどがある
Status Register


# Page. 13

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

1.２
レジスタの回路構成
13
No.6ディジタル回路でも説明
バス上のデータをタイミングに応じて取込み/保持したり、記憶した内容
をバス上に出力する回路を示す。このような回路はレジスタと呼ばれる。
BUS
16,32,64本など
多数の導線がある
Register
D
Q
CK
oe
D
Q
CK
D
……
oe
Q
CK
oe
output enable
CK
ck↑のタイミングでデータバス上のデータを保持
①
②
③
④
バスの導線にそれぞれDフリップフロップが接続している
D入力は、バス上のデータをCKの立上り↑で取込み保持する
Q出力は、oeで制御されるトライステート回路である
oe=1でバスに接続し、 oe=0でバスから絶縁状態となる
Q出力：Tristate回路
• oe=1でバスに接続
• oe=0でバスから絶縁状態
X
切離される


# Page. 14

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

1.3
ALU (Arithmetic Logic Unit)とは何か
14
ALUは、１）加減演算、２）論理演算、３）状態判定を行う装置である
① 入力A
(16bits) A(a15 a14 a13…a2 a1 a0)
② 入力B (16bits) B(b15 b14 b13…b2 b1 b0)
A
B
A入力
③ 出力G (16bits) G(g15 g14 g13…g2 g1 g0)
B入力
１）加減算
D
F
出力
ステータス
制御部
入力
演算結果
２）論理演算
３）演算結果の状態判定
を行う
G
No.11CPU_ALUで説明


# Page. 15

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

1.3 ALUの回路構成
15
No.11CPU_ALUで説明
FA: Full Adder
①
N:negative 負数の時“１”
②
Z:zero ゼロの時“１”
③
V:overflow オーバーフロー発生“１”
④
C:Carry 最上位からの桁上げ発生“１”


# Page. 16

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

1.4 BUSとは何か
16
No.10
BUSで説明
⚫ バスとは、例えれば
データを運ぶ道路のよ
うなもの
⚫ その通行速度が速く、
その道幅（車線）が広
いほど大量のデータを
高速に届けられる
⚫ データの輸送速度がコ
ンピュータの性能を決
める
バスは、CPU
とメモリや周辺
機器の間をつな
ぐ通信路である
data
バスとは、具体的には電気
信号を通す配線の束（16、
32、64本等）である。
Busには、system bus、 Internal bus、
Strage busなど各種別ある


# Page. 17

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

2. CPUへの命令の話し
人間の言葉と機械の言葉
int main{}
{
int a, b, sum;
scanf(“%d, %d”, &amp;a,
&amp;b);
sum=a+b;
printf(“%d/n”, sum);
return 0;
}
✓
✓
✓
✓
✓
人間の書いたプログラムを機械語へ翻訳
命令（セット）と機械語
機械語はどのように実行されていくのか
instruction とmachine cycle
命令の実行ステップ
次は、CPUではどのような
処理が行われているか、の話
しをします
17


# Page. 18

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

2.
命令（instruction）とは何か？
18
今回は、CPUでは、どのような処理が行われているか、の話しです
① 命令語とは何か(2.～）
② アドレスモードとは何か（４.～）
人間の言葉と機械の言葉
翻訳
int main{}
{
int a, b, sum;
scanf(“%d, %d”, &amp;a,
&amp;b);
sum=a+b;
printf(“%d/n”, sum);
return 0;
}
機械語が格納されているメモリへの
アクセス方法には多くの種類がある
RAM
必要とするデータ
をメモリから取出
す
いろいろな
アクセスモード
1101011111100101
CPUはどのように情報
処理を行う？
①命令語とは何か
命令語が格納されて
いるメモリ
②アドレスモードとは何か


# Page. 19

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

2.0 命令とは何か
program言語による
CPUへの指示
int main{}
{
int a, b, sum;
scanf(“%d, %d”, &amp;a, &amp;b);
sum=a+b;
printf(“%d/n”, sum);
return 0;
}
19
機械語
machine instructions
人間が理解
できる命令
CPUが理解
できる命令
1101011111100101
0111010101101101
1101011101100111
0101110101101100
変換が必要
compile
1111010101010011
0101011101101101


# Page. 20

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

2.1 命令（高水準言語と機械語）
高水準言語
compiler
変換
int main{}
{
int a, b, sum;
scanf(“%d, %d”, &amp;a, &amp;b);
sum=a+b;
printf(“%d/n”, sum);
return 0;
}
機械語に対応する人間
にも分かる表記コード
compiler
コンピュータ プログラム
High level language
assembler
プログラム コード
Assembly language
{
命令１(program instion 1):
命令２(program instion 2):
命令３(program instion 3):
命令４(program instion 4):
命令５(program instion 5) :
命令６(program instion 6):
}
mnemonic code
1101011111100101
変換
assembler
c, c#, c++ java, python,
ruby, fortran, cobol
人間にとって理解しや
すい構造を持った言語
機械語
変換
CPUが直接理解し実行
することができる命令
機械語
machine instructions
1101011111100101
これ
0111010101101101
1101011101100111
0101110101101100
1111010101010011
0101011101101101
20


# Page. 21

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

2.1 命令（高水準言語と機械語）
高水準言語
Assembly
language
int main{}
{
int a, b, sum;
sum=a+b;
…….
return 0;
}
….
Add R1,R2
….
BNE Loop
Return
機械語
1101011111100101
0111010101101101
1101011101100111
0101110101101100
1111010101010011
0101011101101101
Instruction と Machine cycle
④
memory
③
機
械
語
②
compiler
①
CPU
memory
1101011111100101
0111010101101101
1101011101100111
0101110101101100
1111010101010011
0101011101101101
…….
RAM
machine instructions
⚫ CPUは機械語を実行する
① 機械語を取出す
(fetch)
② 機械語を解読する
(decode)
③ 実行する
(execute)
④ 保存する
(store)
21


# Page. 22

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

2.2 opcodeとoperand(s)について
22
⚫ 命令（instruction）は、opcodeとoperand(s)から成る
opcode
命令(operation)
•
加算
•
減算
•
条件分岐
•
サブルーチン
•
・・・
operand(s)
番地(address)や値
•
命令で操作する対象の番地
（アドレス）や値など
•
operand(s)は複数個の場合
もある
•
０オペランド命令もある
（RESETなど）
CPUのアーキテクチャによって、見かけは変わりますが、基本の考え方は、
どのプロセッサでもあまり変わりません
ISAとして次からの説明
は、往年の名機PDP11の
CPUを例に取ります


# Page. 23

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

2.2 opcodeとoperand(s)の例
アセンブリ言語
(mnemonic)
ADD
R0, R1
機械語
0110
000000 000001
opcode
operand
加算
23
R0とR1を加算して、結果をR1に入れる
R0+R1→R1
対象は、R0,R1
R0
Before
After
R0: 0002
R0: 0002
R1: 0004
R1: 0006
R1
CPU
(PDP11)


# Page. 24

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

2.2 opcodeとoperand(s)
この例では、operand(s)が2つ(の場所)に分れている
(sourceとdestination)
operands
opcode
対応する機械語
ADD
R0
source
0110
R1
destination
機械語(machine instruction)
000000 000001
R0+R1→R1
① 加算命令では、「どれ」と「どれ」を足して、その結果を「何処」
に保存するかが必要になる
② それらの存在する番地を指定する部分が operand(s)である
③ また、その結果を格納する場所がdestinationとなる
この例では、
➢ 「R0」と「R1」が加算の対象となるレジスタ（場所）
➢ 「R1」が格納場所 (destination)
となる
24


# Page. 25

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

2.3 命令セット
25
⚫ CPUが理解できる命令の集合を「命令セット」と呼んでいます
⚫ 代表的な命令セットとしては、「x86」「PowerPC」「MIPS」「ARM」などが
あります
⚫ この命令セットの設計の考え方を命令セットアーキテクチャ (ISA Instruction
Set Architecture,)と呼びます
⚫ 基本の考え方は、どのプロセッサでもあまり変わりません
高水準言語
python
c++
fortran
変換(compiler)
ISA
c,
c#
java,
コンパイラーは優秀で、
いろいろなCPUのISA
に対しても、高級言語
から変換してくれます
このためuserは
ISAを気にする必
要はありません
HardWare
assembly language
cobol
ruby
見かけは変わ
りますが


# Page. 26

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

2.3 命令セットの例（ PDP11）
① 1オペランド命令
opcode
dst
opcode
source
oprand
destination
oprand
ADD
R0
R1
② 2オペランド命令
opcode
src
dst
0110
③ 分岐命令
opcode
reg
dst
この命令の機械語。16bit
PDP-11は約70の命令を持っている。①～⑥にその命令の例を示す
reg
⑥ ０オペランド命令
① 1オペランド命令: CLR, INC, TST, ROR, JMP…
② 2オペランド命令: MOV, CMP, ADD, BIT, ASH…
opcode
③ 分岐命令: BR, BNE, BEQ, BGT, BLT, BPL, …
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
opcode (operation code)
src (source operand)
dst (destination operand)
reg (registor)
R0+R1→R1
② ソース（R0）からの値と送り先(R1)の値を、加算して、
送り先(R1)に保存する
⑤ サブルーチンからの戻り命令
opcode
2オペランド命令例
① これは②の形式である。opecodeは、 “ADD”で加算を
示し、srcはR0で、dstはR1となる。
offset
④ サブルーチン呼び出し命令
opcode
000000 000001
26
：命令コード
：ソース(源)
：送り先
：レジスタ
④ サブルーチン呼び出し命令: JSR
⑤ サブルーチンからの戻り命令: RTS
⑥ ０オペランド命令: HALT、 WAIT、 RESET..
（CPUのarchitectureによって変わる。3オペランド命令などもある）


# Page. 27

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

2.3 命令と機械語の例（ PDP11）
機械語
◼ アセンブラ出力リスト
Line番号 address
27
アセンブリ言語
machine machine machine
code1
code2
code3
5855
031252
000167
000600
5856
031256
013727
177776
……
……
……
5976
032056
005037
Label
4$:
177572
ENDM:
命令
operand1
JMP
ENDM
MOV
@#PSW,
(PC)+
……
……
……
CLR
@#SR0
operand2
◼ 実際のメモリ配置
✓ 3bits毎に区切り、8進(octal)表示
✓ addresは16bits (word)毎
0
JMP
031252
000167
0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1
ENDM
031254
000600
15 14
031256
013727
0
031260
177776
……
……
CLR
032056
005037
@#SR0
032060
177572
032062
……
MOV
@#PSW,(PC)+
8進(octal)表示
0
0
8 7
….
0
1
0
6
6
8進表示
machine
address
code
….
0
7
1
PDP-11 word
0
0
0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0
15 14
✓
✓
….
8 7
….
1
0
命令は、16bits(word)単位を基本に、1単位、2単位、3単位で構成される
この例では、JMP、MOVは2単位(2 word)で構成されている


# Page. 28

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

マイクロアーキテクチャ
28
⚫ マイクロアーキテクチャ：microarchitecture (μarch)
•
命令セット（ISA)を、CPU内部でどのように解釈して、どのような制御方式で実行
するかは、“μarch”によって決められる (CPU内部の仕組み)
•
CPUの設計方式は改良され変化していく。変化するCPU設計方針と命令セット
（ISA)の違いをμarchによって吸収する
高水準言語
c++
c,
python
命令
assembly
language
ISA
c#
μarch
μ命令列
・
・
・
HardWare
assembly language
java,
ruby
https://ja.wikipedia.org/wiki/マイクロアーキテクチャ
Hardware
μarch


# Page. 29

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

アセンブリ言語とは
アセンブリ言語（assembly language）とは、プログラミング言語の一つで、コン
ピュータのCPU（MPU/マイクロプロセッサ）が直接解釈・実行できる機械語（マシ
ン語）と正確に対応する命令語で構成された言語です。
機械語に対応し、かつ人間にも理解できる「ニーモニック」（mnemonic）と呼ばれ
る短いアルファベットの命令語を用いて記述します。
例）add r1,r2,
（”r1とr2を加算する” など）
アセンブリ言語は、機械語と一対一の対応があるため、機械語への変換は簡単です。私も1980年
ごろ、この変換プログラム(Assembler)を作成したことが有ります。当時、私はIMSAI 8080を購入
しましたが、プログムから機械語への変換に大変手間がかかっていました。そこで研究室にあっ
たPDP11/40を用いて、IMSAI用のアセンブラ言語を機械語に変換するプログラム（Cross
Assembler）を作りました。ニーモニックと機械語の対応表を作り、あとプログラムの中のラベル
に対応する処理を行うだけで良かったので、codingは1週間もかかりませんでした。しかし、完成
にはデバックを含めると3週間ほどかかった覚えがあります。
29


# Page. 30

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

３．命令の実行のしくみ
30
⚫ CPUの中でどのように命令が実行されて
いくのかを見てみよう
RAM
CPU
Memory
内部BUS
レジスタ
registor
SP
PC
program counter
内部BUS
CPU
(PDP11)
算術論理演算器
状態表示器
内部BUS
stack pointer


# Page. 31

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

3.1 Instruction と Machine cycle
⚫ CPUはclock cycleにより順次内部処理を進める
④
③
②
②命令解読
decode
割込み？
①
NO
interruput
①命令取出し
fetch
Yes
CPUの動作
周波数
①
②
③
④
③実行
execute
④保存
store
割込み処理へ
Clock
memory
machine
cycle
fetch
decode
execute
store
(write back)
machine cycle数はCPU Architectureに依存する
①
②
③
31


# Page. 32

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

Instruction と Machine cycle
②命令解読
decode
⚫ fetch, decode, execute
だけではだめなの？
割込み？
NO
interruput
machine
cycle
①命令取出し
fetch
③実行
execute
Yes
割込み処理へ
⚫ CPUアーキテクチャによる考え方の違いと思われる。
•
例えばMIPSアーキテクチャでは、CPUの内部レジスタ間で演算処理を行い、
結果をメモリに保存するという流れである。この考え方では、 ”fetch,
decode, execute, store”が考え方として素直である
•
いわゆる、RISC系の”Load-Store archictecture”？
•
私が参考にしている教科書では、 ”execute”の中にメモリへの書き出しも含
まれているので”fetch, decode, execute”の方が良いという考え方と思わる
•
私としては、たいして大きな問題ではないと考える（ 5 stepとする説明もあ
るようだ ）
注）私の個人的な意見です
MIPSアーキテクチャ：アーキテクチャとして美しく、教科書で例としてよく使われている。
実例としてPlayStationなどのCPUにも使われている
32


# Page. 33

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

3.2 ①命令のステップ1（Fetch）
プログラムは次のように実行される
ADD
0110
1. Fetch: 主記憶にある命令をIRに読込む
PC(Program Counter)は、次
に実行する命令番地を示す。
④
R0
R１
33
R0+R1→ R1
000000 000001
1.fetch
①
よって、そのメモリ番地内容
(命令)を読み出す
PC(R7)
① BAR←PC(R7)
i.
trB=1でPC(R7)→IBB →ALUの
B入力
ii.
ALUのA入力=0として加算
②
iii. ALU出力→IBG→BAR
② メモリからREAD
i.
BARでメモリ番地指定
ii.
データバスにメモリ内容を出
力→BDR
③ PC←PC+2
i.
①
②
PC(R7)
注
次の番地を示すために+２）
④ IR（命令レジスタ）に読み込む
i.
CPU
(PDP11)
ADD R0,R1
BDR→IBG→IR(命令レジスタ)
主記憶
注）バイトアドレスのため+２（命令は16bit長即ち２バイト）


# Page. 34

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

3.2 ②命令のステップ2（ Decode）
ADD
2. Decode: 制御部で命令を解釈
0110
R0
R１
R0+R1→ R1
000000 000001
IR（命令レジスタ)の内容を解釈
し、必要な操作信号を生成する。
例えば、
sr
① RR(4bit):データを書込むべきレジ
スタを指定
i.
ALU出力→IBG
ii.
sr=1でIBG→R1
①
② RA(4bit): Aポートへ読出すレジス
タを指定
i.
trA=1でRA指定レジスタ→IBA
ii.
R0→IBA→ALUのA入力
③ RB(4bit): Bポートへ読出すレジス
タを指定
i.
trB=1でRB指定レジスタ→IBB
ii.
R1→IBB →ALUのB入力
2.decode
CPU
(PDP11)
この様にデータの流れを制御できる
主記憶
注）R0～R7は汎用レジスタで出口がA,Bある。Aポートは内部バスIBAに、BポートはIBBに接続している。
34


# Page. 35

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

3.3 ③命令のステップ3（Execute)
3. Execute: 制御部で命令を実行
IR（命令レジスタ)の内容を解釈
した結果に基づき、必要な操作
を実行する。例えば、
① R0→IBA→ALUのA入力
ADD
0110
④
R0
R１
35
R0+R1→ R1
000000 000001
3.execute
①
i.
trA=1でRA指定レジスタ→IBA
ii.
R0→IBA→ALUのA入力
②
② R1→IBB→ALUのB入力
i.
trB=1でRB指定レジスタ→IBB
ii.
R1→IBB →ALUのB入力
③ ALUに加算命令を指令
i.
ALU制御入力 (x,y,z,u,v)
CPU
注
(PDP11)
④ ALU出力→IBG→R1
i.
ALU出力→IBG
ii.
sr=1でIBG→ RR指定レジスタ
①
②
③
iii. IBG→R1
この様にデータの流れを制御できる
主記憶
注）ALUの仕組みで解説した


# Page. 36

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

3.4 ④実行結果の状態を示す(PSW)
ALUで算術論理演算を実行した
結果を示す(PSW)
ADD
0110
R0
R１
36
R0+R1→ R1
000000 000001
PSW: Program Status Word
① 実行結果の状態を示す
1. N：負数になると“１”
2. Z：ゼロとなると“１”
3. V：オーバーフローで“１”
4. C：最上位からの桁上げで
“１”
② CPUの優先度を示す (3bit: 0~7)
CPU
(PDP11)
PSWの構成
(address: FFFE)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
unused
* * * T N Z V C
優先度
判定結果
実行結果の
状態を示す
主記憶


# Page. 37

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

4.0 アドレスモードの話し
37
命令（instruction）は、opcode と operand(s) から成る
opcode
命令(operation)
operand(s)
番地(Address)や値
②アドレスモード
機械語が格納されて
いるメモリへのアク
セス方法
例えば、operand(s)の少ないbit数
で、どのようにして広いメモリ空間
を指定するのだろう？
Addressing
① ”ADD R0,R1“では命令部
分は4bitで、operandsは
12bitです
② そのアドレス空間は212、
たった４kBです
③ どうすればもっと広いメモ
リ空間カバーできるのだろ
うか？


# Page. 38

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

4.0 いろいろなモードがある方が便利
38
プログラムはメモリのどこに配置されても動作することが求められる
再配置可能 （relocatable）
このためプログラムの分岐命令などでは
➢ プログラム原点からの位置
などで記述される
次では、いろいろなアドレス方法を
解説します。
A_BGN+X
JMP A
LooP: sum=sun+i
B
load
begin Program
Program
begin
HDD
補助記憶装置
A: TST
BNE Loop
JMP A
①複数のプログ
ラムがメモリ
に配置される
A: TST
②その配置位置
は常に同じで
はない
プログラム B
注）特定のハードウェアのI/Oレジスタ、Interrupts
Vectorなどでは、絶対番地が必要な場合がある
プログラム A
プログラム C
A-BGN
⚫ そして、このような特徴に対応できるアド
レス指定方法が実行順序の制御では便利で
ある
Memory
Address
offset
➢ 現在の命令番地からの変位（offset)
D
C
メモリ


# Page. 39

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

４.0 アドレスモード
39
◼ オペランドは番地(Address)や値を指定する。その番地の指定方式にはいろいろある。
考え方として「直接or間接」そしてレジスタを使った「アドレスの修飾」がある
重要
アドレス指定方式の種類
1.
直接アドレス(direct addressing)
2.
間接アドレス(indirect addressing)
3.
レジスタを使ったアドレス指定
4.
①
レジスタアドレス(register addressing)
②
レジスタ間接アドレス(registor indirect addressing)
③
レジスタを使ったアドレスの修飾
a.
インデックスアドレス(index addressing)
b.
ベースアドレス(base addressing)
c.
ベースインデックスアドレス(base index addressing)
d.
相対アドレス(relative addressing)
イミーディエイトアドレス(immediate addressing)


# Page. 40

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

4.1
直接アドレス
40
(direct addressing)
⚫ メモリのアドレスを直接指定
（実効アドレスは、有効アドレスともいう）
operand(s)
命令
A
Address
Memory
1000
1002
･･･
A
直接指定
プログラムがメモリ上にロードされるとき、そのロード位置は一定ではない。
ただし“A”番地は絶対アドレスであるため、不都合が生じることが有る。
実効アドレス
B


# Page. 41

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

4.2 間接アドレス
41
(indirect addressing)
⚫ オペランドの値(A)が指定したメモリのアドレスの内容が実効アドレスとなる
（実効アドレスは、有効アドレスともいう）
operand(s)
命令
A
Address
Memory
1000
1002
･･･
A
B
B
C
間接指定
実効アドレス


# Page. 42

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

4.3 ① レジスタアドレス (register addressing)
⚫ レジスタ(Ra)を直接指定
operand(s)
命令
Ra
レジスタ
Ra
A
直接アドレス指定方式のレジスタ版
直接アドレス指定方式において、
アクセスの対象がレジスタとなる
42


# Page. 43

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

4.3
② レジスタ間接アドレス
43
(register indirect addressing)
⚫ レジスタ(Ra)を用いて間接的にアドレスを指定する
間接アドレス指定方式において、
アクセスの対象がレジスタとなる
operand(s)
命令
Ra
レジスタ
Address
Memory
1000
1002
Ra
A
･･･
A
実効アドレス
間接アドレス指定方式のレジスタ版
B


# Page. 44

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

4.3
③ a.インデックスアドレス
(index addressing)
⚫ 先頭位置アドレス(A)とインデックスレジスタ(Ri)を指定する方式
➢ 配列など連続したデータに、繰り返し同じ命令を行う場合などに使用する
➢ インデックスレジスタには何番目の要素を処理しているかを表す値を記録し、この値を
順次変更して命令を実行する
連続的な領域にアクセスする場合に利用
operand(s)
命令
Ri
A
配列等の
先頭位置
Address
レジスタ
先頭位置
アドレス
Memory
1000
1002
Ri
インデックス
レジスタ
X
+
順次変更して配列
などへアクセス
（インデックスアドレスは、指標アドレス指定ともいう）
A+X
･･･
A+X
実効アドレス
B
44


# Page. 45

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

4.3
③ b.ベーススアドレス
(base addressing)
⚫ 相対位置(A)とベースレジスタ(Rb)を指定する方式。
➢ ベースレジスタには、プログラムをメモリ上にロードした時の先頭のアドレスを記録する
➢ すると、プログラムがメモリ上のどの位置にロードされても、命令の値（A)を変えること
なく実行できる
operand(s)
命令
Rb
X
プログラムが再配置可能
相対位置を順次変
更することでプロ
グラムへアクセス
Address
Memory
レジスタ
相対位置
1000
1002
Rb
ベース
レジスタ
+
A
ロードした時の
先頭アドレス
（ベースアドレスは、基底アドレス指定ともいう）
A+X
･･･
A+X
実効アドレス
B
45


# Page. 46

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

4.3
③ b.ベーススアドレス
46
(base addressing)
1. プログラムは利用時にメモリ上にロードされるため、そのメモリ内での位置は変化する
2. ただし、プログラムはメモリ内のどこにロードされても動作する必要がある
3. ここで図のようにプログラムCで目的のアドレスTargetにアクセスすることを考えよう
レジスタRbを基準として、それに変位(X)を加え
た値をアドレスとする
HDD
Address
命令
Rb
レジスタ
Rb
基底
A_BGN
Memory
C
X
A_BGN
変位
+
C
プログラム
A
X
X+A_BGN
① プログラムCの始めの番地A_BGN をレジスタ
Rbに入れる
② それに変位Xを加えた番地とする
プログラム
Target
1101011111100101
0111010101101101
0110000000000001
0101110101101100
…….
プログラム
メモリ
B
D
プログラム A
load
⚫
B
補助記憶装置


# Page. 47

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

47
4.3 ③ c.ベースインデックススアドレス (base index addressing)
⚫ インデックスレジスタ(Ri)とベースレジスタ(Rb)を指定する方式
ベースレジスタは「プログラムの開始位置」，インデックスレジスタは
「繰り返しの位置」に対して利用される
operand(s)
命令
Rb
Ri
Address
Memory
1000
1002
･･･
Ri
X
Rb
Y
+
X+Y
X+Y
実効アドレス
B


# Page. 48

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

4.3
③ d.相対アドレス
48
(relative addressing)
⚫ 相対変位（A)とプログラムカウンタ（PC)を指定する方式。
➢ ベースアドレス指定方式とほぼ同じ。違いはベースレジスタの代わりにプログラムカウンタを
使用している点。
ベースレジスタを持たないとき利用される方式
operand(s)
命令
PC
この場合、分岐命令などは、現在実行している命令（PC）
からの相対アドレスでプログラムは記述する
A
Address
Memory
レジスタ
相対変位
1000
1002
+
PC
X
プログラムカウンタ
（自己相対アドレス指定）
X+A
･･･
A+X
実効アドレス
B


# Page. 49

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

4.4 イミーディエイトアドレス
(immediate addressing)
⚫ 命令のオペランド値そのものが対象のデータ
operandを番地でなく値として使う
operand(s)
命令
A
値として直接演算器へ送られる
イミーディエイトアドレス指定方式
（即値アドレス指定方式）
例）
ADD #10, R0 “10”+R0→ R0
Before
R0: 0020
After
R0: 0030
49


# Page. 50

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

4. 5 プログラムが再配置可能とは
50
◼ 再配置可能 （relocatable）
プログラムが、例えばJMPやBEQなどの分岐するメモリ上の番地を、プログラム先頭からの相対位置など
で指定しておけば、プログラムをメモリのどこに置いても正常に動作する。このようなプログラムのこと
をリロケータブルであるという。
Address
Memory
C
プログラム C
「 3③ b.ベーススアドレス」を参照のこと
5100
プログラム A
D
プログラム
load
⚫ よって、ベースレジスタにプログ
ラムの先頭アドレスを設定するこ
とで、メモリのどこのアドレスに
ロードされても実行可能となる。
A
B
HDD
補助記憶装置
Rb
5100
ベースレジスタ
プログラム B
メモリ


# Page. 51

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

51
4.6 PDP11のアドレスモードの話し
⚫ アドレスモードによる実効アドレス指定
1. Operand(s)での、srcやdstでは各々6bit使
う。 ３bitsでアドレスモードを、３bitsでR0
～R7を指定する
2. 右図の例では、”mmm”→”001”は間接アド
レスモードとなる。すなわち、R0の内容が実
効アドレスとなる
3. なにが便利か？ 例えば、”ADD R1 R0“では
加える数を事前にR0とR1に主記憶から持っ
てくる。そしてもう一度、演算結果を主記憶
に書出すことが必要となる
4. 間接アドレスモードでは、レジスタの内容が
実効アドレスとなるため、主記憶上の番地の
内容を一命令で直接操作できる
ADD
命令レジスタIR
R1
0110 001001 000001
dst
src
src、dstの
形式
m m m
r
r
r
モード指定 レジスタ指定
mmm
000
主なモードの意味
general register addressing
レジスタの内容そのもの
001
indirect adressing
レジスタの内容が番地
110
私がPDP-11を使い始めたころ、アセンブラ言語が利用言語でし
た。そのアドレッシングモードの豊富に感銘を受けた覚えがあ
ります。これを使いこなすと驚くほどプログラムを簡単に記述
できました。今回はその一つ間接アドレスについて説明しまし
た。各種アドレッシング方式は、現在のCPUでも基本は変わら
ず存在します。
@R0
index addressing
レジスタの内容を番地に加える
PDP-11は特別なベースレジスタを持たない。
このためPCを使った、③ d.相対アドレス
(relative addressing)を多く用いる


# Page. 52

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

PDP11のアドレスモード（間接アドレシング例）
@R0（R0が示す番地の内容）＋R1 → R1
ADD
@R0, R1
0110 001000 000001
opcode
① R0に操作対象のメモリ番地を入れておく
② CPUはR0が示すアドレスを読込み加算を行う
➢
間接アドレスモード
3② レジスタ間接アドレス (register indirect addressing)
@R0＋R1 → R1
③ 間接アドレスを用いて広範囲なメモリ番地に
アクセスできる
Before
レジスタ
After
レジスタ内容
R0
1020
R1
0004
レジスタ レジスタ内容
間接アドレ
シング
R0
1020
R1
0204
Address
Memory
Address
Memory
1020
0200
1020
0200
16bit=2byte
52


# Page. 53

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

53
PDP11のアドレスモード（immediate例)
a. レジスタは auto increment mode
ADD
#10, R0
10＋R0 → R0
0110 010111 000000
opcode
a
①
②
③
④
⑤
b
３③ d.相対アドレス (relative addressing)
➢
fetch後に
b. R7(PC)をアドレス修飾に使う
注）byteアドレスのため
PCが示す1020番地の命令を読込む(fetch)
するとauto increment mode により、PC+2→PC
PCが示す1022番地の値を読込む(fetch)
するとauto increment mode により、PC+2→PC
読込んだ即値(10) の加算を実行する、10＋R0 → R0
Before
After
レジスタ レジスタ内容
R0
R7(PC)
②
レジスタ レジスタ内容
20
R0
Address
Memory
1020
0110010111000000
1022
10
･･･
レジスタ＋２注とする
ADD #10,R0
④
R7(PC)
30
Address
Memory
1020
0110010111000000
1022
10
1024
2byte
ADD #10,R0


# Page. 54

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

つづく
54


# Page. 55

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

メカトロニクス：アナログとディジタル
現実の世界
計算機の世界
アナログ量 (連続量)
デジタル量
（離散量）
（電圧、電
流）
物体
位置姿勢
距離
位置、速度、
加速度、力
関節
角度
力
ハンド
位置、速度
把持力
制御量
モータ制御用
電圧電流
今回の
大テーマ
デジタル制御
digital control
測定量
Hand
55
ADC
Program
development
0 0 0 1 1 1 1 ..... 1 1
0 1 1 0 1 1 0
0 1
Filtering、
modeling、
learning
DAC
Program
execution
Robot Arm
サンプル値
量子化データ
11
10
アナログ量
0 0 0 1 1 1 1 1 0 0 1 0 1 1 1 1
0 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0
01
00
time
アナログ信号
連続信号
0 0
0 1
・・・・
1 1
1 0
量子化（2bit例）
時間的に離散化
time
デジタル量
デジタル信号（2bit例）
21
20


