コンピュータアーキテクチャ 第3回 1 オブジェクトプログラムの略記 ソースプログラム ラベル ニモニック PLUS START LD ADDA ST RET DATA1 DC DATA2 DC RESULT DS END オペランド GR5,DATA1 GR5,DATA2 GR5,RESULT 20 12 1 オブジェクトプログラム アドレス:機械語:第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オペランドの値を 比較 * 比較演算命令 実行時は 常に OF は 0 #000A < #0014 3 分岐命令 * 正分岐 負分岐 非零分岐 零分岐 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 分岐条件(フラグレジスタ) OF JPL JMI JNZ JZE JOV SF ZF 0 & 0 1 0 1 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) 例: * ‘&’ = ‘3’ = ‘A’ = # 2 6 # 3 3 # 4 1 ↑↑ 列行 * ‘&’ = ‘3’ = ‘A’ = # 0 0 2 6 # 0 0 3 3 # 0 0 4 1 8 二つの数字を二つの数値に変換して それらの積を求める. 9 単語の中の特定文字数を数える = = = = = = = = #0063 #006F #006D #0070 #0075 #0074 #0065 #0072 10 文字データの入出力 マクロ命令 IN, OUT を使用 パラメータ * – 入力領域: 1 レコード = – 入力文字長領域: – 出力領域: 1 レコードの出力データ格納領域 – 出力文字長領域: * * の入力データ格納領域 を格納 を格納 命令書式 IN 入力領域,入力文字長領域 OUT 出力領域,出力文字長領域 11 大文字と小文字の変換 標準入出力装置から 英字をひとつ読み, 大文字は小文字に, 小文字は大文字に 変換する 12 論理積・論理和・排他的論理和命令 AND GR2, #1000 ・・・ (AND) OR GR2, #1000 ・・・ (OR) * • レジスタ間命令 • メモリ・レジスタ間命令 の両方あり AND, OR, XOR 命令 では OF は常に 0 13 演習問題 3.1 テキストの<プログラム 2>開始から終了までに,GR0 お よび GR1 の値がどのように変化するか順番に示せ.ただし, どちらかのレジスタが変化するごとにその直後の値を16進 数で示すこと. 14 演習問題 3.2 テキスト pp.55-56 の演習問題 (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 にはレジスタから *送り出されたビットの値を入れる レジスタの右側の空いたビット位置には *を入れる SLA による 2 のべき乗倍 SLA GR1, 2 レジスタ GR1 の値 ・・・ (GR1) = 5 *を 4 倍(2 の 2 乗倍)して *とする 2 進数で値 4 を 5 倍する方法 4 * 5 = 4 * (4 + 1) = 4 * (22 + 20) = 4 * 22 + 4 * 20 4 = #0004 = (0000 0000 0000 0100)2 4 * 22 = (0000 0000 0001 0000)2 4 * 22 + 4 * 20 = = * (0000 0000 0001 0000)2 + (0000 0000 0000 0100)2 (0000 0000 0001 0100)2 * A の値を 5 倍して B へ格納するプログラム * * 正整数 A, B の積を計算する方法 A = a14 * 214 + a13 * 213 + ・・・ + a2 * 22 + a1 * 21 + a0 * 20 B = b14 * 214 + b13 * 213 + ・・・ + b2 * 22 + b1 * 21 + b0 * 20 A * B = A * (b14 * 214 + b13 * 213 + ・・・ + b2 * 22 + b1 * 21 + b0 * 20) = b14 * A * 214 + b13 * A * 213 + ・・・ + b2 * A * 22 + b1 * A * 21 + b0 * A * 20 = b14 * A の 14 ビット左シフト + b13 * A の 13 ビット左シフト ・ ・ ・ + b2 * A の 2 ビット左シフト + b1 * A の 1 ビット左シフト + b0 * A の シフトなし * A の値を B 倍する プログラム ← GR1 をカウンタとして初期化 ← 結果を累積保存 * * ← 終了判定 (GR1 = 15 ?) * ← GR6 を 2 倍 演習問題 3.7 前出の <プログラム 7 > の開始から終了までに GR7 の値がどのように変化するか順番に示せ.
© Copyright 2024 ExpyDoc