Я делаю программу в сборке TASM (я, честно говоря, понятия не имею, если она 16-битная, x86, 64-битная, может быть, 8086?). Я использую TASM внутри DOSBox для сборки, компоновки и тестирования.
Пользователь вводит символы до тех пор, пока пользователь не нажмет клавишу Enter , а затем выведет на экран то, что они набрали обратно в консоль. Это мой код:
IDEAL
model small
STACK 100h
DATASEG
wholeinput db 00
CODESEG
start:
mov ax,@data
mov ds,ax
mov bx, 0 ; bx is the counter
input:
mov ah, 1 ; input moves the input to al
int 21h
cmp al, 13 ; 0xD is enter key
je enterPressed ; if its not 'enter' then continue
add [wholeinput+bx], al ; add the given character to the end of the string
inc bx ; inc counter of string length
jmp input ; continue loop
enterPressed:
add [wholeinput+bx], '$' ; add to the last byte of the thing a string terminator
mov ah, 9
mov dx, offset wholeinput ; print the whole thing
int 21h
exit:
mov ax,4c00h
int 21h
END start
При первом запуске программыон работает, как и ожидалось. Когда я запускаю ту же программу во второй раз с тем же вводом, она печатает бред на консоли.
Моя теория состоит в том, что память из моего предыдущего запуска каким-то образом копируется в следующий запуск. это может быть очень глупо, но я нуб ...
В чем может быть моя проблема? Как я могу ее решить?
Редактировать: Спасибо Майку Накису и Питеру Кордесу за это решение:
Проблема заключалась в том, что я не зарезервировал достаточно места для ввода.
wholeinput db 00
зарезервировать только один байт. Fix:
wholeinput db 100 dup (0)