簡體   English   中英

在匯編 x86 中乘以 3 個數字

[英]multiplying 3 numbers in assembly x86

所以這里是數字

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

但我得到了這個結果:3945371358。

我想我必須使用 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

確實,將示例中的兩個最小值相乘會得到一個 32 位的數字,但僅此而已。 你不能假設情況總是如此。 所以你有兩個選擇:

  • 使用教科書乘法手動實現 64x64 位乘法;
  • 構建一個 64 位應用程序。 然后您可以使用 64 位rax等代替 32 位eax

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM