全天で2番目に明るいカノープスの学名(Carinae)から。「竜骨」という意味(りゅうこつ座のα星)。 ちなみに全天で太陽の次に最も明るいのはシリウスだが、見かけの等級が大きく絶対等級はそれほど大きくない。
- 32bitプロセッサ(命令長、レジスタ長は基本的に32bit)
- General Purpose Register × 32
- $zeroは定数の0
- Floating Point Register × 32
- Comparison Status
- 1bitの比較結果格納用レジスタ, true/false
- 例外用レジスタ ... Cause & Status
- Program Counter
(!)がついている命令はMIPSには存在しない命令
(MIPSでは)1clockで終了
- add
- addi
- and
- andi
- beq
- bne
- j (アドレス直接指定でジャンプ)
- jal (戻りアドレスをr31に格納してジャンプ)
- jr (レジスタに指定した番地にジャンプ)
- jral(!) (戻りアドレスをr31に格納してレジスタに指定した番地にジャンプ)
- lw (disp付き32bitロード命令)
- nor
- or
- ori
- slt (set less than)
- slti
- sll (shift left logical)
- srl (shift right logical)
- sw (disp付き32bitストア命令)
- sub
- nop(!)
- hlt(!)
- in(!)
- ブロッキングでRS-232C受信
- 受信キューが空の場合はブロッキング
- out(!)
- ノンブロッキングでRS-232C送信
- asr.[eq|ne|lt|le](!)
- アサーション命令
- 基本はc.x.sと同じだが、false時にエラー終了し、その時点での全レジスタ値をデバッグ送信する
- asr.[eq|ne|lt|le].s(!)
- syscall
(MIPSでは)2clock以上かかる
- bclt
- bclf
- div
- add.s
- add single = 32bit fadd
- c.[eq|lt|le].s
- compare single, 3種類の比較方法
- mul.s
- inv.s(!)
- sub.s
- lw.s(lwcl)
- mult
- sw.s(swcl)
- jとjrはオペランドに指定したアドレスに無条件分岐
- jal(jump and link)はr31に戻りアドレス(pc+4)を格納してアドレスにジャンプする
- 等値性に基づいて分岐するときはbeqとbneを使う
- 非等値性に基づいて分岐するときはslt系列を使ってオペランドを比較し、その結果を0/1と比較する
関数の呼び出しには「末尾呼び出し/not 末尾呼び出し」「直接呼び出し / クロージャ呼び出し」の計4種類がある。 それぞれ適切な分岐命令で実現することができる。
- 末尾 + 直接呼び出し … j
- 末尾 + クロージャ … jr
- 非末尾 + 直接呼び出し … jal
- 非末尾 + クロージャ … jral
jalとjrを用いたbranch and link
MIPSに存在する命令はMIPSのバイトコードに準拠する。それ以外の命令について、バイトコードを示す。
- nop
- syntax sugar(適当にadd r0等に翻訳)
- hlt
- 111...11
- jral
- R: | 0x00(6bit) | reg(5bit) | ignore(15bit) | 0x09(5bit) |
- in
- R: | 0x1A(6bit) | ignore(5bit) | reg(5bit) | ignore(16bit) |
- out
- R: | 0x1B(5bit) | 00000 | reg(5bit) | ignore(16bit) |
- asr.[eq|ne|lt|le]
- R: | 0x1C(5bit) | r1(5bit) | r2(5bit) | ignore(10bit) | op(6bit) |
- asr.[eq|ne|lt|le].s
- FR: | 0x1D(5bit) | 0x10(5bit) | f1(5bit) | f2(5bit) | ignore(5bit) | op(6bit) |
- syscall
- R: | 0x1E(5bit) | - (5bit) | - (5bit) | - (5bit) | - (5bit) | vector(6bit) |
- inv.s
- FR: | 0x11(5bit) | 0x10(5bit) | f1(5bit) | ignore(5bit) | fdst(5bit) | 0x03(6bit) |
- .text
- .data
- スタック
の順でSRAMに割り当てる。スタックはSRAMの最後尾から定位アドレスへ伸びる。
SRAMの先頭からBlock RAMのサイズ分だけの領域アドレスはBlock RAMとバイパスがなされており、この領域のアドレスにアクセスしようとした場合はBRAMにアクセスされるようになる。 この領域は主に.textを割りつけるのに使う。
- ヘッダ(16B)
- magic number "CARN" (4B)
- .text size (4B)
- .data size (4B)
- .entry point addr (4B)
- .text
- .data
プロセッサを起動してまずCARNヘッダが送信されてくるのをwaitする。 ヘッダを受け取った後は.textサイズ、.dataサイズに従って残りの部分をロードし、上述の通りメモリに割り当てる。