首页 > 解决方案 > 在 Linux OS 下使用 FASM 使用 XMM 寄存器求和

问题描述

使用 fasm 使用 xmm 寄存器求和 - linux:

$./fasm file.asm
$ gcc -s file.o -o file -lm

结果应该是 14,但我得到了7.000000000000000000000000000000

这是源代码:

format elf64
extrn printf

section '.data' writeable align 16
rad dq 7.0
fmt db "%.30lf",0ah,0

section '.text' executable align 16
public main
main:
    push rbp
    mov rbp,rsp
    pxor xmm0,xmm0
    movsd xmm0,[rad]
    pxor xmm2,xmm2
    movsd xmm2,[rad]
    addsd xmm2,xmm0
    mov rax,1
    mov rdi,fmt
    call printf

    mov rsp,rbp
    pop rbp
    ret

标签: linuxassemblyx86-64fasm

解决方案


解决这个问题 :

format elf64
extrn printf

section '.data' writeable align 16
rad dq 7.0
fmt db "%.30lf",0ah,0

section '.text' executable align 16
public main
main:
    push rbp
    mov rbp,rsp
    pxor xmm0,xmm0
    movsd xmm0,[rad]
    movsd xmm2,[rad]
    addsd xmm0,xmm2
    mov rax,1
    mov rdi,fmt
    call printf

    mov rsp,rbp
    pop rbp
    ret

推荐阅读