使用 printf 在 32 位 x86 上打印 XMM 寄存器

问题描述

我正在尝试打印存储在 XMM1 中的值 (double)。为了让事情更简单,我决定使用 printf。当我编译 32 位时,我可以将 printf 的参数放在堆栈上。所以我想做:

push    xmm1
mov     al,1
call    printf

当然不行。所以现在我的问题是如何正确地做到这一点? 例如 here 有一行 mov rax,12345,问题是 NASM 不会让我这样做,因为它声称它不适用于 32 位。即使我将代码更改为 64 位,我仍然收到此警告。

[EDIT1]
现在我想出了这样的事情:

        sub     esp,16
        movdqu  oword [esp],xmm1
        push    format
        call    printf

好消息是,它可以编译但不打印任何内容...

[EDIT2]
对于任何想知道的人,这是工作版本:

        movdqu  oword [esp],xmm1
        push    format
        call    printf

其中格式是具有格式类型等的字符串

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...