2021:BKSC 特徴

 最後に2021BKSCの特徴。 ・連鎖性言語のような動作  前の命令の出力を入力として使用する。汎用レジスタへの書き込みはそれ用の命令で行う。 ・表形式の分岐  分岐命令の分岐先指定には相対分岐と絶対分岐の他に表分岐というのを考えている。これはプログラムの先頭部分に分岐先を列挙したテーブルを用意し、分岐命令でその表の項…
コメント:0

続きを読むread more

2021:BKSC 割り込みやモード

 これでユーザーモードに必要な分は定義できたので、あとは周辺。  メモリなどを保護するための特権モードとユーザモードの切替について。SPARC V9の制限されたモードからスタートして特権モードに移る方式とRISC-Vの全アクセスできるマシンモードからスーパーバイザーモード/ユーザーモードを持つ。ここではRISC-Vにならって3つの…
コメント:0

続きを読むread more

2021:BKSC オペランド、その他の命令

 オペランドはオペコードに続くレジスタ番号や即値を指定するフィールドで、1バイト単位、MSBは1で始まる。 1_1_xxxxxx レジスタ指定など このバイト単独 1_0_xxxxxx 即値指定 これは連続することで長い即値を表現する。表現したい即値のLSB側から5bitづつ詰めていく。2の補数表現。 基本、レジスタ指定などは…
コメント:0

続きを読むread more

2021:BKSC ロードストア命令

 最後にメモリとのやり取り、ロードストア命令とその他。 0_100_0xxx ストア 入力で与えられたデータをオペランドで指定した番地に書き込む 0_100_1xxx ロード オペランドで指定した番地から値を指定した幅で読み込んで出力する xxは0~6で1バイト〜64バイトのデータ幅 0_100_0111 0_xxx…
コメント:0

続きを読むread more

2021:BKSC ビット操作命令

 ビット演算命令はシフト、ローテート、符号拡張、シャッフルなどを扱う。ビット列の入力を数値で操作してビット列を得る。 1_011_xxxx ビット演算命令 2オペランド命令 0000 ROR - 右ローテート 0001 ROL - 左ローテート 0010 SHR - 論理右シフト 0011 SHL - 論理左シフト …
コメント:0

続きを読むread more

2021:BKSC 分岐命令

 分岐命令は直前の演算の結果を判断してジャンプする。 1_000_xxxx 分岐命令 ←MSBは0にしたほうがいいかなあ?  分岐条件の分類 ・算術演算の結果はZ,N,V,Cのフラグを使用する。 ・論理演算、ビット演算 算術演算に準じる。0010-0111までのZ,N,V,Cを組み合わせる条件は使わない。 00…
コメント:0

続きを読むread more

2021:BKSC 算術演算命令

1_001_xxxx 算術演算命令  算術演算命令は数値とみなした入力から加減乗除などを行い結果は数値。引数はオペランドで指定する。 整数の演算は加減算については2の補数でも符号なしでも同様に可能。 乗算についてはそのまま行うと結果のサイズが入力A,Bのビット幅の合計になる。乗算だけ結果を倍幅にするという例外は採用したくない。…
コメント:0

続きを読むread more

2021:BKSC 命令の分類

 オペコードのビット列を考えるために、各命令を分類し何種類割り当てられるか検討する。頻出する命令は1バイトに割り当てたい。 1バイト=8bitで、オペコードとオペランドの識別に1bit使ったら残りは7bit。 オペコード 1xxxxxxx オペランド 0xxxxxxx  各命令は直前の命令の結果を参照し、オペランドで汎用…
コメント:0

続きを読むread more

2021:BKSC 基本方針 汎用レジスタ

 ぼくのかんがえたさいきょうCPUとはなにか。色々あった計算機アーキテクチャは現在みんな使ってるx86-64、組み込みからスパコンまでArm、オープンなRISC-Vあたりに絞られてしまったがこれらから選ぶことではない。また、The MachineやThe Millのように現在の延長線上からかけ離れたようなアーキテクチャではない。これまで…
コメント:0

続きを読むread more

2021:モード

 リソースを保護する目的でプロセッサはモードを持つことがある。特権モードはすべてのリソースにアクセスでき、ユーザーモードはI/Oやメモリ管理関連の制御が制限される。これによりユーザーモードで動くプログラムは特権モードで割り当てられるメモリ領域と、デバイスドライバ経由でアクセスできるI/Oにより他のユーザープログラムに影響を与えない。これ…
コメント:0

続きを読むread more

2021:分岐命令

 プログラムは命令列が順に取り込まれては実行されるイメージで、現在実行中のコードの位置を指し示すのがプログラムカウンタ(PC)である。プロセッサによっては次に実行する命令を指したり名称が違っていたりする。PCは4バイトの固定長命令ならば+4ずつ、可変長命令なら現在実行した命令のサイズ分増えていく。この流れを変えるのは分岐命令で、制御転送…
コメント:0

続きを読むread more

2021:レジスタの仕組み

 汎用レジスタは固定した役割はなくロードストアや演算時にすべて同じ様に扱われるビット列の一時置き場である。例外はあって、常に0が読み出されるゼロレジスタは3オペランド命令で便利に使うことができる。また、スタックを持たないアーキテクチャでは特定の番号のレジスタがサブルーチンコール時の戻り番地を保存する場所になる。その他の汎用レジスタの用途…
コメント:0

続きを読むread more

2021:算術演算 浮動小数点

 整数に加えて数値の重要な表現に浮動小数点形式がある。ビット列を指数部と仮数部に分けて実数の範囲を扱う。最も普及している表現形式はIEEE754で定義されているもの。昨今は機械学習のためのより少ないビット数で実数を表現する形式が存在する。加減乗除のうち除算は実装せずNewton-Raphson法で求めるものもあった(Alpha,IA-6…
コメント:0

続きを読むread more

2021:算術演算 整数

 算術演算は入力で与えられたビット列を数値とみなして加減乗除などを行う。整数の表現としては2の補数の形式が一般的で、反転して+1すれば符号反転できるので加算と減算は1つの加算器で扱える。符号なしの数値として扱う場合もある。整数の乗算は乗算器の回路規模から1サイクルでの計算が終了しないことが多い。除算器は加減乗除の中では最も複雑で、演算中…
コメント:0

続きを読むread more

2021:ビット操作

 ビット操作命令は入力をビット列とみなし、数値を指定して加工を行い、結果をビット列として返す。  シフト命令は指定した数分MSB側(左)またはLSB側(右)にビットをシフトする。シフトして空いた部分には0を挿入する。シフト操作はビット列を2進数の数値とみなした場合、左シフトは2のn乗の乗算、右シフトは2のn乗での除算ができる。また…
コメント:0

続きを読むread more

2021:論理演算

 論理演算は汎用レジスタの内容をビット列とみなして、それぞれ同じ位置のビットに対してAND/OR/XORの論理演算を行い結果を返す。これらの演算の入力または出力側でビットを反転すればNOTが実現できる。組み合わせると次のようになる。 XOR A xor B NXOR !(A xor B) AND A and B NAND !…
コメント:0

続きを読むread more