@Ponteley

Почему не работает данная прога?

Masm ms-dos. Программа должна выводить введеную строку. Прерывание вывода строки не работает, хотя в регистрах ah и dx лежат правильные значения.
assume cs:codeseg, ds:codeseg

codeseg segment
start:
main proc
	xor dx, dx
	mov ax, codeseg
	mov ds, ax

	call input
	call output

	jmp end_prog
main endp

input proc
	mov ah, 0ah
	lea dx, bufer
	int 21h

	ret
input endp

output proc
	; добавить знак доллара в конец строки
	xor bx, bx
	mov bl, byte ptr [len]
	lea si, [text + bx]
	mov byte ptr [si], 24h

	; вывод строки
	mov ah, 09h
	lea dx, text
	int 21h

	ret
output endp

end_prog:
	mov ah, 4ch
	int 21h

bufer label byte
max db 20
len db 00
text db 32 dup(0)
codeseg ends
end start
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Почему не работает данная прога?

Она на самом деле работает. Просто вывод попадает в точности на введённую строку, из-за чего непонятно, что он случился. Вот с таким изменением будет видно, что работает:

...
  call input
  mov dl, 0ah
  mov ah, 2
  int 21h
  call output
  ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы