x86 asm 程序根据 x

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

我的任务是编写 x86 asm 代码,如果 x 是 <= -1; 0 if the absolute value of x is less than 1; (x^2 - 1) if x >= 1,则输出 (-x^2 + 1)。

这就是我想出的,第一个问题是在第一种情况下结果不是负面的。如果我输入 -3,结果是 8 而不是 -8。其次,如果 x 的值小于 1,例如0.5,它输出 -0.75 而不是 0.

我是组装的初学者,这让我有点难过,所以如果你能帮助我让它正常工作,我将非常感激。

代码如下:

extern printf, scanf
global main

section .data 
  in_fmt  db "%lf", 0
  out_fmt db "Result: %lf", 10, 0
  
  one dq 1.0
  minus_one dq -1.0

section .bss
  x resb 8
  f resb 8
  temp resb 8
  
section .text
main:
  mov rbp, rsp; for correct debugging
  ;scanf()
  mov rdx, x           
  mov rcx, in_fmt       
  sub rsp, 40            
  call scanf
  add rsp, 40
  
  fld qword[x]
  
  
  ;if x <= -1
  fld qword[minus_one]
  fcomi
  jle case1
  
  fstp qword[temp]
  
  ;if |x| <= 1  fld qword[one]
  fcomi
  jle case2
  
  
  case3:
    fstp qword[temp]
    fmul qword[x]
    fsub qword[one]
    fstp qword[f]
    jmp print
  
  case2:
    mov qword[f], 0
    jmp print
  
  case1:
    fstp qword[temp]
    fmul qword[x]
    fmul qword[minus_one]
    fadd qword[one]
    fstp qword[f]
    
  print:
    mov rcx, out_fmt
    mov rdx, qword[f]
    sub rsp, 40
    call printf
    add rsp, 40
    
  xor rax, rax
  ret
assembly x86 nasm
© www.soinside.com 2019 - 2024. All rights reserved.