2

それで、言語を学び理解しようとしている友人から、アセンブリに関する質問を受けました。彼は尋ねた:

次のレジスタ値があるとします。

D0: 364B 421E
D1: F3FC 9066

命令の実行後:

cmp.w    D0,D1

CCR の結果の値は次のようになります。

N:    Z:    V:    C:

そして、次の各分岐が発生するかどうか:

BLO    <Label>     Yes or No?

BVC    <Label>     Yes or No?

BGE    <Label>     Yes or No?

BMI    <Label>     Yes or No?

BLT    <Label>     Yes or No?

BCS    <Label>     Yes or No?

誰かがそれを理解するのを手伝ってくれませんか。彼に説明すると、概念と答えの理解を深めることができます。ありがとうございました。

4

2 に答える 2

4

概念を現代の用語にマッピングすると役立つ場合があります。C フラグは符号なし演算に対応し、N および V フラグは符号付き演算に対応します。Z フラグは両方に有効です。

分岐命令は、『 M68000 Programmer's Reference Manual』の表 3-19 に詳しく説明されています。表にいくつかのタイプミスがあることに注意してください。

符号なし算術演算には、次のブランチを使用します。

>   BHI
<=  BLS
>=  BCC/BHS
<   BCS/BLO

符号付き演算には、次のブランチを使用します。

>=  BGE
<   BLT
>   BGT
<=  BLE

そして、これらは両方で機能します:

==  BEQ
!=  BNE

最後に、BVS/BVC ペアがあります。オーバーフローが発生すると、V フラグが設定されます。つまり、結果の符号ビットは、入力の符号ビットに従っていません。たとえば、正の数から負の数を引くと、常に正の数になります。

于 2012-11-28T23:49:52.983 に答える
3

ccrフラグを使用すると、オーバーフローとキャリーを除いてほとんどが自明ですが、このhttp://teaching.idallen.com/dat2343/10f/notes/040_overflow.txtによれば、それらを理解できるはずです

キャリーフラグ

2 進数/整数演算でキャリー フラグをオンにする規則は 2 つあります。

  1. キャリー フラグは、2 つの数値の加算によって、加算された最上位 (左端) ビットのキャリー アウトが発生した場合に設定されます。

    1111 + 0001 = 0000 (キャリーフラグがオン)

  2. キャリー (ボロー) フラグは、2 つの数値の減算で、減算される最上位 (左端) ビットへのボローが必要な場合にも設定されます。

    0000 - 0001 = 1111 (キャリーフラグがオン)

それ以外の場合、キャリー フラグはオフ (ゼロ) になります。* 0111 + 0001 = 1000 (キャリー フラグがオフ [ゼロ]) * 1000 - 0001 = 0111 (キャリー フラグがオフ [ゼロ])

符号なし演算では、キャリー フラグを監視してエラーを検出します。符号付き演算では、キャリー フラグは何も意味を持ちません。

オーバーフロー フラグ

2 進数/整数演算でオーバーフロー フラグをオンにする規則は 2 つあります。

  1. 符号ビットがオフの 2 つの数値の合計が符号ビットがオンの結果の数値を生成する場合、「オーバーフロー」フラグがオンになります。

    0100 + 0100 = 1000 (オーバーフローフラグがオン)

  2. 符号ビットがオンの 2 つの数値の合計が、符号ビットがオフの結果の数値を生成する場合、「オーバーフロー」フラグがオンになります。

    1000 + 1000 = 0000 (オーバーフロー フラグがオン)

それ以外の場合、オーバーフロー フラグはオフになります。* 0100 + 0001 = 0101 (オーバーフロー フラグがオフ) * 0110 + 1001 = 1111 (オーバーフロー フラグがオフ) * 1000 + 0001 = 1001 (オーバーフロー フラグがオフ) * 1100 + 1100 = 1000 (オーバーフロー フラグがオン)オフ)

オーバーフロー フラグがオンかオフかを判断するには、3 つの数値の符号ビット (一番左) を確認するだけでよいことに注意してください。

2 の補数 (符号付き) 演算を実行している場合、オーバーフロー フラグがオンになっている場合は、答えが間違っていることを意味します - 2 つの正の数を足して負になったか、2 つの負の数を足して正になったということです。

符号なしの算術演算を行っている場合、オーバーフロー フラグは意味がないため、無視する必要があります。

于 2012-11-29T10:51:33.467 に答える