使用8085微处理器进行16位乘法运算

时间:2017-09-16 04:46:27

标签: assembly 8085 machine-instruction

以下是用于将两个16位数相乘的汇编语言。

 app.factory('ProductsService', function($http) {
  function getProduct() {
    return $http.get('finalmsodetails.json').then(function(response) {
      console.log(response.data);
      return response.data;
    });
  }

  function modifyProduct() {
    this.getProduct().then(function(value) {
      console.log(value);
    });
  }
  return {
    getProduct: getProduct,
    modifyProduct: modifyProduct
  };
});

我不理解指令 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在这里完成?请任何人解释一下。谢谢!

2 个答案:

答案 0 :(得分:2)

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对是否为零。

答案 1 :(得分:0)

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

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