我尝试在汇编代码中使用printf
来打印一些浮点数(准确地说是双精度数),但遗憾的是它不起作用。
代码(英特尔语法)
global start
extern exit
extern printf
section .data
x dq 3.14
format db '%f',0
section .text
start:
default rel ;64-bit uses realtive addressing
mov rbp, rsp
and rsp, 0xFFFFFFFFFFFFFFF0 ;stack alignment
movsd xmm0, [x]
lea rdi, [format]
mov rax, 1
call printf
mov qword[rsp], 0
call exit
构建我使用
nasm seven.asm -fmacho64 --prefix _
ld seven.o -o seven -arch x86_64 -lc -e _start -macosx_version_min 10.6
输出只是0.000000
我 Macbook Pro 2013 , Intel Core i5 处理器, OS X El Capitan
感谢你们,答案是nasm
错误,它出现在2.11.06-2.11.08版本的某个地方,导致数据部分中的任何内容被覆盖,除了最后一条指令。并且洗脱液将恢复到2.11.05。