以下是用于乘以两个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年以上了,因此我需要查找大多数说明以解开逻辑。但希望这可以回答您的问题。