【问题标题】:16 bit multiplication using 8085 microprocessor使用 8085 微处理器进行 16 位乘法运算
【发布时间】:2018-02-25 06:28: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在这里完成?请任何人都可以解释一下。谢谢!

【问题讨论】:

    标签: assembly 8085 machine-instruction


    【解决方案1】:

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

    DCX  D
         MOV  A,E
         ORA  D
         JNZ  NEXT
    

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        相关资源
        最近更新 更多