Intel x64 어셈블리, NASM 컴파일러에서 "0x4000000000000000"상수를 ieee 754 표준 double에서 2.0과 같아야하는 메모리로 이동하려고합니다.x86 어셈블리의 메모리로 64 비트 상수 이동
내가 사용하는 코드는 다음과 같습니다 즉시 DWORD 서명 경계를 초과 :
%define two 0x4000000000000000
section .text
foo:
push rbp
mov rbp, rsp
mov QWORD [rdi], two
pop rbp
ret
이이
경고가 발생 컴파일.
C++에서 값을 인쇄 할 때 "2"대신 "0"이 표시됩니다.
나는 이미 올바른 값을 얻기의 방법, 발견했습니다
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
추천되는 방법이지만, 당신이 절대적으로 레지스터 피하기를 주장한다면, 당신은 물론 두 반쪽으로 저장할 수 있습니다. – Jester