命令セットアーキテクチャを考える7 (論理演算命令)
続いて、論理演算命令を定義します。
[論理演算命令]:6命令
and [b|hw|w|dw] Rs,{Rt|=imm},Rd
・RsとRtの内容をビット単位に論理積をとり、Rdに格納する。
・byteモードの場合は下位8bit、half-wordモードの場合は下位16bit、wordモードの場合は下位32bitのみが演算に使用され、Rdの下位ビットに格納される。使用されない上位ビットは変更されない。
・演算結果を符号なし付き二進数とみなし、CCR0のcondition code bitがセットされる。(正/零/負など)
・Immidiateモードの場合、Rtの代わりにimm(10bit)を指定する。immは、符号なし付き2進数として扱われ、必要に応じて拡張が行われる。
・SIMDモードの場合、レジスタ内のデータを8bit*8、16bit*4、32bit*2のデータとして演算に使用される。
・SIMDモードには、double-word指定はできない。(エラーにはならないが、64bitデータが一つしかないので普通のand命令と同じになる)
・SIMDモードの場合、condition code bitは変化しない。
・SIMDモードで即値指定の場合、第三オペランドは8bit/16bit/32bitに符号拡張されたものが必要回数繰り返しされたものと見なされる。
or [b|hw|w|dw] Rs,{Rt|=imm},Rd
・RsとRtの内容をビット単位に論理和をとり、Rdに格納する。
・その他はand命令と同様である。
xor [b|hw|w|dw] Rs,{Rt|=imm},Rd
・RsとRtの内容をビット単位に排他的論理和をとり、Rdに格納する。
・その他はand命令と同様である。
hand [b|hw|w] Rs,Rd
・ニーモニックの先頭の "h"は、horizontalを意味する。
・byteモードの場合、Rsのレジスタ内容を8bit×8個の論理積を計算し、Rdの下位8bitに格納する。
・同様に、half-wordモードの場合、16bitデータ×4個、wordモードの場合、32bitデータ×2個の論理積を計算する。
・演算結果を符号なし二進数とみなし、CCR0のcondition code bitがセットされる。(正/零など)
hor [b|hw|w] Rs,Rd
・論理和であることを除いて、handと同様。
hxor [b|hw|w] Rs,Rd
・排他的論理和であることを除いて、handと同様。
[擬似命令]
*not [b|hw|w|dw] Rs,Rd xor Rs,R0,Rdxor Rs,=-1,Rd
・ゼロレジスタ即値-1(all bit on)との排他的論理和をとることで、論理反転を求める。
# notの擬似命令を間違えていたので、修正しました。即値の符号付き拡張が必要になったので、即値の扱いを符号付き2進数に改めました。それにともない、CCRの設定のための演算結果によるRdの内容の解釈も符号付き2進数に改めました。
| 固定リンク
この記事へのコメントは終了しました。


コメント