鱼C论坛

 找回密码
 立即注册
查看: 1608|回复: 5

[已解决]mul乘法

[复制链接]
发表于 2023-8-11 18:00:03 | 显示全部楼层
是的,你的理解是正确的。

在x86汇编语言中, mul 指令用于无符号乘法操作。它将一个无符号操作数与累加器( AX 、 EAX 或 RAX )中的值相乘,并将结果存储在累加器中。

当使用 mul 指令时,乘积的低位部分将存储在累加器的低位寄存器中( AL 、 AX 、 EAX 或 RAX ),而乘积的高位部分将存储在累加器的高位寄存器中( AH 、 DX:AX 、 EDX:EAX 或 RDX:RAX )。

在你的代码中,第一次执行 mul bx 后,乘积的低位部分存储在 AX 中,而乘积的高位部分存储在 DX 中。

然后,你执行了第二次 mul bx 操作。这次乘积的低位部分将再次存储在 AX 中,但是乘积的高位部分将被忽略,因为你没有指定存储高位部分的寄存器。这意味着第二次乘积的高位部分将覆盖掉第一次乘积的高位部分。

如果你想保留第一次乘积的高位部分,你可以将其存储在另一个寄存器中,例如 DX ,然后在第二次乘法之后将其与第二次乘积的高位部分相加。

以下是修改后的代码示例:

  1. ;计算N的3次方
  2. cube:
  3.     mov ax, bx
  4.     mul bx
  5.     mov dx, ax ; 将第一次乘积的高位部分存储在DX中
  6.     mul bx
  7.     add dx, ax ; 将第一次乘积的高位部分与第二次乘积的高位部分相加
  8.     ret
复制代码


这样,你就可以正确地计算N的立方了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-23 02:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表