以下是用于将两个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
在这里完成?请任何人解释一下。谢谢!
答案 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来解开逻辑。但希望这能回答你的问题。