Размеры регистров и данных
Предположим, в программе, написанной в 64-битном режиме, используется переменная размера dword. Предположим, надо вывести ее на экран. Как можно перекинуть ее в rdx без вреда для здоровья? Приведенный ниже код выводит 0. Исправить это у меня получается только заменив переменную на qword.
format PE64 console
include 'E:\Fresh\include\win64a.inc'
entry main1
section '.data' data readable writeable
arg dd ?
msg db '%lf',10,0
section '.text' code readable executable
main1:
and rsp,-16
mov [arg],1.0
mov edx,[arg]
mov rcx,msg
call [printf]
mov rcx,0
call [ExitProcess]
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Вариант с промежуточной конвертацией из float в double:
format PE64 console
include 'include\win64a.inc'
entry main1
section '.data' data readable writeable
arg dd ?
buf dq ?
msg db '%lf',10,0
section '.text' code readable executable
main1:
and rsp,-16
mov [arg], 1.0
fld [arg]
fst [buf]
mov rdx, [buf]
mov rcx, msg
call [printf]
mov rcx,0
call [ExitProcess]
section '.idata' import data readable
library kernel, 'kernel32.dll', \
msvcrt,'msvcrt.dll'
import kernel,\
ExitProcess, 'ExitProcess'
import msvcrt,\
printf,'printf'
