Я создал эту программу, которая берет два входа и выводит их (просто, да, но это для практики). Он компилируется и работает нормально, но он не делает того, что я намеревался. Вот мой код:x86 assembly - masm32: Проблемы с ожиданием ответа
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
num1 db "Enter a number:", 0
num2 db "Enter another number:", 0
.data?
buffer1 dd 100 dup(?)
buffer2 dd 100 dup(?)
.code
start:
lea eax, num1
push eax
call StdOut
lea ebx, buffer1
push ebx
call StdIn
hlt
lea eax, num2
push eax
call StdOut
lea edx, buffer2
push edx
call StdIn
xor eax, eax
xor ebx, ebx
xor edx, edx
lea eax, buffer1
push eax
call StdOut
lea ebx, buffer2
push ebx
call StdOut
push 0
call ExitProcess
end start
Он отображает этот выход:
Enter a number: Enter another number:
Он должен сделать:
Enter a number:
; wait for input.
Enter another number:
; wait for input.
; continue with program.
Почему печать на одной строке? Я попытался поставить halt
там, чтобы остановить процесс, но Windows останавливает запуск программы и говорит the program is not responding
.
EDIT:
Вот код, который я сказал, что отредактированные в:
xor eax, eax
xor ebx, ebx
xor edx, edx
lea eax, buffer1
push eax
call StdOut
lea ebx, buffer2
push ebx
call StdOut
Когда я запускаю это с предыдущим кодом, он говорит "This program is not responding."
Почему это?
Любая помощь будет оценена по достоинству.
С уважением,
Progrmr
Почему бы не это печатать на одную строке? То, что он делает, вам нужно добавить 13, 10 после вашего текста. Кроме того, ваш буфер для хранения текста должен быть db не dd, если вы действительно не хотите буфера в 400 байт. – Gunner
Это переводит его на другую линию, спасибо. Но он все еще не ждет ввода, он показывает как num1, так и num2, а затем не ждет ввода. Зачем? – Progrmr