2009-07-29 18 views
2

私はいくつかのARMアセンブリを検索していましたが、EOR/XORとANDとCとOフラグがセットされています。それはどのように機能するのですか?彼らはいつも清算されていますか?彼らはどのような条件を設定していますか?EOR/XORとANDでANDキャリーフラグ

答えて

4

ARMアセンブラを続行する場合は、「ARMアーキテクチャリファレンスマニュアル」であるARM ARMのコピーが必要です。多くのバージョンがあり、それぞれに独自の「機能」があります。私はあなたができる限り多くを収集することをお勧めしますが、別の話です。無料で電子コピーを入手するにはいくつかの方法があります。いずれにしても、

および ARMでは、ANDの代わりにANDを使用するSビットセットが必要です。親指モードでは常にANDSを使用していますが、たとえばガスは親指モードでANDSを受け入れない(ただし、ANDではなく逆アセンブル)。

If S==1 and Rd == R15 then 
    CPSR=SPSR 
else if S==1 
    N Flag = Rd[31] 
    Z Flag = if Rd == 0 then 1 else 0 
    C Flag = shifter_carry_out 
    V flag = unaffected 

EORは同じであり、それはそれは醜いすごいフラグに

+0

を来るとき、私は右のそれをフォーマットdidntの。とにかく引用符なしに "アームアーム"のgoogle検索と最初のヒットはarm.comから直接アームアームの回転私は –

+0

私はあなたのための書式を修正。テキストを選択し、バイナリルッキングボタンを押します。 –

2

操作後に結果を任意にシフトできることを思い出してください。キャリーフラグは、バレルシフタからのキャリーアウトに基づいて設定されます。オーバーフローフラグは決して影響を受けません。

4

通常のAND/EORはキャリーフラグとオーバーフローフラグをまったく設定していないと思います。 ANDSおよびEORSバリアント(AND/EORとセット)は、キャリーを設定できますが、右側がシフトされたオペランドである場合のみです。これらのどちらもオーバーフローフラグにはまったく影響しません。例えば

ANDS R0,R1,R2, LSR #1 

はR2のB0に応じてキャリーをセットします。ビットが1の場合(すなわち、R2が奇数の場合)、キャリーが設定される。

詳細については、here(第3章、命令セット)を参照してください。

3

他のポスターと同様に、Cフラグは、ソースレジスタの1つに任意に適用されるシフトに基づいて更新されます。操作の前。

V(オーバーフロー)フラグは、これらの命令の影響を受けません。

結果が正確にゼロの場合はZフラグが設定され、2の補数の整数(上位ビットが1の場合)の場合は結果が負の場合はNフラグが設定されます。

関連する問題