0

我之前发布了询问如何为这个程序定义十六进制常量的帖子,有人帮我解决了这个问题,现在我试图弄清楚这个程序是否运行正确。

该程序旨在计算逻辑表达式 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 回答