Объединение строк из регистров и их печать

Я пытаюсь вызвать cpuid и распечатать вывод из EBX, ECX и EDX на консоль, но вместо этого он печатает пустую строку

вот мой код:

.586 

.model flat,stdcall 

option casemap:none 

include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib  

.data
.data?
mybuffer byte 100 dup(?)

.code 
start: 

mov      eax, 0
cpuid

invoke   lstrcpy, addr mybuffer, ebx   
invoke   lstrcat, addr mybuffer, ecx
invoke   lstrcat, addr mybuffer, edx

invoke   GetStdHandle, STD_OUTPUT_HANDLE
invoke   WriteConsole, eax, addr mybuffer, sizeof mybuffer, NULL, NULL

invoke   ExitProcess, 0

end start

person szafir    schedule 11.05.2016    source источник
comment
strcpy и strcat ожидают указателей, но у вас действительно есть символы в регистрах. Вы можете просто сделать mov mybuffer, ebx; mov mybuffer+4, ecx; mov mybuffer+8, edx, и это должно сработать. Используйте 12 вместо sizeof mybuffer для печати.   -  person Jester    schedule 11.05.2016
comment
Я сделал, как вы сказали, но получил ошибку неверных операндов инструкции в каждой mov строке. Правильно ли объявление mybuffer?   -  person szafir    schedule 11.05.2016
comment
Может, попробуй сменить его на dword, не знаю о masm. Также попробуйте использовать скобки, такие как mov [mybuffer+4], ecx или даже mov dword ptr [mybuffer+4], ecx.   -  person Jester    schedule 11.05.2016
comment
Спасибо, dword заставил это работать.   -  person szafir    schedule 11.05.2016