第 11 回機械語とアーキテクチャ コンピュータは, 記号で組み立てられ, 記号で動く機械 : ソフトウェアソフトウェア としても理解されなければならない ソフトウェアの最も下位レベルのしくみが ( 命令セット ) アーキテクチャ である 講義では命令符号 ( 機械語 ) の構成と種類についてまとめる また, 機械語を効率良く実行するために採用されている技術について紹介する 機械語とアセンブリ言語 機械語 プロセッサの動作を指示する 命令符号 ビット列としてメインメモリに存在 命令レジスタに読み込む プロセッサの動作が決定命令符号を機械語 (machine language) ともいう. 命令符号の構成例 加算などの演算命令の場合, 命令符号 ( 機械語 ) は, Fig.11-1 に示すように構成されている 演算符号格納場所 1 格納場所 2 1 演算の種類を指示する符号 OP-code Operand Fig.11-1 演算命令の構成 対象となるデータと演算結果の格納場所を指示する符号 一般には, 演算の対象となるデータの格納場所の指定に制限がある ( 例 : 格納場所 1 はレジスタのみ, 格納場所 2 はレジスタとメモリを指定 ) また, 演算の結果も, 常に格納場所 1 に格納する方式の他, 格納場所 2 も選択できる方式がある 命令符号は命令の実行に必要な情報を整理して表現したものであり, これを基に命令デコーダがプロセッサ内部の制御信号を生成する デコーダの VHDL 記述の例は, 資料 p.11-6 に記載されている ( リスト 11-1) 命令セット 命令セット (instruction set) プロセッサが持っている一群の命令プログラマにとって命令セットは アーキテクチャアーキテクチャ そのものと言える 命令セットは, 機能によって以下のように分割できる. 以下の記法では, レジスタやメモリなどのデータの格納場所が dest,source,count, レジスタが reg, アドレスが address, 入出力ポートが port でそれぞれ指定されているものとする. これらのアドレスの指定には複数の方法が用意されている ( アドレッシング モード ). マイクロプロセッサとインタフェース講義資料 11-1
命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, count : reg をcount で指定されたビットだけ右にシフト SAR reg, count : reg をcount で指定されたビットだけ右に算術シフト アセンブリ言語の例 :ADD R0,R1 R0 R0+R1 C 言語だと a += b ; 2 b) データ転送命令 例 )MOV dest, source : dest source アセンブリ言語の例 :MOV R0,R1 R0 R1 C 言語だと a = b ; 3 c) ジャンプ コールコール命令 例 )JMP address : 無条件ジャンプ. 指定されたにジャンプ J** address : 条件ジャンプ. 条件 ** が成立すると指定にジャンプこの条件は演算の結果によって変化する条件フラグレジスタの特定のビット (Table 10-2 参照 ) で与えられる jz : 演算の結果がゼロならPC に値 を格納 jn : 演算の結果が負ならPC に値 を格納 CALL address : コール : からの復帰 アセンブリ言語の例 :JMP A000 A000 にジャンプ ( 実際の動作は,PC に A000 を格納 ) SUB R0,1 : レジスタR0から1 を減算 JZ A000 : 結果がゼロならA000 にジャンプ (PC A000) C 言語だと k -= 1 ; if(k==0){ 4 割り込みタイマなどプロセッサの外部からのハードウェア的な要因により, 予め定められた処理に分岐する, 割り込みと呼ばれる機能も, 実装されている スタック操作 ( 付録付録 参照 ) とのデータの引渡しに使う引数, からの復帰の際の戻り, あるいはレジスタ内容の退避 / 復帰などで, スタック (stack) というデータ構造を用いる 通常, スタックは, スタック ポインタと呼ばれるレジスタ (と略記) を用いてメインメモリ上に構築される スタック操作のための代表的な命令として, 以下の 2つがある ( 以下は, スタックをメモリの少なくなる方向に伸ばしていく場合の例である ) PUSH : スタックへのデータ格納 の内容をデータ長の分だけ減じてからの内容をアドレスとするメモリにデータを書き込む POP : スタックからのデータ取得 の内容をアドレスとするメモリからデータを読み出してから,の内容をデータ長の分だけ増加させる 11-2 マイクロプロセッサとインタフェース講義資料
d) 入出力命令 例 )IN reg, port OUT port, reg e) プロセッサ制御命令 例 )HALT( プロセッサ停止命令 ),NOP 条件フラグレジフラグレジスタ 命令の結果によって, 条件フラグレジスタの内容が変化する. そして, このレジスタの内容は, 条件付き分岐命令に影 響を与える.8 ビットプロセッサで一般的に使用されている条件フラグを Table 11-1 に示す. 1) Table 11-1 条件フラグの内容の一例 フラグ名 符号名の例 条 件 キャリー C 加算時最上位からの桁上げ, 減算時最上位への借りが発生するとセット ゼロ Z 演算結果がゼロ, すなわち, すべてのビットがゼロであるとセット 符号, 負数 S,N 演算結果が負数, すなわち, 最上位のビットが1であるとセット オーバーフロー V 演算結果が正, 負の表現範囲を越えるとセット パリティ P 演算結果のパリティ (1の個数) が偶数であるとセット 補助キャリー, A, ハーフキャリー H 加算時第 4 桁からの桁上げ, 減算時第 4 桁への借りが発生するとセット 減算 N 減算を実行するとセット C Z N V P A 演算の結果によって特定のフラグ ビットがセットされる 条件の判定などに使う 5 主要なアドレッシングアドレッシング モード アドレッシング モードにより, 最終的にアドレスバスに出力される実効実効アドレス (effective address,ea) が変わってくる. 主要なものを以下に示す. 1) Table 11-2 プロセッサのアドレス指定方式 方式 指定内容 実効アドレス レジスタ直接 データ格納レジスタ 指定された番号のレジスタ 即値 データ 命令後の中にデータを埋め込む 絶対 絶対アドレス 絶対アドレスで指定されたメモリ レジスタ間接 アドレス格納レジスタR レジスタRの内容 ((R) と表記 ) ベース相対 アドレス格納レジスタB, 変位 d (B)+ d PC 相対 変位 d (PC)+ d マイクロプロセッサとインタフェース講義資料 11-3
付録 スタックとスタックは,Fig.11-2 に示すような構造を持つメモリである. 先に格納したデータは後から格納したデータを読み出してからでないと読みだせない ( 先入れ後出し,First In Last Out ). スタックへの読み書きは,PUSH とPOP という動作によって行われる. 図ではデータの格納場所が移動するように描かれているが, 実際にはスタックポインタ () というレジスタを用いてメモリ上に構成される (Fig.11-3). スタックポインタの内容はスタックの読み出し / 書き込みを行うメモリへのアドレスになっている. を用いたスタックの動作は, PUSH:ⅰ) の内容を1 語分減らす. ⅱ) の指す主メモリに書き込む POP: ⅰ) の指す主メモリから読み込む ⅱ) の内容を1 語分増やす. となっている スタック用のメモリには, 通常はメインメモリを使うが,PICマイコンのようにスタック専用のメモリを持つプロセッサもある Y Z Z Y Y Z Y Y (a) (b) (c) (d) (e) (f) Fig.11-2 スタックの概念 メモリ 1FFF (a) 1FFE B レシ スタの値 (b)push B 1FFD C レシ スタの値 B レシ スタの値 (c)push C D レシ スタ 1FFE B レシ スタの値 (d)pop D Fig.11-3 スタックの構成 11-4 マイクロプロセッサとインタフェース講義資料
P1 Q P2 Q P1 CALL n P2 CALL n P3 n Q P3 (a) (b) Fig.11-4 何度も使われる処理を行うをにするひとまとめの処理のモジュール化の点で有利である. スタックはの際の戻りの格納とレジスタレジスタ内容内容の退避退避に使われる.Fig.10-4にのネスティングの際のスタックポインタとカウンタの動作を示す. この図では説明を簡単にするためにレジスタのデータ長を8 ビットとしている. を呼ぶ際にはレジスタ退避などの余分な動作が必要となること ( オーバヘッド ) に注意しなくてはならない. 1 n 1 Q 1 m 1 2 Q 2 CA LL n 1 n 0 CA LL m 1 m 0 4 3 (a) m 0 n 0 n 0 n0 PC n 1 m 1 PC PC m 0 PC n 0 1 2 3 4 (b) Fig.11-5 のネスティングとスタック マイクロプロセッサとインタフェース講義資料 11-5
割り込みとトラップ ある処理に制御を渡すというコールと似た動作を行うものに割り込みとトラップトラップがある. 割り込み割り込みというのは, 外部の要因によってプロセッサがある定められた処理を行う動作のことである. プロセッサにより異なるが, 通常はハードウェアにより割り込み動作が始まる. 割り込みの用途は, 制御用 AD 変換などで制御用コンピュータシステムからAD 開始を指示するパルスを出す.ADシステムが変換完了するまでは時間がかかるが, 変換終了を割り込みによりCPUに知らせることでCPU の効率化が図れる. タスク * 切り替えある一定時間ごとに割り込みをかけ, タスクを切り替えて, ユーザからは複数のタスクが並行して働いて見えるようにする. *: タスクについては後で述べる. 割り込みにはマスクによって割り込み禁止が可能な通常割通常割り込みと, 電源障害など緊急の場合の処理のように禁止できないようになっているマスクマスク不能割不能割り込みとがある. 割り込みを受け付けるかどうかの制御は割り込みマスクフリップフロップ (Interrupt Mask:IM) で行う. 割り込み動作は, ⅰ) 割り込みフリップフロップをセット ⅱ)PC の内容をスタックにプッシュ ⅲ)PC に割り込み処理の先頭アドレス ( 割り込みベクタ ) を格納という手順で行われる. トラップ ( ソフトウェア割り込み ) 割り込みと良く似た動作を行うものにトラップ (Trap) がある. 中に置かれた TRAP 命令により, 割り込みと同様の動作を行う. ユーザから OS の用意している入出力などのを呼び出すときなどに使用する. 命令読込み 命令実行 読込み? 割込み YES 処理動作 NO Fig.11-6 割り込みの検出と処理 11-6 マイクロプロセッサとインタフェース講義資料