У меня есть программа на ассемблере, которая должна напечатать строку, позволить пользователю ввести некоторый текст, снова напечатать тот же самый текст, а затем ждать нажатия клавиши, чтобы завершить программу, используя только собственные функции Win32.
Проблема в том, что все работает, кроме печати введенной пользователем строки. Он просто печатает пустую новую строку.
Вот код:
global _main
extern _GetStdHandle@4
extern _WriteFile@20
extern _ReadFile@20
extern _ExitProcess@4
section .text
_main:
mov ebp, esp
sub esp, 12
push -11
call _GetStdHandle@4
mov ebx, eax
push 0
push dword [ebp - 12]
lea ecx, [_msg_end - _msg]
push ecx
lea edx, [_msg]
push edx
push ebx
call _WriteFile@20
push -10
call _GetStdHandle@4
mov ebx, eax
push 0
lea ecx, [ebp - 8]
push ecx
push 20
lea edx, [ebp - 4]
push edx
push ebx
call _ReadFile@20
push -11
call _GetStdHandle@4
mov ebx, eax
push 0
push dword [ebp - 12]
lea ecx, [ebp - 8]
push ecx
lea edx, [ebp - 4]
push edx
push ebx
call _WriteFile@20
push -10
call _GetStdHandle@4
mov ebx, eax
push 0
lea ecx, [ebp - 8]
push ecx
push 1
lea edx, [ebp - 4]
push edx
push ebx
call _ReadFile@20
push 0
call _ExitProcess@4
_msg:
db "Hello, world!", 10
_msg_end:
РЕДАКТИРОВАТЬ - Вот рабочий код:
global _main
extern _GetStdHandle@4
extern _ReadFile@20
extern _WriteFile@20
extern _ExitProcess@4
section .bss
_input_buf: resb 20
section .text
_main:
mov ebp, esp
sub esp, 8
push -10
call _GetStdHandle@4
mov ebx, eax
push 0
lea ecx, [ebp - 4]
push ecx
push 20
lea eax, [_input_buf]
push eax
push ebx
call _ReadFile@20
push -11
call _GetStdHandle@4
mov ebx, eax
push 0
lea ecx, [ebp - 8]
push ecx
mov edx, [ebp - 4]
push edx
lea eax, [_input_buf]
push eax
push ebx
call _WriteFile@20
push 0
call _ExitProcess@4