Transcript パート03

コンピュータアーキテクチャ 第

3

1

オブジェクトプログラムの略記

ソースプログラム ラベル ニモニック オペランド PLUS START LD GR5,DATA1 ADDA GR5,DATA2 ST GR5,RESULT RET DATA1 DC 20 DATA2 DC 12 RESULT DS 1 END オブジェクトプログラム アドレス:機械語:第2語 ↓ ↓ ↓ #1000: #1050 #1007 #1002: #2050 #1008 #1004: #1150 #1009 #1006: #8100 #1007: #0014 #1008: #000C #1009: #0000 ソースプログラムとオブジェクトプログラムを対比し易くするため, 2ワード命令の第2語を第1語のあとに付けアドレスを省略

比較演算命令

• • レジスタ間命令 メモリ・レジスタ間命令 の両方あり CPA GR2, #1000 ・・・ (ComPare Arithmetic) CPL GR2, #1000 ・・・ (ComPare Logical) 第1オペランドの値と 第2オペランドの値を 比較

*

第1 第1

<

第2 なら

=

第2 なら

SF

ZF

1 1

比較演算命令 実行時は 常に

OF

0 #000A < #0014

3

分岐命令

*

 フラグレジスタ

FR

の値によってプログラムレジスタ へ実効アドレスをわたす

PR

正分岐 負分岐 非零分岐 零分岐 JPL adr[,X] ・・・ (Jump on PLus) JMI adr[,X] ・・・ (Jump on MInus) JNZ adr[,X] ・・・ (Jump on Non Zero) JZE adr[,X] ・・・ (Jump on ZEro) オーバフロー分岐 JOV adr[,X] ・・・ (Jump on OVerflow) 無条件分岐 JUMP adr[,X] ・・・ (Unconditional JUMP)  分岐命令によってフラグレジスタは変化しない 4

分岐条件

(

フラグレジスタ

)

JPL JMI JNZ JZE JOV OF 1 SF ZF 0 & 0 1 0 1

5

1

から

10

の整数の総和を計算し

GR0

へ格納する

6

CASL Ⅱ

のエミュレーションソフト

 – CaslBuilder ・・・ フリーウェア  Windows7, xp 等で動作 http://www.vector.co.jp/soft/win95/prog/se059919.html

–  Mac OS でもインストール可能 http://mikuinstaller.sourceforge.jp/  – – CASL2000 ・・・ フリーウェア Windows98, 2000, xp 等のうえで CASLⅡ の動作環境をエミュレーション http://www5a.biglobe.ne.jp/~teamcasl/ 等で入手可能  – – CASL Ⅱ シミュレータ ・・・ フリーウェア 情報処理技術者試験センター提供 Windows7 未対応 7

JIS 情報交換用符号 (JIS X 0201)

例:

X 0201

では

*

&’ = # 2 6

3’ = # 3 3

A’ = # 4 1 ↑↑

列行

1

ワードの中では

*

&’ = # 0 0 2 6

3’ = # 0 0 3 3

A’ = # 0 0 4 1

8

二つの数字を二つの数値に変換して それらの積を求める.

9

単語の中の特定文字数を数える

= #0063 = #006F = #006D = #0070 = #0075 = #0074 = #0065 = #0072

10

文字データの入出力

 マクロ命令 IN, OUT を使用  パラメータ – – 入力文字長領域: 入力文字数 * を格納 – – 出力領域: 1 レコードの出力データ格納領域 出力文字長領域: 出力文字数 * を格納  命令書式 IN 入力領域,入力文字長領域 OUT 出力領域,出力文字長領域 11

大文字と小文字の変換

標準入出力装置から 英字をひとつ読み, 大文字は小文字に, 小文字は大文字に 変換する 12

論理積・論理和・排他的論理和命令

AND GR2, #1000 ・・・ (AND) OR GR2, #1000 ・・・ (OR) XOR GR2, #1000 ・・・ (eXclusive OR) * • レジスタ間命令 • メモリ・レジスタ間命令 の両方あり AND, OR, XOR 命令 では OF は常に 0 13

演習問題

3.1

テキストの<プログラム 2>開始から終了までに, よび GR1 の値がどのように変化するか順番に示せ.ただし, どちらかのレジスタが変化するごとにその直後の値を 数で示すこと. GR0 16 お 進 14

演習問題

3.2

テキスト p59 の演習問題 ぞれの機能を説明せよ. (8), (9), (10) のプログラムそれ 15

演習問題

3.3

名前 A でラベル付けされたメモリ領域の値から,名前 B で ラベル付けされたメモリ領域の値をひいた値の絶対値を, 名前 C でラベル付けされたメモリ領域に格納するプログラ ムを書きなさい.ただし,領域 A, B には適当な数値を入れ ておくこと. 16

演習問題

3.4

標準入出力装置から 4 個の数字を読み込み, 4 桁の 10 進 数とみなして汎用レジスタ GR2 へ格納するプログラムを示せ. ただし,数字の読み込みには,マクロ命

IN

を使うこと. 17

演習問題

3.5

テキストの<プログラム 3 >をアセンブルせよ. 18

演習問題

3.6

テキストの<プログラム 4 >をアセンブルせよ. 19

シフト演算命令

 算術シフト演算命令 (算術シフト命令) * 算術左シフト演算命令 算術右シフト演算命令  論理シフト演算命令 (論理シフト命令) * 論理左シフト演算命令 論理右シフト演算命令

算術左シフト演算命令

SLA GR0, 3 ・・・ (Shift Left Arithmetic) 実効アドレス値 * だけ,レジスタの内容を 左へシフト     最上位の 符号ビット * はシフトしない レジスタの左側から送り出されたビットの値は 消失 * する OF にはレジスタから 最後に * 送り出されたビットの値を入れる レジスタの右側の空いたビット位置には 0 * を入れる

SLA

による

2

のべき乗倍

SLA GR1, 2 ・・・ (GR1) = 5 レジスタ GR1 の値 (5) 10 * を 4 倍(2 の 2 乗倍)して (20) 10 * とする

2 進数で値 4 を 5 倍する方法 4 * 5 = 4 * (4 + 1) = 4 * (2 2 + 2 0 ) = 4 * 2 2 + 4 * 2 0 4 = #0004 = (0000 0000 0000 0100) 2 4 * 2 2 = (0000 0000 0001 0000) 2 ← 4 を 2 ビット左シフト * 4 * 2 2 + 4 * 2 0 = (0000 0000 0001 0000) 2 + (0000 0000 0000 0100) 2 = (0000 0000 0001 0100) 2 ← 4 の シフトなし を加算 *

A の値を 5 倍して B へ格納するプログラム ← GR1 の値を ← GR1 に A の 2 2 2 0 倍 * 倍を加算 *

正整数

A, B

の積を計算する方法

A = a 14 * 2 14 + a 13 * 2 13 + ・・・ + a 2 * 2 2 + a 1 * 2 1 + a 0 * 2 0 B = b 14 * 2 14 + b 13 * 2 13 + ・・・ + b 2 * 2 2 + b 1 * 2 1 + b 0 * 2 0 ← 16 ビット符号つき 2 進数 * A * B = A * (b 14 * 2 14 + b 13 * 2 13 + ・・・ + b 2 * 2 2 + b 1 * 2 1 + b 0 * 2 0 ) = b 14 * A * 2 14 + b 13 + ・・・ * A * 2 + b 2 13 * A * 2 2 + b 1 * A * 2 1 + b 0 * A * 2 0 = b 14 + b 13 + b + b + b 2 1 0 * A の * A の ・ ・ ・ 14 13 ビット左シフト ビット左シフト * A の * A の 2 1 ビット左シフト ビット左シフト * A の シフトなし

A の値を B 倍する プログラム ← GR1 をカウンタとして初期化 ← 結果を累積保存 ← GR5 の第 0 ビットだけを 1 * ← B の第 i ビットを抽出 * ← 終了判定 (GR1 = 15 ?) ← GR5 を 1 ビット左シフト ← GR6 を 2 倍 *

演習問題

3.7

前出の < プログラム 7 > の開始から終了までに GR7 の値がどのように変化するか順番に示せ.