プロセッサ

プロセッサ
コンピュータ基礎 (7)
菊池浩明
1. 基本機能
n  構成要素
q 入力部
q 記憶部
q 演算部
q ______
»  いわゆるプロセッサ,CPU
q 出力部
2. 構成回路
n 
命令実行部
q PC: プログラムカウンタ
q IR: 命令_________ (Instruction Register)
q REG: レジスタ群
n 
演算実行部
q ALU: 算術演算回路 (Arithmetic and Logic Unit)
q AC: アキュムレータ (Accumulator)
q マイクロプログラム制御
3. コンピューターアーキテクチャー
n  Architecture
q 建築術,建物,構造
q ネットワークアーキテクチャー
q CPUアーキテクチャー
»  命令セット,メモリアーキテクチャ,バッファメモリ
»  仮想記憶
4. 命令(
種類
データ転送
)
例 (CASL)
内容
主記憶とレジスタ間デー LD, LAD,
タ転送
ST
算術演算,
論理演算,
比較演算
ADDA, SUBA,
AND, OR, XOR, SLA,SRA,
CPA
制御,分岐命令 プログラムの制御
JPL, JMI, JZE, JNZ, JUMP,
PUSH, POP
CALL, RET
入出力命令
周辺装置との入出力
IN, OUT
特殊命令
割り込み
SVC
CASL Ⅱ
n  COMET
Ⅱ
q 基本情報技術者試験用仮想機械
q 最低限の機能を持つ簡素なアーキテクチャー
q 16-bit (ワード)汎用レジスタ: GR0,..,GR7
q 主記憶 65,536ワード (128MB)
q 16-bit プログラムレジスタ: PR (PC)
n  CASL
Ⅱ
q COMET用仮想アセンブラ
http://www.officedaytime.com/dcaslj/
CASLシュミレーター
ソースコードをペースト
実行,
ステップ
実行
汎用レジ
スタ
メモリの中
身(アドレ
ス指定)
主記憶とレジスタ
GR0 レジスタ
2 + 3 = 5
______
メモリから
呼出し
Store
メモリへ格納
主記憶
アドレス
値
100
2
101
3
102
5
103
0
アセンブラと機械語
n 
アセンブラ(CASL)
ニモニック(命令)
n 
機械語(COMET)
オペランド
_________
PGM START BEGIN 0000
BEGIN LD GR0,A 0002
LAD GR1,A 0004
LD GR2,0,GR1 0006
LAD GR3,0,GR1 0008
記号アドレス RET 0009
A
DC #27 B
DC #1D 逆アセンブル 000A
000B
C
DS 1 アセンブラ命令
END "バイナリ"
1000 0009
1210 0009
1021 0000
1231 0000
8100
0027
001D
0000
転送命令
n  レジスタ間転送
LD
レジスタ1, レジスタ2
q 例) LD GR0, GR1
GR0の内容をGR1にコピー GR1 = GR0
q GR0,..,7が利用可能
直接レジスタ設定
n  Load
ADdress命令
LAD レジスタr, アドレスa
q アドレスa(値)をレジスタrに設定する
q 例1) LAD R0,100
q 例2) LAD R1, A
q 例3) LAD R2, R0
R0=100
R1=
R2= 直接アドレスからロード命令
n  Load命令
LD
レジスタr, アドレスa
q アドレスaで指定されたメモリの値をレジスタr
にロードする.
q 例)
LD R0,09
;R0=27
LD R1,B
;R1=
LDA R2,C
;R2=
記号
アドレス
値
A
0009
0027
B
000A
001D
C
000B
0000
インデックス(
**
)レジスタ参照
n  アドレス修飾ロード
LD
レジスタr, アドレスa,インデックスレジスタx
q アドレスa+インデックスレジスタxで指定される
メモリの値をrにロードする.
記号 アドレス 値
q 例) R1=1,R2=2の時
A
0009
0027
LD R0, A, R1 ; R0=1D
B
000A
001D
LD R3, A, R2 ; R3=
C
000B
0000
LD R4, B, R1 ; R4=
q 注: R0はインデックスレジスタに利用できない
格納命令
n  メモリへの格納(Store)
ST
レジスタr, アドレスa [,x]
q レジスタrの内容をアドレスaで指定されたメモ
リに格納する.
q 例)R0=2, R1=0009, R2=1の時
記号 アドレス
ST R0, A
; 9番地を2に
A
0009
ST R2, A, R2
B
000A
C
000B
ST R1, A, R0
q アドレス修飾は全ての命令で利用可能
値
2
算術命令
n  加算
(Add Arithmetic),減算(
)
ADDA レジスタr1, レジスタr2 SUBA レジスタr1, レジスタr2 ADDA レジスタr, アドレスa [,x] SUBA レジスタr, アドレスa [,x]
q レジスタ間の加算(減算)r1 = r1+r2,
レジスタとメモリの間の加算 r1 = r1 + *(a+x)
q 実行するとr1の中身は変更される.
q 例) ADDA R0, A, ; R0=R0+29
フラグ
n  演算結果によってセットされる.条件分岐
の条件として利用.
q SF (
Flag): 負の時1, それ以外0
q ZF (Zero Flag): ゼロの時1, それ以外0
q OF (Overflow Flag): 演算結果が[-32768,
32767]に収まらない時1, それ以外0.
q 例) 3-8
SF=1, ZF=0, OF=0
5-5
SF=0, ZF=1, OF=0
q ADDAなどの算術命令だけでなく,LDなどでも
セットされる.
条件分岐命令
n  比較命令
ComPare Arithmatic
CPA レジスタr, アドレスa [,x] q r – *(a+x)を実行して,フラグをセットする.
n  条件分岐
JUMP アドレスa [,x] JPL アドレスa [,x] JMI アドレスa [,x] JZE アドレスa [,x] q Jump(無条件), 正(
), 負(Minus), 零(Zero)
の時にアドレスにジャンプする.
例) 総和を求める
0000 PGM START BEGIN 000F COUNT DC 3 0000 BEGIN LAD GR0,0 0010 A DC 3 0002 LAD GR1,0 0011 DC 6 0004 LOOP ADDA GR0,A,GR1 0012 DC 8 0006 ADDA GR1,ONE 0013 B DS 1 0008 CPA GR1,COUNT 0014 ONE DC 1 000A JMI LOOP END 000C ST GR0,B 000E RET 例) 総和を求める
0000 PGM START BEGIN (Java)
0000 BEGIN LAD GR0,0 GR0=0;
0002 LAD GR1,0 for(GR1=0;
0004 LOOP ADDA GR0,A,GR1 GR1 – Count <0;
0006 ADDA GR1,ONE ++GR1){
0008 CPA GR1,COUNT GR0 = GR0 +A[GR1];
000A JMI LOOP 000C ST GR0,B }
000E RET B[0] = GR0;
問1
n  次のプログラムを実行した時の,レジスタ
GR0の値とメモリの変化を示せ. 0000 PRG START BEGIN 0000 BEGIN LD GR0,A 0002 CPA GR0,B 0004 JPL L1 0006 LD GR0,B 0008 L1 ST GR0,C 000A RET 000B A DC #25 000C B DC #22 000D C DS 1 END 問2
n  N個の最小値を求める次のプログラムを完
成させよ.
PRG START BEGIN BEGIN LAD GR1,A LAD GR2,0 LD
GR0,A LOOP CPA GR0,0,GR1 ア . NEXT LD
GR0,0,GR1 NEXT LAD GR1,1,GR1
LAD イ . CPA
JMI
ST
RET A DC
DC
DC
ウ . LOOP GR0,MIN #13 #32 #8 宿題
n  4章
q 問1
q 問2
q 問6
q 問7
まとめ
プロセッサーは,主記憶と( )間でデー
タ転送を行う.算術演算は( )で実行
される.
n  CASLは仮想機械COMETの( )であ
る.命令コードを( )といい,アドレスやレ
ジスタなどの引数を( )という.
n  メモリの位置を示すには( ),( )に
よるアドレス( )などの方法がある.
n