2017-02-12 5 views
1

私は2つの数値を減算することになって、このコードは、フロート(10.25)及び整数(15)を有する:NASMで2つの数を減算して負の数を得る方法は?

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 

Iが得る出力である:

1092878336.000000

私は期待し

出力は次のようになります。

-4.750000

私が期待した結果を得るには?

+4

すでにメモリにfloatとして保存されている 'num2'を読み込むために' fild'を使っています。 'sub esp、8' ' fld dword [num2] ' ' fisub dword [num1] ' ' fstp qword [esp] 'のようなものを探しているかもしれません。 FISUBは[num1]で整数値をとり、これを拡張精度floatに変換し、すでに10.25を含むFPUスタックの先頭からその値を減算します。 –

+0

@MichaelPetchありがとう、私は '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は、あなたの答えは溶液でした。^_^

関連する問題