当前位置 : 主页 > 手机开发 > 无线 >

在x86汇编中将64位常量移动到内存

来源:互联网 收集:自由互联 发布时间:2021-06-11
我正在使用Intel x64汇编,NASM编译器,尝试将“0x4000000000000000”常量移动到内存,在ieee 754标准double中应该等于2.0. 我正在使用的代码是: %define two 0x4000000000000000 section .textfoo:push rbpmov rbp, r
我正在使用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”.

我已经找到了获得正确价值的方法,即:

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个字节(如果重要的话).

网友评论