gpt4 book ai didi

assembly - 16位及更高版本的x86汇编乘法和除法指令操作数

转载 作者:行者123 更新时间:2023-12-04 03:22:43 24 4
gpt4 key购买 nike

我对x86汇编中的乘法和除法运算如何工作感到困惑。例如,下面的代码似乎不太困难,因为它处理的是8位。

8位乘法:

; User Input:
; [num1], 20
; [num2] , 15

mov ax, [num1] ; moves the 8 bits into AL
mov bx, [num2] ; moves the 8 bits into BL

mul bl ; product stored in AX

print ax

但是,当您想将两个16位数字相乘时会发生什么?如何将两个16位数字相乘,就像使用8位数字一样?

我对值将存储在哪些寄存器中感到困惑。它们将存储在AL和AH中,还是仅将16位数字存储在AX中。为了表明我的意思:
; User Input:
; [num1], 20
; [num2], 15

mov eax, [num1] ; Does this store the 16-bit number in AL and AH or just in AX
mov ebx, [num2] ; Does this store the 16-bit number in BL and BH or just in BX

mul ??? ; this register relies on where the 16-bit numbers are stored

print eax

有人可以详细说明乘法和除法的工作原理吗? (特别是16位和32位数字?如果值存储在较低的AL和AH中,我是否需要旋转位?

还是可以简单地将 mov num1num2分别转换为 axbx,然后将它们相乘以获得 eax的乘积?

最佳答案

快速浏览documentation可以看到MUL有4种可能的操作数大小。输入和输出汇总在一个方便的表中:

------------------------------------------------------
| Operand Size | Source 1 | Source 2 | Destination |
------------------------------------------------------
| Byte | AL | r/m8 | AX |
| Word | AX | r/m16 | DX:AX |
| Doubleword | EAX | r/m32 | EDX:EAX |
| Quadword | RAX | r/m64 | RDX:RAX |
------------------------------------------------------

关于assembly - 16位及更高版本的x86汇编乘法和除法指令操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9794416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com