printf float in nasm assembly 64

您所在的位置:网站首页 汇编movss printf float in nasm assembly 64

printf float in nasm assembly 64

2023-04-25 01:33| 来源: 网络整理| 查看: 265

我做错了什么

第一个:请确保您使用正确的呼叫约定(堆栈、寄存器、从左到右、从右到左等).如果你的程序确实打印了一个浮点数,虽然它不是你所要求的那个然后至少格式字符串被正确地传递(或者你运气很好,printf在正确的位置找到了格式字符串的地址,即使你没有把它的地址放在那里)。第二个:你要打印的数字...是float还是double?rs定义的是一个四字值(64位),但float是32位。所以,如果第一个点已经检查过了,没有问题,我建议你使用"%lf"作为格式,而不是"%f"。

顺便问一句:你为什么把RAX = 0?这是什么意思,关于调用printf?更新:这可能对你有帮助。一个愚蠢的程序(f.c)的反汇编:

#include main() { float x; x = 1.6; printf ("%f\n", x); }

$ gcc -c -S f.c$ less f.s

.file "f.c" .section .rodata .LC1: .string "%f\n" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 movq %rsp, %rbp .cfi_offset 6, -16 .cfi_def_cfa_register 6 subq $16, %rsp movl $0x3fcccccd, %eax movl %eax, -4(%rbp) movss -4(%rbp), %xmm0 cvtps2pd %xmm0, %xmm0 movl $.LC1, %eax movq %rax, %rdi movl $1, %eax call printf leave


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3