linux - 在 Linux 操作系统下使用 FASM 使用 XMM 寄存器进行求和

标签 linux assembly x86-64 fasm

使用 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

最佳答案

解决它:

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

关于linux - 在 Linux 操作系统下使用 FASM 使用 XMM 寄存器进行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135094/

相关文章:

linux - 在 GUI 关闭的情况下访问计算机

assembly - x86 CMP 指令差异

linux - 多线程写入磁盘与使用互斥锁写入内存

linux - 我应该在系统更新后重建依赖库吗?

assembly - 将段从 Ring0(内核)更改为 Ring3(用户)会导致段错误

assembly - 为什么要向标准输出设备写入这么多字节?

linux - 如何在 Linux 中使用 NASM 汇编获取系统时间而不使用从 C 导出的函数?

assembly - 从使用x87 FPU的64位汇编函数返回 float

assembly - 如何遍历汇编中的字符串,直到到达null? (strlen循环)

java - GIJ(Java 的 GNU 解释器)是否足够稳定以用于商业用途?