我正在尝试在汇编中解决这些简单的乘法和除法运算。
5*4 + 35/7
我做到了
mov al,5
mov bl,4
mul bl
mov ax,35
mov bl,7
div bl
AX 寄存器中我以前的乘法值被新的除法结果覆盖。我该如何解决这个问题?
最佳答案
My previous value for multiplication in the AX register is overwritten with a new result from division. How do I fix this?
很简单。将乘法的结果放在一个额外的寄存器中(我使用了 DX
),计算表达式的下一项,最后将两个结果相加。重要的是要注意商只在AL
寄存器中,所以你需要在做加法之前清除AH
寄存器! (示例“35/7”中使用的数字在 AH
中产生余数 0,但当被要求编写程序时,您不应该指望它!)
mov al,5
mov bl,4
mul bl ; -> Result is in AX
mov dx, ax
mov ax,35
mov bl,7
div bl ; -> Result is in AL
mov ah, 0
add ax, dx ; -> Final result is in AX
关于assembly - 防止 AX 寄存器被 DIV 指令破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35098945/