2017-02-12 67 views
1

我有此代碼是應該兩個數的減法,浮子(10.25)和整數(15):如何減去兩個數字並在NASM中獲得負數?

extern _printf 
global _main 
section .bss 
    num1: resb 4 
    num2: resb 4 
section .data 
    format_number: db "%f", 10, 0 
section .text 
_main: 

    mov dword [num1], 15 
    mov dword [num2], __float32__(10.25) 

    sub esp, 8 
    fild dword [num2] 
    fsub dword [num1] 
    fstp qword [esp] 
    push format_number 
    call _printf 
    add esp, 12 

ret 

我得到的輸出是:

1092878336.000000

我期望的輸出是:

-4.750000

如何獲得我期望的結果?

+4

您正在使用'fild'加載已存儲在內存中的'num2'作爲float。您可能一直在尋找類似於'sub esp,8'的東西,'fld dword [num2]' 'fisub dword [num1]' 'fstp qword [esp]'。 FISUB在[num1]處將整數值轉換爲擴展精度浮點數,然後從已包含10.25 –

+0

@MichaelPetch的FPU堆棧頂部減去該值非常感謝,我不知道'fisub'。在我之前的問題中,我會閱讀你告訴我的教程。 –

回答

0

解決的辦法是:

extern _printf 
global _main 
section .bss 
    num1: resb 4 
    num2: resb 4 
section .data 
    format_number: db "%f", 10, 0 
section .text 
_main: 

    mov dword [num1], 15 
    mov dword [num2], __float32__(10.25) 

    sub esp, 8 
    fld dword [num2] 
    fisub dword [num1] 
    fstp qword [esp] 
    push format_number 
    call _printf 
    add esp, 12 

ret 

我得到的輸出是:

-4.750000

感謝@MichaelPetch,你的答案是解決方案。^_^