首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用8085微处理器实现16位乘法

用8085微处理器实现16位乘法
EN

Stack Overflow用户
提问于 2017-09-16 12:46:27
回答 2查看 5.8K关注 0票数 0

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

代码语言:javascript
复制
   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?有谁能解释一下吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-11-12 13:20:17

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

代码语言:javascript
复制
DCX  D
     MOV  A,E
     ORA  D
     JNZ  NEXT

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

此时,ORA指令将设置零标志,循环将退出。所以ORA被用来显式地设置Zero标志。

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

票数 2
EN

Stack Overflow用户

发布于 2017-09-16 13:06:06

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

D和E寄存器保存循环数的倒计时。整个逻辑对我来说很难理解:自从我使用8085以来已经30+年了,所以我需要look up most of the instructions来解开这个逻辑。但希望这能回答你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46250135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档