Edited at

PowerPCアセンブリ チートシート

More than 3 years have passed since last update.

学校の課題でPowerPCアセンブリを書くので、使った命令のニーモニックなどを簡単にまとめていく。チートシートと言いつつ、網羅性は期待してはいけないし、あと説明はかなり適当なのであまり真に受けないでください。やる気があったらもう少し真面目に書くかも。

課題を進め次第、内容も更新していきます(たぶん)。

ちなみに、 http://kivantium.hateblo.jp/entry/2015/12/06/234305 のほぼパクリ記事…… にならないようにしたい。


レジスタ


  • 汎用レジスタ: GPR0 〜 31 の32個。オペランドとしては %r0, %r1, ... と書く。

  • 浮動小数レジスタ: FPR0 〜 31 の32個。オペランドとしては %f0, %f1, ... と書く。

  • Link Register: LR

  • Counter Register: CTR

などなど。


命令


代入命令



  • li: 即値をレジスタに代入する。


  • mr: レジスタの値をレジスタに代入する。


  • mflr, mtlr: LRから(from)レジスタに/LRへ(to)レジスタから代入する。


  • mfctrmtctr: CTR(略)


演算命令



  • addi: レジスタの値と即値を加算し、レジスタに代入する。


  • add: レジスタの値同士を加算し、レジスタに代入する。


  • addc: キャリービットも更新する。


  • adde: レジスタの値(2つ)とキャリービットを加算し、レジスタに代入する。


  • addze: レジスタの値とキャリービットを加算し、レジスタに代入する。


  • mulld: レジスタの値同士を乗算し、結果の下位64bit分をレジスタに代入する。


  • mulhdu: レジスタの値同士を(符号なし)乗算し、結果の上位64bit分をレジスタに代入する。


  • sldi: レジスタの値を即値分左シフトし、レジスタに代入する。


  • or: レジスタの値同士をORし、レジスタに代入する。


浮動小数演算命令



  • fadd: 加算。


  • fmul: 乗算。


  • fmadd: 積和(レジスタ2つの値同士の積と、もう1つのレジスタの値との和)。


比較命令



  • cmpwi: レジスタの値と即値を比較する。


  • cmpw: レジスタの値同士を比較する。


分岐命令



  • b: 無条件にジャンプする。


  • blr: サブルーチンの呼び出し元に戻る。(実際には、LRの値を見ている)


  • beq, bne, blt, ble, bgt, bge: 比較命令の結果に従ってジャンプする。


  • beqlr, bnelr, bltlr, blelr, bgtlr, bgelr: 比較命令の結果に従ってサブルーチンの呼び出し元に戻る。


  • bdnz: CTRをデクリメントし、結果が0でなければジャンプする。


メモリアクセス命令



  • ld: Load doubleword.


  • lfd: 浮動小数点数を扱う場合


  • ldu: Load doubleword with update.


  • std: Store doubleword.


  • stdu: Store doubleword with update.


  • lbzu: レジスタの参照先+オフセットから1バイト分をレジスタに読み込み、レジスタの参照先をオフセット分だけ進める。


  • stbu: レジスタの参照先+オフセットの場所にレジスタの内容を1バイト分書き込み、レジスタの参照先をオフセット分だけ進める。


その他の命令



  • sc: システムコール。


参考文献