the M.G.C'sHP



始めに nop 値代入命令 加減算命令 ストア命令 ロード命令 ジャンプ命令 分岐命令

始めに

レジスタについて

何か命令を覚えないと始まらないわけで
最低でもこれだけは覚えとけって命令
判りやすくするために分類したから正しい分類じゃないかも
r1とかはレジスタのことね
その他分からないところは調べるとか

nop

nop
nop
なにもしない
なにも起こらない

備考
後半で出てくる遅延を潰すときくらいにしか使わない
実際はsll zero,zero,0みたいな動作をしている(多分)

値代入命令

lui
lui r1,0xaaaa
r1の上位16bitに0xaaaaを代入、下位16bitはクリア
要するにr1に0xaaaa0000を代入ってこと

ori
ori r1,r0,0xbbbb
r1にr0と0xaaaaの論理和を代入
r1=r0+0xaaaaってこと
0xaaaaは符号拡張しない

li
li r1 0xaaaa
r1に0xaaaaを代入
ori r1,zero,0xaaaaが変化したもの

備考
lui,oriを使ってアドレス指定ができる
lui r1,0x0aaa
ori r1,r1,0xbbbb
これでr1に0x0aaabbbbが入る

加減算命令

addiu
addiu r1,r0,0xaaaa
r1にr0と0xaaaaの和を代入
r0+0xaaaa
基本oriと一緒だがこちらは符号拡張する
なので減算命令としても使える

addu
addu r1,r0,r2
r1にr0とr2の和を代入
r1=r0+r2
符号拡張する

ストア命令

sb
sb r1,0xaaaa(r0)
r0+0xaaaaのアドレスにr1を8bitでストア(書き込み)
0xaaaaは符号拡張する

sh
sh r1,0xaaaa(r0)
r0+0xaaaaのアドレスにr1を16bitでストア(書き込み)
0xaaaaは符号拡張する

sw
sw r1,0xaaaa(r0)
r0+0xaaaaのアドレスにr1を32bitでストア(書き込み)
0xaaaaは符号拡張する

備考
違うのは書きこむ量だけ
lui r0,0x0aaa
ori r0,r0,0xaaaa
sw r1,0x0000(r0)
これで0x0aaaaaaaにr1を32bitで書き込み

ロード命令

lb
lb r1,0xaaaa(r0)
r0+0xaaaaのアドレスにr1を8bitでロード(読み込み)
0xaaaaは符号拡張する

lh
lh r1,0xaaaa(r0)
r0+0xaaaaのアドレスにr1を16bitでロード(読み込み)
0xaaaaは符号拡張する

lw
lw r1,0xaaaa(r0)
r0+0xaaaaのアドレスにr1を32bitでロード(読み込み)
0xaaaaは符号拡張する

備考
違うのは読み込む量だけ
ストア命令とは反対の意味の命令
lui r0,0x0aaa
ori r0,r0,0xaaaa
lw r1,0x0000(r0)
lw r2,0x0000(r1)
これでポインタコードと同じ効果
0x6aaaaaaa 0xr2
0x00020001 0x00000000

ジャンプ命令

j
j 0x0aaaaaaa
アドレス0x0aaaaaaaにジャンプ

jal
jal 0x0aaaaaaa
アドレス0x0aaaaaaaにジャンプ
このとき復帰アドレスがraに保存される

jr ra
jr ra 0x0aaaaaaa
raに書きこまれているアドレスにジャンプ

備考
ジャンプ系の命令は遅延といって、ジャンプする前に次の命令も実行しまう

addiu r1,r10xFFFF
sw r1,0x0000(r0)
j 0x0aaaaaaa

このようなときjの一つ後ろも実行されるので
addiu r1,r10xFFFF
sw r1,0x0000(r0)
j 0x0aaaaaaa
nop

このように遅延を潰す必要がある
または、この性質を利用し
addiu r1,r10xFFFF
j 0x0aaaaaaa
sw r1,0x0000(r0)

こうすることもできる

原則として遅延が発生するものは連続して実行できないので
j 0x0aaaaaaa
j 0x0bbbbbbb

こうしたい場合は
j 0x0aaaaaaa
nop
j 0x0bbbbbbb
nop

このように一命令分空けなければならない

分岐命令

beq
beq r0,r1,0xaaaa
r0とr1を比較し、数値が同じなら分岐

bne
bne r0,r1,0xaaaa

r0とr1を比較し、数値が違ければ分岐

備考
beq zero,r1,0x0000とすると
値がゼロのとき分岐するようにできる

何処へ分岐するかは0xaaaaで決まる
殴り書きで書いたが、求め方…分岐までの距離÷4-1

また、ジャンプ命令と同じく遅延が発生する

CopyRight Team-M.G.C Co.,ltd.