masm64 как в одной строке вывести значения разных типов с помощью функции printf

masm64 как в одной строке вывести значения разных типов с помощью функции printf ?

;подключаем библиотеки
includelib kernel32.lib
;подключаем библиотеку C
includelib msvcrt.lib 
;для совместимости старых функций C
includelib ucrt.lib
;для использования старых функций ввода-вывода
includelib legacy_stdio_definitions.lib
;=====

;подключаем функции
extern ExitProcess: PROC
extern SetConsoleOutputCP: PROC
extern getchar: PROC
extern printf: proc
;=====

.data

 a qword 15
 b qword 255

 ;13 или \r - перевод каретки
 ;10 или \n - перевод строки
 ;0  или \0 - нулевой байт
 ;%d - формат вывода целого числа
 msg byte "%d %d", 13, 10, 0 

.code
main proc
 
 mov rax, 65001
 call SetConsoleOutputCP

 ;аргументы передаются в функцию в обратном порядке
 mov rdx, b
 mov rcx, rdx
 mov rdx, a
 mov rcx, rdx
 mov rcx, offset msg
 call printf
 
 call getchar
 
 mov rax, 0
 call ExitProcess

main endp
end

ответ получается такой

15 -1607011040


Ответы (1 шт):

Автор решения: MBo

Три параметра функции передавать в X64 Calling convention:

mov r8, b
mov rdx, a
mov rcx, offset msg
call printf

У вас b вообще пропадало

→ Ссылка