01ssdd mov
8進数にへんかんして、 0500 SSDD
SS 05 DD 00
SS Source DD Destination
8進数で2桁 下の位はレジスタ
011402 mov (r4) r2
モード そのレジスタにたいしてどのような操作がなされているか r0 モード0 (r0) モード1
116520 11 movb 65 SS 20 DD
movb x(r5) (r0)+
mode 6 X(R)
0 R 1 (R) 2 (R)+ 6 X(R)
9d50 0004
movb 1バイトだけ転送する
普通のmov命令では2バイト単位で弄られる
レジスタ |0 | |1 | |2 | |3 | |4 | |5 |
movb 1バイト mov 2バイト
movb 4(r5), 6(r0)
オペランドで何バイトか決まる
即値
add $4, r2 062702 ADD SS DD add (r7)+, r2 ではない add #n, r2 add #4, r2 =add $4, r2(V6)
r7 汎用レジスタ
シンタックスシュガー
$とか#は流儀であり書き方
0246 0248 024a 0246: 15f7 0001 0074 mov $1, 02c0
relative 相対 012767 mov #n A mov #1 02c0
A 相対アドレス
024c + 74 02c0
@ $n ← #n *A ← @A
@#A *$A
w >> 12
(x >> 6) &&& 7
ビット演算にしたほうが処理が圧倒的に早くなる
プログラムカウンター
let fetch() = let ret read16 mem pc pc <- pc + 2 ret
必要なタイミングでfetchを行う。