Comments
Description
Transcript
情報科学基礎講義 ノート4 情報科学基礎講義 ノート4
情報科学基礎講義 情報科学基礎講義 ノート4 ノート4 平成20年1月7日 平成20年1月7日 今瀬 今瀬 真 真 講義ノート 講義ノート pp.63-86 pp.63-86 http://www.ispl.jp/~imase/lecture/isbasic/2007 10. 10. CASL CASL IIプログラミング(ビット操作) IIプログラミング(ビット操作) 10.1 10.1 論理演算とシフト演算 論理演算とシフト演算 •• 論理演算:1語のデータは16ビットで構成される 論理演算:1語のデータは16ビットで構成される 。各 。各 ビットごとに独立した演算 ビットごとに独立した演算 –– 論理積(AND)、論理和(OR)、排他的論理和(XOR) 論理積(AND)、論理和(OR)、排他的論理和(XOR) X Y 論理積 論理和 0 0 1 1 0 1 0 1 0 0 0 1 0 1 1 1 排他的 論理和 0 1 1 0 1 AND AND GR0,GR1 GR0,GR1 (100ページ) (100ページ) •• レジスタ間の論理積 レジスタ間の論理積 内容 GR0 1000000000000001 =(8001)16 GR1 0011010100100001 =(3521)16 命令実行 GR0 0000000000000001 =(0001)16 GR1 0011010100100001 =(3521)16 FR OF SF ZF 0 0 0 OR OR GR0,GR1 GR0,GR1 (104ページ) (104ページ) •• レジスタ間の論理和 レジスタ間の論理和 内容 GR0 1000000000000001 =(8001)16 GR1 0011010100100001 =(3521)16 命令実行 GR0 1011010100100001 =(B521)16 GR1 0011010100100001 =(3521)16 FR OF SF ZF 0 1 0 2 XOR XOR GR0,GR1 GR0,GR1 (106ページ) (106ページ) •• レジスタ間の排他的論理和 レジスタ間の排他的論理和 内容 GR0 1000000000000001 =(8001)16 GR1 0011010100100001 =(3521)16 命令実行 GR0 1011010100100000 =(B520)16 GR1 0011010100100001 =(3521)16 FR OF SF ZF 0 1 0 AND AND GR0,A GR0,A (101ページ) (101ページ) •• レジスタとメモリの論理積 レジスタとメモリの論理積 内容 GR0 0011010001000100 =(3444)16 A番地 0000000011011101 =(00DD)16 命令実行 GR0 0000000001000101 =(0001)16 A番地 0000000011011101 =(00DD)16 FR OF SF ZF 0 0 0 3 OR OR GR0,A GR0,A (105ページ) (105ページ) •• レジスタとメモリの論理和 レジスタとメモリの論理和 内容 GR0 0011010001000100 =(3444)16 A番地 0000000011011101 =(00DD)16 命令実行 GR0 0011010011011101 =(34DD)16 A番地 0000000011011101 =(00DD)16 FR OF SF ZF 0 0 0 XOR XOR GR0,A GR0,A (107ページ) (107ページ) •• レジスタとメモリの排他的論理和 レジスタとメモリの排他的論理和 内容 GR0 0011010001000100 =(3444)16 A番地 0000000011011101 =(00DD)16 命令実行 GR0 0011010010011001 =(3499)16 A番地 0000000011011101 =(00DD)16 FR OF SF ZF 0 0 0 4 応用:汎用レジスタの特定ビットを取り出 応用:汎用レジスタの特定ビットを取り出 す(101ページ) す(101ページ) •• AND AND GR0,A GR0,A 内容 GR0 0011010001000100 =(3444)16 A番地 1111111100000000 =(FF00)16 命令実行 上位8ビットの取り出し GR0 0011010000000000 =(3400)16 A番地 0000000011011101 =(00DD)16 FR OF SF ZF 0 0 0 応用:汎用レジスタの偶奇の判定(102ページ) 応用:汎用レジスタの偶奇の判定(102ページ) EVEN EVEN ODD ODD AND ;(A=(0001) AND GR0,A GR0,A ;(A=(0001)1616)) JNZ JNZ ODD ODD (偶数の処理) (偶数の処理) (奇数の処理) (奇数の処理) 内容 GR0 0011010001000100 =(3444)16 A番地 0000000000000001 =(0001)16 AND GR0,A 命令実行 GR0 0000000000000000 =(3400)16 A番地 0000000011011101 =(00DD)16 FR OF SF ZF 0 0 1 5 応用:ビットの反転(107ページ) 応用:ビットの反転(107ページ) •• XOR XOR GR0,A GR0,A ;(A= ;(A= (FFFF) (FFFF)1616)) 内容 GR0 0001001000010110 =(1216)16 A番地 1111111111111111 =(FFFF)16 命令実行 上位8ビットの取り出し GR0 1110110111101001 =(EDE9)16 A番地 1111111111111111 =(00DD)16 FR OF SF ZF 0 1 0 応用:2の補数の求め方(108ページ) 応用:2の補数の求め方(108ページ) •• •• XOR XOR GR0,A GR0,A ADDA ADDA GR0,C1 GR0,C1 ;(A= ;(A= (FFFF) (FFFF)1616)) ;; (C1= (0001)1616)) (C1= (0001) GR0 0000000000000101 =(0005)16 A番地 1111111111111111 =(FFFF)16 C1番地 0000000000000001 =(0001)16 XOR GR0,A命令実行(ビットの反転) GR0 1111111111111010 ADDA GR0,C1命令実行(1加算) GR0 1111111111111011 =(FFFB)16 =(-5)10 6 応用:内容の一致のチェック(108ページ) 応用:内容の一致のチェック(108ページ) XOR XOR GR0,A GR0,A JNZ L2 JNZ L2 (一致した場合の処理) (一致した場合の処理) (一致しなかった場合の処理) (一致しなかった場合の処理) L1 L1 L2 L2 内容 GR0 0011010001000100 =(3444)16 A番地 0011010001000100 =(3444)16 XOR GR0,A 命令実行 GR0 0000000000000000 =(0000)16 A番地 0011010001000100 =(3444)16 FR OF SF ZF 0 0 1 (2) (2) シフト命令 シフト命令 •• •• •• 16ビット列を左あるいは右に指定されたビット数だけずらす. 16ビット列を左あるいは右に指定されたビット数だけずらす. 4種類のシフト演算命令 4種類のシフト演算命令 符号ビットを意識する(符号ビットだけは元のままにする)の 符号ビットを意識する(符号ビットだけは元のままにする)の が算術演算で,そうでないのが論理演算である. が算術演算で,そうでないのが論理演算である. –– 左論理シフト(SLL)、右論理シフト(SRL) 左論理シフト(SLL)、右論理シフト(SRL) –– 左算術シフト(SLA)、右算術シフト(SRA) 左算術シフト(SLA)、右算術シフト(SRA) n •• nビットの左算術シフトは、2の補数表現で2 nビットの左算術シフトは、2の補数表現で2n倍 倍 n •• nビットの右算術シフトは、2の補数表現で1/2 倍の効果がある。 nビットの右算術シフトは、2の補数表現で1/2n倍の効果がある。 •• シフト演算の結果に応じて(符号付の数とみて)フラグレジス シフト演算の結果に応じて(符号付の数とみて)フラグレジス タFRに正(000),零(001),負(010)が設定される. タFRに正(000),零(001),負(010)が設定される. 7 SLA SLA GR0,2 GR0,2 ;(110ページ) ;(110ページ) •• レジスタの内容の算術左シフト レジスタの内容の算術左シフト 内容 消失 GR0 0011000101110101 =(3175)16 命令実行 GR0 消失したビットに 1が含まれると オーバフロー 最上位ビッが 0(正)の時 0100010111010100 FR OF SF ZF 1 0 0 SLA SLA GR0,1,GR1 GR0,1,GR1 =(45D4)16 0が埋め込まれる 最上位ビットが1の時: 消失したビットに0が含まれると アンダーフロー ;(110ページ) ;(110ページ) •• レジスタの内容の算術左シフト レジスタの内容の算術左シフト GR1 0000000000000010 =(0002)16 GR0 1001101000111110 =(9A3E)16 命令実行 3bitシフト(=1+GR1) GR0 1101000111110000 =(D1F0)16 FR OF SF ZF 1 1 0 8 SRA SRA GR0,2 GR0,2 ;(113ページ) ;(113ページ) •• レジスタの内容の算術右シフト レジスタの内容の算術右シフト 内容 消失 GR0 0111101000110001 =(7A31)16 命令実行 GR0 0001111010001100 符号が埋め込まれる 最後に送り出された 値がOFに設定される SRA SRA GR0,1,GR1 GR0,1,GR1 =(1E8C)16 FR OF SF ZF 0 0 0 ;(114ページ) ;(114ページ) •• レジスタの内容の算術右シフト レジスタの内容の算術右シフト GR1 0000000000000010 =(0002)16 GR0 1010001000111000 =(A238)16 命令実行 3bitシフト(=1+GR1) GR0 1111010001000111 符号が埋め込まれる =(F447)16 FR OF SF ZF 1 1 0 9 シフト命令と乗算 シフト命令と乗算 •• •• n nビットの左算術シフトは、2の補数表現で2 nビットの左算術シフトは、2の補数表現で2n倍 倍 n nビットの右算術シフトは、2の補数表現で1/2 nビットの右算術シフトは、2の補数表現で1/2n倍の効果が 倍の効果が ある。 ある。 0000000000000110 =(6)10 1111111111111110 =(-2)10 1ビット左シフトは2倍 0000000000001100 =(12)10 1111111111111100 =(-4)10 1ビット右シフトは1/2倍 0000000000000011 =(3)10 1111111111111111 =(-1)10 2の補数の乗算(AとB=(b15,b14,b13,….b2,b1,b0)) A×B = A*b0*1+A*b1*2+A*b2*22 +…+A*b13*213 + A*b14*214 - A*b15*215 SLL SLL GR0,2 GR0,2 ;(120ページ) ;(120ページ) •• レジスタの内容の算術左シフト レジスタの内容の算術左シフト 内容 消失 GR0 0111100100110101 =(7935)16 命令実行 最後に送り出された ビットがオーバフ ローにセットされる GR0 1110010011010100 FR OF SF ZF 1 1 0 =(45D4)16 0が埋め込まれる 10 SLL SLL GR0,1,GR1 GR0,1,GR1 ;(120ページ) ;(120ページ) •• レジスタの内容の算術左シフト レジスタの内容の算術左シフト GR1 0000000000000010 =(0002)16 GR0 1000101111001111 =(8BCF)16 命令実行 3bitシフト(=1+GR1) GR0 0101111001111000 =(D1F0)16 FR OF SF ZF 1 0 0 SRL SRL GR0,2 GR0,2 ;(121ページ) ;(121ページ) •• レジスタの内容の算術右シフト レジスタの内容の算術右シフト 内容 消失 GR0 0011010110101101 =(35AD)16 命令実行 GR0 0000110101101011 0が埋め込まれる 最後に送り出された 値がOFに設定される =(1E8C)16 FR OF SF ZF 0 0 0 11 SRL SRL GR0,1,GR1 GR0,1,GR1 ;(121ページ) ;(121ページ) •• レジスタの内容の算術右シフト レジスタの内容の算術右シフト GR1 0000000000000010 =(0002)16 GR0 1011011110101100 =(B7AC)16 命令実行 3bitシフト(=1+GR1) GR0 0001011011110101 0が埋め込まれる =(16F5)16 FR OF SF ZF 1 1 0 10.2 10.2 座席予約システム 座席予約システム •• ビット操作の1つの応用として単純化した座席予約システム ビット操作の1つの応用として単純化した座席予約システム の開発を行う. の開発を行う. •• 対象となる乗り物には2人掛けを基本とした8席がある. 対象となる乗り物には2人掛けを基本とした8席がある. •• 要求があれば2人掛けの席を2つの席に分けて使用することも 要求があれば2人掛けの席を2つの席に分けて使用することも 許す. 許す. •• 座席予約システムの開発にあたって16ビットの状態ベクトル 座席予約システムの開発にあたって16ビットの状態ベクトル (RES)を導入する. (RES)を導入する. 座席 番号 座席番号 RES 0 1 0 1 2 3 2 3 4 5 4 6 7 5 6 8 10 12 14 9 11 13 15 7 8 9 10 11 12 13 14 15 0 0 1 0 0 0 1 1 0 0 1 1 0 0 0 0 0は空席、1は予約済みを示す. 12 座席予約システムの開発項目 座席予約システムの開発項目 座席予約システムの基本機能として次の4つの開発を 座席予約システムの基本機能として次の4つの開発を 目指す。 目指す。 1. 1. 空席の有無の確認:RESがすべて1かどうかの 空席の有無の確認:RESがすべて1かどうかの チェック チェック 2. 2. 2人掛けの予約:0,2,4,…,14から始まる00(または 2人掛けの予約:0,2,4,…,14から始まる00(または 11)のチェック 11)のチェック 3. 3. 予約数の確認:RES中の1の総数の計算 予約数の確認:RES中の1の総数の計算 4. 4. 座席番号の確認:2分探索木の構成 座席番号の確認:2分探索木の構成 0 座席番号 RES 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 1 0 0 0 1 1 0 0 1 1 0 0 0 0 10.3 10.3 空席の有無の確認 空席の有無の確認 •• RESのすべてのビットが1になっているか RESのすべてのビットが1になっているか PRG407 VACANT FULL RES ALLONE START LD CPL JZE … … … … RET DS DC … END GR0,RES GR0,ALLONE FULL ;空席あり ;空席なし RES=1111 1111 1111 1111 のときだけFR001(零) が設定され,FULLに分 岐する. 1 #FFFF 13 10.4 10.4 2人掛けの席の予約 2人掛けの席の予約 (1) (1) 座席0, 座席0, 1が空席かどうかのチェック 1が空席かどうかのチェック 方針:CPLとJZEの組み合わせ 方針:CPLとJZEの組み合わせ でこの機能を実現する でこの機能を実現する •• 予約状況(RES)の0と1を反 予約状況(RES)の0と1を反 転させて,1が空席を表す 転させて,1が空席を表す ようにして, ようにして, •• 上位2ビットを取り出して 上位2ビットを取り出して •• PAIR:1100 PAIR:1100 0000 0000 0000 0000 0000 0000 との間で論理比較をすれば との間で論理比較をすれば よい。 よい。 PRG408 START LD XOR AND CPL JZE NOK … … OK … … RET RES DS ALLONE DC PAIR DC … END GR0,RES GR0,ALLONE GR0,PAIR GR0,PAIR OK ;空席でない ;空席 1 #FFFF #C000 10.4 10.4 2人掛けの席の予約 2人掛けの席の予約 (1) (1) 座席0, 座席0, 1が空席かどうかのチェック 1が空席かどうかのチェック START LD XOR AND CPL JZE NOK … … OK … … RET RES DS ALLONE DC PAIR DC … END 例1 PRG408 GR0,RES GR0,ALLONE GR0,PAIR GR0,PAIR OK ;空席でない ;空席 1 #FFFF #C000 GR0←0010 0011 0011 0000 GR0←1101 1100 1100 1111 GR0←1100 0000 0000 0000 FR OF SF ZF 0 0 1 RES=0010 0011 0011 0000 14 10.4 10.4 2人掛けの席の予約 2人掛けの席の予約 (1) (1) 座席0, 座席0, 1が空席かどうかのチェック 1が空席かどうかのチェック START LD XOR AND CPL JZE NOK … … OK … … RET RES DS ALLONE DC PAIR DC … END 例2 PRG408 GR0,RES GR0,ALLONE GR0,PAIR GR0,PAIR OK ;空席でない GR0←1010 0011 0011 0000 GR0←0101 1100 1100 1111 GR0←0100 0000 0000 0000 FR OF SF ZF 0 1 0 ;空席 RES=1010 0011 0011 0000 1 #FFFF #C000 10.4 10.4 2人掛けの席の予約 2人掛けの席の予約 (1)前方の2人掛けの席の予約 (1)前方の2人掛けの席の予約 方針:2人掛けの空席を前方か 方針:2人掛けの空席を前方か ら調べていって,見つかる ら調べていって,見つかる とそこに予約を入れること とそこに予約を入れること を考える. を考える. •• 前述の座席0, 前述の座席0, 1の空きの 1の空きの チェックを利用する チェックを利用する •• そのために論理右シフト そのために論理右シフト (SRL (SRL GR1,2)を利用して8種 GR1,2)を利用して8種 類のパターンを順次生成 類のパターンを順次生成 –– –– –– –– GR1=1100 GR1=1100 0000 0000 0000 0000 0000 0000 GR1= 0011 0000 GR1= 0011 0000 0000 0000 0000 0000 ……… ……… GR1= GR1= 0000 0000 0000 0000 0000 0000 0011 0011 •• 空いていることが判明した 空いていることが判明した ら,論理和により11を設定 ら,論理和により11を設定 PRG408 LOOP NOK OK START LD XOR LD LD AND CPL JZE SRL JNZ … LD OR ST … RET … END GR0,RES GR0,ALLONE GR1,PAIR GR2,GR0 GR2,GR1 GR2,GR1 FULL GR1,2 OK ;空席なし GR0,RES;空席 GR0,GR1 GR0,RES 15 10.5 10.5 予約数の確認 予約数の確認 予約数を求めるにはRES中に含まれる1の総数を計算す 予約数を求めるにはRES中に含まれる1の総数を計算す ればよい. ればよい. (1)自然な方法 (1)自然な方法 1. 1. GR0の内容(RESの内容そのもの)を1ビットずつ右 GR0の内容(RESの内容そのもの)を1ビットずつ右 へシフトしながら, へシフトしながら, 2. 2. その時点でのGR0の右端の1ビットが1かどうか調 その時点でのGR0の右端の1ビットが1かどうか調 べる. べる. 3. 3. もし1ならGR1(1の数をカウントするレジスタ)の値 もし1ならGR1(1の数をカウントするレジスタ)の値 を1増やす. を1増やす. 10.5 10.5 予約数の確認 予約数の確認 PRG409-A START (1)別の解法 (1)別の解法 LAD GR1,0 •• A←RES A←RES LD GR0,RES •• 次の3つの演算を行うと、 LAD GR1,1,GR1 ;+1 次の3つの演算を行うと、 LOOP LD GR2,GR0 ;GR2=A Aの右端の1が一つ消える Aの右端の1が一つ消える JZE FINISH 1. 1. B←A-1 B←A-1 LAD GR2,-1,GR2;-1 2. 2. A←A・B A←A・B AND GR0,GR2 ;GR0=A・B •• この操作をAが0になるま LAD GR1,1,GR1 この操作をAが0になるま JUMP LOOP で繰り返す。 で繰り返す。 FINISH ST GR1,COUNT •• 繰り返しの回数が予約数 繰り返しの回数が予約数 … 例 A =0011 0100 0100 0000 B =0011 0100 0011 1111 A・B=0011 0100 0000 0000 RES COUNT RET DS DS … END 1 1 16 10.6 10.6 座席番号の確認 座席番号の確認 座席番号 RES 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 1 0 0 0 1 1 0 0 1 1 0 0 0 0 予約済みの座席番号の中で最大のものを出力 予約済みの座席番号の中で最大のものを出力 1. 1. そのためにはまずRESに含まれる1番右にある1を取 そのためにはまずRESに含まれる1番右にある1を取 り出す り出す 2. 2. 次に,その1の位置(ビット位置)を計算 次に,その1の位置(ビット位置)を計算 10.6 10.6 座席番号の確認 座席番号の確認 (1) (1) 1番右にある1の取り出し 1番右にある1の取り出し 座席番号 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 RES 0 0 1 0 0 0 1 1 0 0 1 1 0 0 0 前述と同様の手法がとれる。 PRG410 START 前述と同様の手法がとれる。 … •• A←RES A←RES LD •• 次の3つの演算を行うと、 次の3つの演算を行うと、 LD Aの右端の1が取り出せる。 Aの右端の1が取り出せる。 LAD 1. XOR 1. B←A-1 B←A-1 AND 2. 2. B←NOT(B) B←NOT(B) ST 3. 3. Z←A・B Z←A・B … 例 A =0011 B =0011 Not(B)=1100 A・B=0000 0100 0100 1011 0000 0100 0011 1100 0100 0000 1111 0000 0000 ALLONE RES Z RET DC DS DS … END 0 GR2,RES GR0,GR2 GR0,-1,GR0;-1 GR0,ALLONE GR0,GR2 GR0,Z #FFFF 1 1 17 10.6 10.6 座席番号の確認 座席番号の確認 (1) (1) ビット位置の計算 ビット位置の計算 座席番号 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 S(SINGLE) 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 L=0 S・P8 零でない P8=0000 P8=0000 0000 0000 1111 1111 1111 1111 P4=0000 1111 0000 1111 P4=0000 1111 0000 1111 P2=0011 P2=0011 0011 0011 0011 0011 0011 0011 P1=0101 0101 0101 0101 P1=0101 0101 0101 0101 を利用する。 例: を利用する。 例:0000 0000 0000 0000 0100 0100 0000 0000 S・P8が零でないと8加算 零でない S・P8が零でないと8加算 零でない S・P8が零でないと4加算 S・P8が零でないと4加算 零 零 S・P8が零でないと2加算 零 S・P8が零でないと2加算 零 S・P8が零でないと1加算 S・P8が零でないと1加算 零でない 零でない L=L+8 零 S・P4 L=L+4 零 S・P2 L=L+2 零 S・P1 L=L+1 11. 11. CASLプログラミング(3つの応用) CASLプログラミング(3つの応用) ここまでの授業ではCASLⅡでコードを書く技術(プログラミング)を学 ここまでの授業ではCASLⅡでコードを書く技術(プログラミング)を学 んだ。 んだ。 しかし、これだけの技術ではソフトウェア製品を作ることはできない。 しかし、これだけの技術ではソフトウェア製品を作ることはできない。 ソフトウェア製品を作る場合は、次の6つの工程が必要 ソフトウェア製品を作る場合は、次の6つの工程が必要 1.1. 基本設計: 基本設計:製品構想を骨子とした基本戦略(製品の目的、対象ユーザ、使 製品構想を骨子とした基本戦略(製品の目的、対象ユーザ、使 用環境、開発言語、開発環境、開発日程など) 用環境、開発言語、開発環境、開発日程など) 2.2. 機能設計: 機能設計:外部インタフェース(入力と出力の関係、入出力の形式など) 外部インタフェース(入力と出力の関係、入出力の形式など) 3.3. 詳細設計: 詳細設計:製品の設計図にあたるものを作成(モジュール(サブリーチン構 製品の設計図にあたるものを作成(モジュール(サブリーチン構 成)、構成データの形式、データを操作するやりかた(アルゴリズム)など) 成)、構成データの形式、データを操作するやりかた(アルゴリズム)など) 4.4. プログラミング: プログラミング:コードを記述 コードを記述 5.5. テスト仕様書: テスト仕様書:製品が当初の目的どおり実現されたかの確認のための 製品が当初の目的どおり実現されたかの確認のための チェック項目の作成 チェック項目の作成 6.6. テスト: テスト:テスト仕様書に従ったテスト(机上テスト、モジュール単体テスト、モ テスト仕様書に従ったテスト(机上テスト、モジュール単体テスト、モ ジュール結合テスト、システムテスト) ジュール結合テスト、システムテスト) 11.1節で、具体例をもとに詳細設計について(初歩的な)理解をする。 11.1節で、具体例をもとに詳細設計について(初歩的な)理解をする。 18 11.1 11.1 コード変換と表の検索 コード変換と表の検索 •• 機能仕様:CASLⅡの前進であるCASLのアセンブラの 機能仕様:CASLⅡの前進であるCASLのアセンブラの 命令部分を機械語に変換する。(表10.1参照) 命令部分を機械語に変換する。(表10.1参照) LD CASL命令 #4C44 計算機内部表現 #10 機械語命令 命令の最初の空白までの文字列(2文字~4文字)を表10.1に 従って機械語命令の最初の8ビットに変換 詳細設計の第一ステップ 詳細設計の第一ステップ •• 概略のモジュール構成の設計と入出力の規定 概略のモジュール構成の設計と入出力の規定 スタート LD(CASL命令) #4C44 (計算機内部表 現) 変換 #10(機械語命令) 終了 入力: •1語に1文字ずつ格納で、JISX201コード(8 ビット)で下位バイトに収納で、英大文字のみ •4語の領域で、入力の文字数は2~4 •4文字に満たない場合は空白がスペース記号 のコードが挿入 •INPUT DS 4 変換: •内部表現とコードの対応関係のテーブルを作 成し、INPUTが内部表現と一致するエントリー のコードを出力 出力: •1語の下位8ビット •CODE DS 1 19 詳細設計の第一ステップ 詳細設計の第一ステップ アセンブラ全体でのモジュール構成の例 アセンブラ全体でのモジュール構成の例 スタート 入力:……. ラベル 文字列の入力 ラベルの番地の計算とコード生成 構文解析 命令 1行の認識と1行内のラベル、命令、 パラメータ、コメントの抽出 命令コードの計算 パラメータ パラメータコードの計算 機械語の生成 コメント 出力 終了 出力1(機械語):……. 出力2(プログラム表): ……. 詳細設計の第二ステップ(1) 詳細設計の第二ステップ(1) •• データの構造の設計 データの構造の設計←ある程度やり方(アルゴリズム)を考えながら設計 ←ある程度やり方(アルゴリズム)を考えながら設計 問題点:テーブルを内部表現そのままとすると1命令の内部表現とす 問題点:テーブルを内部表現そのままとすると1命令の内部表現とす るとすくなくとも8ビット×4=32ビット(2語)必要となる るとすくなくとも8ビット×4=32ビット(2語)必要となる –– CASL命令を区別するだけなら最初の3文字でよい CASL命令を区別するだけなら最初の3文字でよい –– 各文字は8ビットだが、その内最初の4ビットは0100(#4)か 各文字は8ビットだが、その内最初の4ビットは0100(#4)か 0101(#5)だから5ビットで表現可能(スペースは00100000だから 0101(#5)だから5ビットで表現可能(スペースは00100000だから 下位5ビットは@と同じで英大文字と重ならない) 下位5ビットは@と同じで英大文字と重ならない) →5ビット×3文字で表現可能よりテーブルを内部表現短縮計をもち →5ビット×3文字で表現可能よりテーブルを内部表現短縮計をもち いて1語で表現する。 いて1語で表現する。 CASL 命令 LD ST …… CALL RET 内部 表現 #4C44 #5354 …… #43414C4C #524554 機械語 表現 10 11 …… 80 81 CASL 命令 LD ST …… CALL RET 内部表現 短縮形 01100 00100 00000 0 10011 10100 00000 0 …… 00011 00001 01100 0 10010 00101 00100 0 機械語 表現 10 11 …… 80 81 20 詳細設計の第二ステップ(2) 詳細設計の第二ステップ(2) データの構造の設計(全ての変数は定義できない。後の工程で順次追加) データの構造の設計(全ての変数は定義できない。後の工程で順次追加) ;入力 ;入力 INPUT INPUT DS DS44 ;INPUT(i)[15-8]=0, ;INPUT(i)[15-8]=0, ;INPUT(i)[7-0]はJISX201コード ;INPUT(i)[7-0]はJISX201コード ;4文字に満たない場合はスペース記号のコードが挿入 ;4文字に満たない場合はスペース記号のコードが挿入 ;出力 ;出力 CODE CODE DS DS11 ;CODE[15-8]=0, ;CODE[15-8]=0,CODE[7-0]=機械語表現 CODE[7-0]=機械語表現 ;検索テーブル ;検索テーブル CASL CASL DS DS23 23 ;内部表現短縮形を格納 ;内部表現短縮形を格納 ;CASL(i)[15-11]=内部表現(i,1)[4-0] ;CASL(i)[15-11]=内部表現(i,1)[4-0] ;CASL(i)[10-6]=内部表現(i,2)[4-0] ;CASL(i)[10-6]=内部表現(i,2)[4-0] ;CASL(i)[5-1]=内部表現(i,3)[4-0] ;CASL(i)[5-1]=内部表現(i,3)[4-0] COMET COMETDS DS23 23 ;機械語命令コードを格納 ;機械語命令コードを格納 ;COMET(i)[15-8]=#00, ;COMET(i)[15-8]=#00,COMET(i)[7-0]=機械語命令コード COMET(i)[7-0]=機械語命令コード TSIZE DC 23 ;テーブルサイズ TSIZE DC 23 ;テーブルサイズ 詳細設計の第三ステップ 詳細設計の第三ステップ スタート •• アルゴリズムの設計 アルゴリズムの設計 スタート GR0[15-11]←INPUT(0)[5-0] GR0[10-6]←INPUT(1)[5-0] GR0[5-1]←INPUT(2)[5-0] GR0[1]← 0 INPUTから 短縮形を作成 GR1←0 COMETテーブルから コードを取出しCODEに 代入 終了 順次詳細化 CASLテーブルの 検索 GR0=CASL(GR1) YES ? NO GR1←GR1+1 GR1>=TSIZE ? NO YES CODE←COMET(GR1) エラー処理 終了 21 11.2 11.2 ソーティング ソーティング T(0) T(1) T(2) T(3) T(4) T(5) T(6) T(7) ソーティング •• アルゴリズムの設計:アルゴリズ アルゴリズムの設計:アルゴリズ ム(処理手順)はプログラムの性 ム(処理手順)はプログラムの性 能を大きく左右する。処理される 能を大きく左右する。処理される データ量や要求される速度を考 データ量や要求される速度を考 えて慎重に選択すべきである。 えて慎重に選択すべきである。 •• 本節では、ソーティング問題の3 本節では、ソーティング問題の3 つのアルゴリズムを紹介して、ア つのアルゴリズムを紹介して、ア ルゴリズムとは何かを理解する。 ルゴリズムとは何かを理解する。 •• ソーティングとは:与えられたデー ソーティングとは:与えられたデー タを小さいものから順に(昇順)あ タを小さいものから順に(昇順)あ るいは大きいものから順(降順) るいは大きいものから順(降順) に並べ替えること。 に並べ替えること。 15 10 13 40 35 39 27 45 10 13 15 27 35 39 40 45 データの検索に O(n) O(log n) 全て検索 二分検索法 11.2 11.2 ソーティング ソーティング •• 二分探索法:ソーティングされたデータ配列(T(0)~T(7))に指定 二分探索法:ソーティングされたデータ配列(T(0)~T(7))に指定 した値Nがあるかないかを検索する。存在する範囲は1/2ずつ した値Nがあるかないかを検索する。存在する範囲は1/2ずつ 絞り込んでいく。O(log 絞り込んでいく。O(log X)の計算量(Xは配列のエントリー数) X)の計算量(Xは配列のエントリー数) N<T(4) ? YES T(0)~T(3) NO T(4)~T(7) N<T(2) ? YES T(0)~T(1) N=T(1) ? N=T(0) N=T(1) N<T(4) ? NO T(2)~T(3) N=T(3) ? N=T(2) N=T(3) YES T(4)~T(5) N=T(5) ? N=T(4) N=T(5) NO T(6)~T(7) N=T(7) ? N=T(6) N=T(7) 22 (1) (1) 選択ソート 選択ソート 選択ソートの基本戦略 選択ソートの基本戦略 •• 配列T(0~n)の中から一番小さいものを見つけT(0) 配列T(0~n)の中から一番小さいものを見つけT(0) におき、 におき、 •• 次にT(1~n)の中で一番小さいものを見つけT(2)におく。 次にT(1~n)の中で一番小さいものを見つけT(2)におく。 •• これをn-1回繰り返す。 これをn-1回繰り返す。 15 10 13 40 35 39 27 45 1 10 15 13 40 35 39 27 45 2 10 13 15 40 35 39 27 45 3 10 13 15 40 35 39 27 45 4 10 13 15 27 35 40 39 45 5 10 13 15 27 35 40 39 45 6 10 13 15 27 35 39 40 45 7 10 13 15 27 35 39 40 45 (1) (1) 選択ソート 選択ソート i回目開始 選択ソートの詳細アルゴリズム 選択ソートの詳細アルゴリズム •• n-1回の繰り返しのi回目の処理手順 n-1回の繰り返しのi回目の処理手順 の設計をして、n-1回ループを回せ の設計をして、n-1回ループを回せ ばよい。 ばよい。 •• i回目の処理を考える(iは1からn-1 i回目の処理を考える(iは1からn-1 まで)。 まで)。 MIN←T(i-1) j←i MIN>T(j) ? i=4回目の動作例 j=4 10 13 MIN 15 =40 40 35 39 27 45 j=4 10 13 MIN 15 =35 40 40 39 27 45 NO j=4 10 13 MIN 15 =35 40 40 39 27 j=4 10 13 MIN 15 =27 40 40 39 35 45 45 10 13 15 27 40 39 35 45 YES MINとT(j) を入れ替える j←j+1 NO j>=n ? YES T(i-1)←MIN i回目終了 23 (1) (1) 挿入ソート 挿入ソート 挿入ソートの基本戦略 挿入ソートの基本戦略 •• i回目のループの開始時にT(0~i-1)までのデータ(i個のデータ)は i回目のループの開始時にT(0~i-1)までのデータ(i個のデータ)は ソートされていることは同様 ソートされていることは同様 •• i回目のループでは、T(0~i-1)の適当な位置にT(i)を挿入してT(0 i回目のループでは、T(0~i-1)の適当な位置にT(i)を挿入してT(0 ~i)までソートされているようにする。 ~i)までソートされているようにする。 •• このループをn-1回繰り返す。 このループをn-1回繰り返す。 15 10 13 40 35 39 27 45 1 10 15 13 40 35 39 27 45 2 10 13 15 40 35 39 27 45 3 10 13 15 40 35 39 27 45 4 10 13 15 35 40 39 27 45 10 13 15 35 39 40 27 45 5 6 10 13 15 27 35 39 40 45 7 10 13 15 27 35 39 40 45 (1) (1) 挿入ソート 挿入ソート i回目開始 選択ソートの詳細アルゴリズム 選択ソートの詳細アルゴリズム INS←T(i) j←i-1 •• n-1回の繰り返しのi回目の処理手順 n-1回の繰り返しのi回目の処理手順 の設計をして、n-1回ループを回せ の設計をして、n-1回ループを回せ ばよい。 ばよい。 •• i回目の処理を考える。 i回目の処理を考える。 i=4回目の動作例 10 13 15 10 13 40 40 40 j=2 39 27 INS 45 =35 35 j=3 39 27 INS 45 =35 15 10 13 15 35 40 39 27 45 問題:比較 回数が最 大となる配 列のデータ を作れ (データ数 は8) INS<T(j) ? NO YES T(j+1)←T(j) j←j-1 NO YES j<0 ? ループを途中で抜け出せるので選択ソートよりは高速である。 最悪の場合は、(n-1)(n-2)/2回の比較が必要である。 T(j+1)←INS i回目終了 24 (1) (1) バブルソート バブルソート バブルソートの基本戦略 バブルソートの基本戦略 •• 隣同士のデータ(T(i)とT(i+1))を比較してT(i)のほうが大きいと入れ 隣同士のデータ(T(i)とT(i+1))を比較してT(i)のほうが大きいと入れ 替える。 替える。 •• 上記操作をi=0からn-2まで順次行い最後まで行うと最初からまた 上記操作をi=0からn-2まで順次行い最後まで行うと最初からまた 比較する。 比較する。 •• 最初から最後まで入れ替えが行わないとソートが終了した。 最初から最後まで入れ替えが行わないとソートが終了した。 10 13 15 27 35 39 40 45 入替0回 10 13 15 35 27 39 40 45 入替1回 10 13 15 35 39 27 40 45 入替1回 入替5回 15 10 13 40 35 39 27 45 10 13 15 27 35 39 40 45 比較回数は かなり減少 するような気 がする。一 番下に最少 値がある場 合は(n-1)n 回の比較が 必要である。 ソートのまとめ ソートのまとめ バブルソートの詳細アルゴリズムは省略する。 バブルソートの詳細アルゴリズムは省略する。 3つのアルゴリズムを紹介した。平均的な処理速 3つのアルゴリズムを紹介した。平均的な処理速 度は3つで違うが、いずれも最悪の場合、オーダ 度は3つで違うが、いずれも最悪の場合、オーダ n二乗の処理時間がかかる。 n二乗の処理時間がかかる。 •• 世の中には、もっとよいアルゴリズムがある。そ 世の中には、もっとよいアルゴリズムがある。そ のオーダはn*log のオーダはn*log nn である。→アルゴリズム理論 である。→アルゴリズム理論 (データ量が小さい時は今回のアルゴリズムでもよ (データ量が小さい時は今回のアルゴリズムでもよ いが、データ量が大きくなると遅すぎて使い物に いが、データ量が大きくなると遅すぎて使い物に 2 ならない。例えばデータの量が千とするとn は1 ならない。例えばデータの量が千とするとn2 は1 00万で、 00万で、 n*log n*log22nは1万であり、100倍も開く。 nは1万であり、100倍も開く。 データ量が大きくなるもっと開く。) データ量が大きくなるもっと開く。) •• •• 25 11.3 11.3 パリティチェック パリティチェック •• データを通信回線で送る場合,雑音によってデータの一部の データを通信回線で送る場合,雑音によってデータの一部の ビット1が0になったり,ビット0が1になったりする伝送誤り ビット1が0になったり,ビット0が1になったりする伝送誤り が発生する.こうした伝送誤りを検出したり,(検出した誤 が発生する.こうした伝送誤りを検出したり,(検出した誤 りを)訂正したりする手法の1つにパリティチェックがある. りを)訂正したりする手法の1つにパリティチェックがある. •• 送りたいデータをa …, aannのnビットとする.送り側はこ のnビットとする.送り側はこ 送りたいデータをa11,, aa22,, …, れにa (パリティビットという)を余分に付加する.しかもパ れにa00(パリティビットという)を余分に付加する.しかもパ リティビットa リティビットa00の値は必ずa の値は必ずa00⊕a ⊕a11⊕a ⊕a22⊕…⊕a ⊕…⊕ann=0となるように =0となるように 決める.一方,a ⊕a ⊕a ⊕…⊕a =1と決める方式もある.前 決める.一方,a00⊕a11⊕a22⊕…⊕ann=1と決める方式もある.前 者を偶数パリティ,後者を奇数パリティと呼ぶ. 者を偶数パリティ,後者を奇数パリティと呼ぶ. 側 側 an 信 信 a1 a2 受 送 a0 •a1, a2, …, anを送る時その1の個数 が奇数の時a1を1、偶数の時0を 送るのが偶数パリティという。 •1ビットの誤りだけであれば、そ の誤りを検出することができる。 (誤った場合、1の個数が奇数とな るこにより検出) 11.3 11.3 パリティチェック パリティチェック •• 16ビットのデータA= )の右側15ビットに 16ビットのデータA= (a (a00,,aa11,,aa22,,…a …a15 15 )の右側15ビットに データがあるとき、16ビットの1の個数が偶数になるよう データがあるとき、16ビットの1の個数が偶数になるよう に最左ビットを計算するプログラムを考える。 に最左ビットを計算するプログラムを考える。 •• aa1⊕a ⊕…⊕a を計算した結果をd とすればd が求め 1⊕a22⊕…⊕a15 15 を計算した結果をd00とすればd00が求め る最左ビットである。 る最左ビットである。 •• aa0 =0としたデータをBとし、Aを1ビットシフトしてXORを15 0 =0としたデータをBとし、Aを1ビットシフトしてXORを15 回とれば答えは求まる。もっと早い方法はないか? 回とれば答えは求まる。もっと早い方法はないか? •• XOR命令では16ビット各々で排他的論理和⊕の演算が XOR命令では16ビット各々で排他的論理和⊕の演算が 行われている。これをうまく利用できないか? 行われている。これをうまく利用できないか? 26 11.3 11.3 パリティチェック パリティチェック 初期化:X,Y←A 初期化:X,Y←Aand and#8000 #8000 •• Xを8ビット左シフトし、 Xを8ビット左シフトし、 X,Y←X⊕Y X,Y←X⊕Y •• Bを4ビット左シフトし、 X,Y←X⊕Y Bを4ビット左シフトし、 X,Y←X⊕Y •• Bを2ビット左シフトし、 Bを2ビット左シフトし、 X,Y←X⊕Y X,Y←X⊕Y •• Bを1ビット左シフトし、 X,Y Bを1ビット左シフトし、 X,Y ←X⊕Y ←X⊕Y Xの最左ビットが求める解d となる Xの最左ビットが求める解d0 となる 0 x x0 x1 x2 x3 x4 x5 x6 x7 計算1 計算2 a8 a8⊕a4⊕a12 a1⊕a9 a1⊕a9⊕a5⊕a13 a2⊕a10 a2⊕a10⊕a6⊕a14 a3⊕a11 a3⊕a11⊕a7⊕a15 a4⊕a12 a5⊕a13 a6⊕a14 a7⊕a15 計算3 a8⊕a4⊕a12⊕a2⊕a10⊕a6⊕a14 a1⊕a9⊕a5⊕a13⊕a3⊕a11⊕a7⊕a15 計算4 a1⊕a2⊕…⊕a15 11.3 11.3 パリティチェック パリティチェック •• ここでは、パリティは1ビット誤りのみしか検出で ここでは、パリティは1ビット誤りのみしか検出で きない。ビット数が少ないデータには用いられるが、 きない。ビット数が少ないデータには用いられるが、 通信などビット数のかたまりが大きい場合には、m 通信などビット数のかたまりが大きい場合には、m ビットの付加でmビット誤りを検出できる手法が用 ビットの付加でmビット誤りを検出できる手法が用 いられる。 いられる。 →符号理論 →符号理論 27