如何在NASM中减去两个数字并获得负数?

时间:2017-02-12 05:59:35

标签: windows gcc assembly x86 nasm

我有这个代码应该减去两个数字,一个浮点数(10.25)和一个整数(15):

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

如何获得我期望的结果?

1 个答案:

答案 0 :(得分:1)

解决方案是:

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,您的答案就是解决方案。 ^ _ ^