コンピュータアーキテクチャのエッセンスを読んだときのメモ:第5章 さまざまなプロセッサと命令セット
5.1 はじめに
- 前章では、プログラム可能なプロセッサが用いるフェッチ-実行サイクルを説明した
- プロセッサが実行できる演算群に焦点を当てる
- これまでのコンピュータアーキテクトが選んだアプローチの説明、それぞれの利点と欠点
5.2 計算能力、便利さ、コスト
- プロセッサは、最低限の基本演算を提供するだけで、どんな関数であっても計算することは出来る、だけれども
- それでは使いにくく、実用的ではない
- プロセッサに算術演算機能を追加することは、使いやすさとハードウェアコスト、電力消費量のトレードオフ。
5.3 命令セットとその表現
- プログラム可能なプロセッサの設計では、次の2つを決める必要がある
- ハードウェアが認識する演算群、命令セット
- ハードウェアが各命令に用いる表現、命令セットの文法のようなもの。ハードウェアとソフトウェアをつなぐもの。
5.4 オペコード、オペランド、結果
- オペコードは実行する演算そのものを意味。数字で表現。例えば、整数加算はオペコード5、とか。
- オペランドは、演算を実行するために必要な値。演算の対象となる値や変数に相当。
5.6 可変長命令と固定長命令
- 命令の長さは同じであるべきか
- 可変長の命令の方が、メモリを無駄にしないのでよいように見えるが
- 命令毎に長さが違うと、ハードウェアは複雑になる
- いつでも長さが同じ命令を使って、命令が含まれない部分には零を入れる、というのもある
5.7 汎用レジスタ
- フェッチとストアという2つの基本的な動作を支援する部分
- 次に実行すべき命令のアドレスを示す、プログラムカウンタなど、特定の役割を持つものもある
- 一時的にデータを保持する、汎用レジスタもある
5.9 レジスタを使ったプログラミング
5.11 複雑な命令セットと縮小した命令セット
5.12 RISC設計と実行パイプライン
5.13 パイプライン命令とストール
5.14 パイプラインストールの他の要因
5.15 プログラマのための帰結
5.16 プログラミングとストール、そして何もしないという命令
- パイプラインストールが避けられない場合もある
- そのような場合は、ストールが起こる場所にドキュメントを残すことが適切
- no-op命令で、パイプラインを満たすこともできる
5.18 演算の型
- 汎用プロセッサでは、命令はあらゆるカテゴリに分類されている。分類例を示す。
- 算術命令(整数演算)
- 論理演算命令(ブール演算)
- データアクセス、転送命令
- 条件/無条件分岐命令
- 浮動小数点演算命令
- プロセッサ制御命令
5.19 プログラムカウンタ、フェッチ−実行、分岐
- 第4章にて説明:全てのプロセッサでは、基本的な「フェッチ−実行」のサイクルが行われている
- プログラムカウンタ(命令ポインタ)を呼ばれる専用の内部レジスタが備わっている
- プログラムカウンタには、次に実行される命令のアドレスが格納されている
- 分岐命令ががどのよう動作するかは:絶対分岐と相対分岐の例で説明
- 絶対分岐
- 相対分岐