使用8085微处理器16位乘法



以下是用于乘以两个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?请任何人解释一下。谢谢!

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

DCX  D
     MOV  A,E
     ORA  D
     JNZ  NEXT

循环仅在D和E寄存器的内容为零时退出(因为0或0 = 0是a或产生零的唯一方法)。

此时,ORA指令将设置零标志,并且循环将退出。因此,ORA已用于明确设置零标志。

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

ORA D用作测试指令。从逻辑上讲,它是用D寄存器或D寄存器的累加器。如果结果为零,则将退出循环。否则,jnz的指令将其重新输入循环。

d和e寄存器持有循环数量的倒计时。整体逻辑对我来说很难遵循:自从我使用8085以来已经30年以上了,因此我需要查找大多数说明以解开逻辑。但希望这可以回答您的问题。

相关内容

  • 没有找到相关文章

最新更新