0

彼はこれらの質問をしました。13は、明らかにサンプルセットの中で最大のデータです。13がD0に格納された後、別の数値がCCRと比較されたときのCCRの状態はどうでしたか(5ビットを指定し、どのビットがトリガーされたかを示します)。b。最後のデータ(0)がD1レジスタに移動された後のCCRの状態はどうでしたか。

*    

ORG $400  
MOVEA.L #DATA,A0  
CLR.B   D0  
NEXT    MOVE.B (A0),D1  
BEQ EXIT  
CMP.B   D0,D1  
BLE EndTest  
MOVE.B  D1,D0  
EndTest ADDA.L  #1,A0  
BRA NEXT    
EXIT    STOP    #$2700  
*         
ORG $1000  
Data    DC.B    12,13,5,6,4,8,4,10,0      
END $400      

コンパイルしましたが、easy68kに5ビットが表示されません。ccrがフラグビットで構成されていることは知っていますが、どうしたらよいかわかりません。

4

1 に答える 1

1

このループは、次の C コードと同等です。

char *byte = data;
char cur, max = 0;

while ((cur = *byte++))
    if (cur > max) max = cur;

つまり、ループは常にすべての値を反復し、最後にゼロを見つけると終了します。つまり、 をヒットするまでに、前のロードの結果をテストし、それがゼロであることが判明しEXITたチェックを通過したことを意味します。BEQ EXITCCR は 0x??04 になります。つまりZ、ゼロ フラグ セットのみがBEQチェック対象となります。

テストに関する限りBLE、これはフラグの複雑なチェックです。Motorola の 68k リファレンス マニュアルの表 3.19 によると、これは/または 0Z || (N && !V) || (!N && V)の相互排他性(等しい部分) をテストするため、フラグのいくつかの組み合わせによって、その分岐が行われる可能性があります。あなたの特定のデータについては、前の値が 12 だったとすると、最終的にセットになると思います。つまり、 (ほとんどの CPU ではCCR 値は破棄による減算を行い、12-13 は負です)。NVN0x??08CMP

m68k アセンブリに関しては、このウィキブックが良い入門書です。条件分岐 / CCR フラグ テストについて説明していますが、上記のトリッキーな部分は省略しています ...

于 2011-02-17T09:47:55.497 に答える