勉強会
PDP-11とVAX†
- まさかのPDP-11
- 学部3年次に受けた授業と、12年ぶりに再会するとは思わなかった。
gcc-3.4.6のバグ?†
- gcc-3.4.6では、16bitの即値が'99aa'が'00aa'として出力される
- どうも、gcc内部で0xffffでマスキングするべきところを、0xffでマスキングしている
PDP-11はアドレッシングモードが多彩†
- ポインタのポインタが指す番地の値を読み込む
- 具体的にはスタックポインタからディスプレースメント付きでアクセスするのが、1命令で可能
V850†
- 424p.には「8[r6]」は「r6+4」と言う解説があるが、恐らくr6+8の誤植
i960†
- Intel製のRISC系CPU
- レジスタウィンドウがある、と解説されているが、どうも、SPARCほどHW的なレジスタウィンドウでは無いっぽい。
- @7shiさんが主催されてる読書会
- 初参加で発表してきた
SPARC†
- SPARCはRISC系CPU
- 元はサンマイクロシステムズによって開発
- ヘネシーパターソン本←王道の教科書を書いた人によって設計された
- 最近はSPARC-5まで来ている。
- SPARC-5は学術向けの色が強そう
- 4バイト固定長命令
- retlが帰還命令
- 遅延スロット持ち
- o0の値が戻り値となる
- retlはnop付きのreturn。つまり遅延スロットがある
- アセンブリで書いた場合、代入方向は左から右へ
mov r0, r1
- はr0の値をr1にコピーする、という意味
add r0, r1, r1
- はr0とr1の値を加算して、r1に格納する、という意味
レジスタ・ウィンドウ†
- SPARC最大の特徴
- レジスタ退避にスタックを使うのでなく、HW的に参照するレジスタを切り替えることでレジスタ退避を実現している
- そのため、総レジスタ数は多い(教科書では64個)が、そのうち使えるのは一部だけ(教科書では32個)
- なので、アセンブリで同じ名前のレジスタを使っていても、物理的に別のレジスタだったりもする。
- return命令も、ret命令とretl命令があり、レジスタ・ウィンドウを切り替えた/切り替えない時それぞれのためにある
32bit即値†
- SPARCでは、2回の命令に分けて32bit即値を表現しているが、
- 22bit+10bit という分け方で即値を表現している
PA-RISC†
- 別名HP/PAとも言う
- 遅延スロットを実行する、しないを切り替えられる
- rpレジスタがリンクレジスタ
32bit即値†
- 何故か、即値の一番下位ビットが符号ビットなのだ!!
- PA-RISCでは18+14bitの組み合わせで32bit即値を表す
- Wikipediaによれば、プログラム内の定数値の内98%が13ビットに収まる、らしい
- このような統計情報をもとに設計されたアーキテクチャ
スタックは上方伸長†
- スタックは上方伸長(変態だー!)
- なにゆえ、0x40をまるまるSPとして確保するのか。
- 0x40を確保しておきながら、何故SP-0x38 を使うのか。2バイトどこ行った?
- そこに関しては今回情報不足
Alpha†
- Alphaは純正64bitアーキテクチャ
- 遅延スロットもなく、分かりやすい
- 製造会社がDEC→Compaq→HPと買収され、とうとう新規製造はされなくなった
- ちなみに、2015-06-03時点で、CentOS、DebianとGentooディストリビューションがAlphaに対応している¬e{comparison-of-linux-distribution:Linuxディストリビューションの比較 - Wikipedia, 2015-04-29 17:47版, 2015-06-03閲覧};
- Alphaではポインタは8バイトだが、intは4バイト。(longは8バイト)
- 64bitとしてはデファクトスタンダードな、
- int* 8byte
- int 4byte
- short 2byte
- long 8byte
- 64bitアーキテクチャだが、命令は32bit固定長
32bit即値†
- 即値は2回に分けて行うがor命令でなく、add命令で行う。なにゆえ?
- Alphaは16bitずつ分けて即値を表すが、16bitの足し算で表すため、値によっては符号拡張が行われ1ずれた値な場合がある
Last-modified: 2015-06-22 (月) 12:58:27