assembly - 防止 AX 寄存器被 DIV 指令破坏

标签 assembly division multiplication x86-16 emu8086

我正在尝试在汇编中解决这些简单的乘法和除法运算。

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/

相关文章:

performance - 我如何故意从主内存与缓存中读取?

c++ - 模拟定点除法/乘法

arrays - Swift 中复杂向量的乘法

mysql - MySQL中样本之间的划分

assembly - 有符号整数相除后结果错误

Java 无符号除法不强制转换为长?

c - C 中的变量乘法?

linux - 等待用户输入而不回车,linux x86 汇编器

assembly - 为什么x86 movsd导致三重故障异常?

assembly - 整数溢出问题