下面是将两个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?有谁能解释一下吗?谢谢!
发布于 2019-11-12 13:20:17
DCX指令递减寄存器对,不影响任何标志。另一方面,像ORA这样的逻辑指令可以设置标志。
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对是否为零。
发布于 2017-09-16 13:06:06
ORA D被用作测试指令。它在逻辑上将累加器与D寄存器ORing。如果结果为零,则退出循环。否则,后面的JNZ指令将重新进入循环。
D和E寄存器保存循环数的倒计时。整个逻辑对我来说很难理解:自从我使用8085以来已经30+年了,所以我需要look up most of the instructions来解开这个逻辑。但希望这能回答你的问题。
https://stackoverflow.com/questions/46250135
复制相似问题