Решил разобраться в ассемблере(выбрал FASM тк просто всё работает из под коробки), в ходе написание "Hello World!" возник вопрос, а почему собственно не работаем имея следущий код,
entry main
include 'win64a.inc'
section '.data' data readable writeable
hello2 db 'hello world!',0
section '.bss' data readable writeable
StandardHandle rd 1
Written rd 1
section '.code' code readable writeable executable
main:
stdcall test_proc, 11
invoke ExitProcess, 0
proc test_proc, ms
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov [StandardHandle], eax;getting handle
push rbx
invoke WriteFile, [StandardHandle], hello2, 1, Written, 0
mov rbx, qword ptr ms
invoke WriteFile, [StandardHandle], hello2, 2, Written, 0
invoke WriteFile, [StandardHandle], hello2, rbx, Written, 0
invoke WriteFile, [StandardHandle], hello2, 3, Written, 0
pop rbx
ret
endp
section '.idata' data import readable
library kernel, 'kernel32.dll'
import kernel,\
GetStdHandle, 'GetStdHandle',\
ExitProcess, 'ExitProcess',\
WriteFile, 'WriteFile'
Он доходить до 3 вызова WriteFile и на нём не чего не выводит, хотя сдещий вывод сробатвает. Самая соль в том что регист rbx не является пустым, в него записанно непонятное значение(не то что мы передали). Ни чего не могу понять...