Размеры регистров и данных

Предположим, в программе, написанной в 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'

Скриншот

→ Ссылка