and


論理積を行います。(And)

[指定形式]

-

and reg1, reg2

-

and imm, reg2

 

immに指定できるものを次に示します。

-

32ビット幅までの値を持つ絶対値式

-

相対値式

[機能]

-

“and reg1, reg2”の形式

第1オペランドに指定したレジスタ値と,第2オペランドに指定したレジスタ値の論理積をとり,結果を第2オペランドに指定したレジスタに格納します。

-

“and imm, reg2”の形式

第1オペランドに指定した絶対値式,または相対値式の値と,第2オペランドに指定したレジスタ値の論理積をとり,結果を第2オペランドに指定したレジスタに格納します。

[詳細説明]

-

“and reg1, reg2”の形式の命令に対し,アセンブラでは,機械語命令のand命令が1つ生成されます。

-

“and imm, reg2”の形式でimmに次のものを指定した場合,アセンブラでは,命令展開が行われ,1つ,または複数個の機械語命令が生成されます。

(a)

0

and     0, reg
and     r0, reg

(b)

1〜65535の範囲の絶対値式

and     imm16, reg
andi    imm16, reg, reg

(c)

-16〜-1の範囲の絶対値式

and     imm5, reg
mov     imm5, r1
and     r1, reg

(d)

-32768〜-17の範囲の絶対値式

and     imm16, reg
movea   imm16, r0, r1
and     r1, reg

(e)

上記の範囲を越える絶対値式

immの値の下位16ビットがすべて0の場合

and     imm, reg
movhi   HIGHW(imm), r0, r1
and     r1, reg

上記以外の場合

and     imm, reg
mov     imm, r1
and     r1, reg

(f)

!label,または%labelを持つ相対値式

and     !label, reg
andi    !label, reg, reg
and     %label, reg
andi    %label, reg, reg

(g)

sdata/sbss属性セクションに定義を持つラベルの$labelを持つ相対値式

and     $label, reg
movea   $label, r0, r1
and     r1, reg

(h)

#label,またはlabelを持つ相対値式,およびsdata/sbss属性セクションに定義を持たないラベルの$labelを持つ相対値式

and     #label, reg
mov     #label, r1
and     r1, reg
and     label, reg
mov     label, r1
and     r1, reg
and     $label, reg
mov     $label, r1
and     r1, reg

機械語命令のand命令は,オペランドにイミーディエトをとりません。

[フラグ]

CY

OV

0

S

演算結果のワード・データのMSBが1の場合1,そうでない場合0

Z

結果が0になった場合1,そうでない場合0

SAT