0

以下是用于将两个 16 位数字相乘的汇编语言。

   LHLD 0002H ;DATA 1
   SPHL
   LHLD 0004H ;DATA 2
   XCHG
   LXI  H,0000H
   LXI  B,0000H
NEXT:
   DAD  SP
   JNC  LOOP
   INX  B
LOOP:
   DCX  D
   MOV  A,E
   ORA  D
   JNZ  NEXT
   SHLD 0006H ;LSB
   MOV  L,C
   MOV  H,B
   SHLD 0008H ;MSB
   HLT

我不明白指示ORA D。为什么ORing在这里完成?请任何人都可以解释一下。谢谢你!

4

2 回答 2

2

DCX 指令递减寄存器对而不影响任何标志。另一方面,像 ORA 这样的逻辑指令可以设置标志。

DCX  D
     MOV  A,E
     ORA  D
     JNZ  NEXT

只有当 D 和 E 寄存器的内容都为零时,循环才会退出(因为 0 OR 0 = 0 是 OR 产生零的唯一方法)。

此时 ORA 指令将设置零标志并退出循环。因此 ORA 已被用于显式设置零标志。

因此,它通过执行和设置标志A来临时检查 16 位 E:D 对是否为零。A = E|D

于 2019-11-12T05:20:17.373 回答
0

ORA D用作测试指令。它在逻辑上将累加器与 D 寄存器进行或运算。如果结果为零,则退出循环。否则,其后的 JNZ 指令将重新进入循环。

D 和 E 寄存器保存循环次数的倒计时。整体逻辑对我来说很难理解:我使用 8085 已经 30 多年了,所以我需要查看大部分说明来解开逻辑。但希望这能回答你的问题。

于 2017-09-16T05:06:05.723 回答