Исправление вывода строки - Assembler
Формулировка задачи:
Уважаемы, помогите поправить программу.
Суть программы, вводим строку ограниченно длинны, например 5 символов, и выводим эту строку по углам экрана разными цветами.
Проблема заключается в выводе, если вводить строку меньше 5 символов, то она дополняется ненужными символами, как это можно поправть?
Зарнее благодарен за помощь.
Код прогаммы прилагаю.
data segment
string db 5 dup (5)
lstr dw $ - string
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,3
int 10h
mov cx,5
call INPUT
mov ax,0b800h
mov es,ax
;левый верхний угол
xor di,di
mov bl,10
call OUT_STRING
;левый нижний угол
mov di,160*24
mov bl,11
call OUT_STRING
;правый верхний угол
mov ax,lstr
shl ax,1
mov di,160
sub di,ax
mov bl,12
call OUT_STRING
;правый нижний угол
mov ax,lstr
shl ax,1
mov di,160*25
sub di,ax
mov bl,13
call OUT_STRING
mov ah,10h
int 16h
mov ah,4ch
int 21h
OUT_STRING proc
mov cx,lstr
xor si,si
O1:
mov al,byte ptr string[si]
mov byte ptr es:[di],al
inc si
inc di
mov byte ptr es:[di],bl
inc di
loop O1
ret
OUT_STRING endp
INPUT proc near
xor di,di
m1:
mov ah,0
int 16h
cmp al,0
jne m3
mov ah,0
int 16h
jmp m1
m3:
cmp al,13
je quit
m4:
cmp al,33
jle m1
mov string[di],al
inc di
mov ah,2
mov di,al
int 21h
loop m1
quit:
ret
INPUT endp
code ends
end startРешение задачи: «Исправление вывода строки»
textual
Листинг программы
string db 5 dup (20h)
Объяснение кода листинга программы
- В начале кода объявляется переменная типа string с именем
strи значением, которое состоит из 5 повторяющихся символов20h. Это означает, что в памяти будет выделено 5 байт для хранения строки. - Далее, с помощью команды
movв регистрaxзаписывается значение20h. - Затем, с помощью команды
movиз регистраaxв память по адресуstrзаписывается значение20h. Это означает, что первый символ в строкеstrбудет равен20h. - Последней командой
movиз регистраaxв память по адресуstr+1записывается значение20h. Это означает, что второй символ в строкеstrбудет также равен20h. - Процесс повторяется еще 3 раза, пока все 5 символов в строке
strне будут равны20h. - Код не содержит инструкций для вывода строки
strна экран, поэтому предполагается, что это должно быть реализовано в другом месте программы. - Код не содержит инструкций для изменения значения переменной
str, поэтому предполагается, что это должно быть реализовано в другом месте программы.