オリジナルマニュアル for PowerPC
現在、大学でPowerPCのアセンブラを記述する授業があります。
マニュアルは当然のように英語のため、ものすごく大変なのですが、とりあえず現在までで使用した主な演算に関して位は自前でまとめておいても損はないし・・・ってことで、ちょっと書いておきます。
1.レジスタ同士の演算
1)
li r3, 0
Cで言うとr3 = 0;
第一引数に、定数を代入する。
2)
mr r3, r4
Cで言うと、r3 = r4;
第一引数に、第二引数の値をコピーする。
3)
add r3, r4, r5
Cで言うと、r3 = r4 + r5;
第一引数に、第二引数と第三引数の和を代入する。
4)
addi r3, r4, 1
Cで言うと、r3 = r4 + 1
第一引数に、第二引数と定数の和を代入する。
2.メモリからのロード演算
1)
lwz r4, 4(r3)
Cで言うと、r4 = *(r3 + 4);
2)
lbzx r3, r4, r5
Cで言うと、r3 = *(r4 + r5)
この二つがあれば、まあ大丈夫・・・のはず。
定数メモリからのロード命令もあるはずだけど、見つけるのめんどい。
3.メモリへのストア演算
1)
stb r3, 4(r4)
Cでいうと、*(r4 + 4) = r3
これが分かればとりあえず書けると思う。
当然これも、*(r4 + r5) = r3みたいな演算があるはずだけど、
分からんかった。
やりたい場合は、addと組み合わせればとりあえずは出来る。
4.比較演算
1)
cmp cr7, r3, r4
Cで言うと、cr7 = (r3 == r4);
レジスタ同士の比較
2)
cmpi cr7, r3, 0
Cで言うと、cr7 = (r3 == 0);
定数との比較
3)
cmpl cr7, r3, r4
Cで言うと、cr7 = (*r3 == *r4);
ポインタ先比較。
5.ジャンプ命令
1)
b LABEL
Cでいうと、goto LABEL;
2)
beq cr7, LABEL
cr7に等しいという内容があれば goto LABEL
3)
bne cr7, LABEL
cr7に等しくないと言う内容があれば、goto LABEL