相关疑难解决方法(0)

82
推荐指数
7
解决办法
23万
查看次数

如何使用x86汇编语言将两个64位数相乘?

我该怎么办......

  • 乘以两个64位数

  • 乘以两个16位十六进制数

......使用汇编语言.

我只允许使用寄存器%eax,%ebx,%ecx,%edx和堆栈.

编辑:哦,我在x86
EDIT2 上使用ATT语法:不允许反编译成程序集...

x86 assembly

8
推荐指数
1
解决办法
2万
查看次数

16 位 x 32 位的汇编乘法 => 48 位

假设我想在汇编中将一个大数乘以另一个(可能很小)的数。大数(被乘数)DX:AX保存在BX. 该MUL指令仅对 进行操作AX。那么该怎么办DX呢?

例如,数字是0001:0000H(65536),我想将其乘以 2。

number     dw   0000h, 0001h
...
mov    ax, [number]
mov    dx, [number+2]
mov    bx, 2
mul    bx   ; it is ax*2 or 0000*2
Run Code Online (Sandbox Code Playgroud)

所以结果为零!对此有什么想法吗?

assembly bigint extended-precision x86-16

1
推荐指数
1
解决办法
1万
查看次数

8086 asm 中 64 位数字乘以 32 位数字

我什至在启动问题的解决方案时遇到问题。我曾尝试考虑乘法是重复加法算法,但无论我考虑什么算法,我似乎都专注于一个问题——8086 中的最大寄存器大小是 16 位。

data segment
num1 dw 0102h,0304h,0506h,0708h
num2 dw 0102h,0304h
res dw ?,?,?,?,?,?
data ends

code segment
assume CS:CODE, DS:DATA
start:
mov ax,DATA
mov DS,ax
Run Code Online (Sandbox Code Playgroud)

.....填写代码.......

在这一点上,我被卡住了。即使是轻微的代码提示或算法也将不胜感激。

algorithm assembly bigint extended-precision x86-16

0
推荐指数
1
解决办法
639
查看次数

在 8086 上将两个 32 位数字相乘得到一个 64 位数字(32x32 => 64 位与 16 位相乘)

我如何将汇编中的两个 32 位数字或一个 32 位与另一个 16 位相乘,有人知道算法吗?

data1 dw 32bit
data2 dw 32bit    
mov ax,data2
Mul data1
Run Code Online (Sandbox Code Playgroud)

assembly multiplication bigint x86-16

-1
推荐指数
1
解决办法
2602
查看次数