パタヘネ
https://m.media-amazon.com/images/I/61vXdBJ3-6L.jpg
マック安い
1章(2020/05/11)
常識・概要・チュートリアル
2章(2020/05/12)
3つの設計原則
単純性は規則性につながる
例: フォーマットを統一する(r-format, i, j)
小さければ小さいほど高速になる
優れた設計には適度な妥協が必要である p167
例: MIPSの命令長はすべて32bitに妥協する
MIPS
32bit == 1word
レジスタ数: 32個
lw <regster>, immediatly(<regster>)
lw $s1, 20($s2)
メモリのアドレスは8bitごとに振られているので、レジスタのサイズがwordなので4アドレスごとに計算する
https://gyazo.com/7ffd8467a88ecc9ba9a1e310ae5c31b7
op:命令の基本操作.従来から命令操作コード(opcode,オペコード)
rs:第1のソース・オペランドのレジスタ.
rt:第2のソース・オペランドのレジスタ
rd:デスティネーション・オペランドのレジスタ,つまり結果を収める先.
shamt:シフト量
funct:機能.命令操作フィールドのバリエーションを表す (機能コード)
https://gyazo.com/98a8f4ba91a185d748d9bd953fda810f
https://gyazo.com/4f4ca2b45c6ea1ce2af690b7ceb77e3c
lwなどのアドレスや即値指定したい命令のためのフォーマット
2.8 コンピュータ・ハードウェア内の手続のサポート (2020/5/13)
⼿続き呼出しのために使われるレジスタ
$a0-$a3:4本の引数レジスタ.パラメータを渡すために使⽤.必要に応じて保存
$v0-$v1:2本の値レジスタ.結果の値を返すために使⽤.
$ra: 1本の戻りアドレス・レジスタ.制御を元に戻すために使⽤.必要に応じて保存
$t0-$t9: 非呼び出し側でガンガン上書きして問題ない
$s0-$s7: 被呼び出し側で使う場合対比する必要がある
jal [手続きのアドレス]: 実質関数呼び出し
PC: プログラムカウンタ
$sp: スタックポインタ $fp: フレームの先頭(ベースポインタ)
2.9 人との情報交換 (2020/5/13)
文字コードの話
ascii
2.10 32ビットの即値およびアドレスに対するMIPSのアドレシング方式(2020/5/14)
pc相対アドレッシング
条件分岐命令は即値として$ 2^{16}bitを指定できるので、PCレジスタ$ \pm 2^{15}(単位はword)の範囲でjmpできる
jmp, bne で指定する即値は word単位で計算するので $ 2^{18} = \pm 32 \rm K \mathrm{word}
$ 0000 0000_{16} = SLL $0, $0, 0 = 副作用ないので慣例的に noop として扱われる
Note: The encoding for a NOOP represents the instruction SLL $0, $0, 0 which has no side effects. In fact, nearly every instruction that has $0 as its destination register will have no side effect and can thus be considered a NOOP instruction.
https://gyazo.com/5f77a42ee7ed15bfc44caada75101d90
2.11 並列処理と命令: 同期(2020/5/14
ll(load linked) と sc(store conditional) が用意されている
単一プロセッサでも割り込みがないことを保証するために使用するのは有用
2.16 AMDv7(32bit)
divがない
2.17 Intel x86
命令が時代に合わせてたくさん追加された
互換性
歴史、命令セット
MIPSとかと違って命令長がバラバラ
2.18 ARMv8(64ビット)の命令
16bitなのはお前だけ