在x86汇编中乘以3个数字

问题描述 投票:0回答:1

所以这里的数字是

a = 234234  
b = 2394729  
c = 12323  
a*b*c = 6912302836717278  

但我得到了这样的结果:3945371358.我想我必须使用LONG,因为它超过了int的限制,但我不知道怎么做,因为在x86汇编中没有long,我必须改变什么?

我想我必须使用long,因为它是超过int的限制,但我不知道如何,因为在汇编x86没有long,我必须改变什么?先谢谢你

%include "io.inc"
section .bss
a resd 1
b resd 1
c resd 1
section .text
global CMAIN
CMAIN:
    mov ebp, esp; for correct debugging
   xor eax,eax
    GET_UDEC 4,a
    GET_UDEC 4,b
    GET_UDEC 4,c
    mov eax,dword[a] 
    mov ebx,dword[b] 
    imul ebx
    mov ecx,dword[c]
    imul ecx
    PRINT_UDEC 4, eax
    xor eax, eax
    ret
assembly x86 int multiplication sasm
1个回答
2
投票

在你的例子中,确实将两个最小的值相乘会得到一个32位的数字,但也仅仅是这样。你不能假设总是这样。所以你有两个选择。

  • 手工实现64x64位的乘法,使用教科书上的乘法。
  • 构建一个64位的应用程序。那么你就可以使用64位 rax 等,而不是32位 eax.
© www.soinside.com 2019 - 2024. All rights reserved.