0

このプログラムの 16 進定数を定義する方法を以前に投稿しましたが、誰かが助けてくれました。今、このプログラムが正しく実行されているかどうかを調べようとしています。

このプログラムは、論理式 X'Y + X'Z + YZ を計算し、結果を D0 に入れることを目的としています。プログラムが完了したら、D0 の内容をバイナリで表示する必要があります。これが私が持っているものです(ここではアライメントが少しごちゃごちゃしていますが、アセンブラ(EASy 68K)でアライメントされています):

START:  MOVE    X,D0
    NOT D0
    MOVE    D0,D1
    MOVE    Y,D2
    AND D2,D0
    AND Z,D1
    AND Z,D2
    OR  D1,D0
    OR  D2,D0
EXIT:   BRA EXIT
X:  DC  $000F
Y:  DC  $0033
Z:  DC  $0055

これは、それぞれのデータレジスタで最終的に得られるものです。

D0: 00000071 D1: 00000050 D2: 00000011

結果がバイナリで表示されることになっているという事実を無視して...これは論理式であり、AND と OR のみを使用しているため、D0 の結果は 1 か 0 のどちらかではないでしょうか? X、Y、および Z はすべてゼロ以外の定数であるため、式は 1 (YZ=1) と評価されます...プログラムでエラーが発生しましたか? それとも私の理解がずれていますか?

ありがとう

4

1 に答える 1

3

論理式は、レジスタ内のすべてのビットに対して同時に実行されます。

たとえば C 言語では、整数 1、2、7、および -12313 は、if (a) printf("True"); のコンテキストではすべて等しいと見なされます。そうでなければprintf( "False");

また、同じことが if (a || b) printf("a がゼロではない、または b がゼロではない、または両方ともゼロではない"); にも当てはまります。

ただし、ビットごとの論理演算の場合

00000000001 (binary) == 1 in decimal  
00000000010 (binary) == 2 in decimal  
------------------------------------  
00000000011 = 1 OR 2 == 3 in decimal
00000000000 = 1 AND 2 == 0 in decimal
于 2012-10-29T21:58:44.233 に答える