gpt4 book ai didi

assembly - 将 64 位常量移动到 x86 程序集中的内存中

转载 作者:行者123 更新时间:2023-12-04 23:14:40 26 4
gpt4 key购买 nike

我正在使用 Intel x64 程序集、NASM 编译器,试图将“0x4000000000000000”常量移动到内存中,在 ieee 754 标准 double 数中应该等于 2.0。

我正在使用的代码是:

%define two 0x4000000000000000 

section .text

foo:

push rbp
mov rbp, rsp

mov QWORD [rdi], two

pop rbp
ret

编译这个抛出

warning: signed dword immediate exceeds bounds.



当我在 C++ 中打印值时,它显示“0”而不是“2”。

我已经找到了一种获得正确值(value)的方法,即:
mov r9, 0x4000000000000000
mov [rdi], r9

但我想知道是否有办法在不使用寄存器的情况下实现这一点。

顺便说一下,我用这个脚本编译代码:
#!/bin/bash
nasm -f elf64 -g -F dwarf vvp_asm.asm -o vvp_asm.o
g++ -c -m64 -std=c++11 main.cpp -o main.o
g++ -o main -m64 vvp_asm.o main.o

最佳答案

没有说明

    mov r/m64, imm64

你可以用
    mov dword [rdi], 0
mov dword [rdi+4], 0x40000000

或者
    and qword [rdi], 0
mov byte [rdi+7], 0x40

这只有 8 个字节(如果这很重要)。

关于assembly - 将 64 位常量移动到 x86 程序集中的内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46395630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com