Исправление вывода строки - 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
, поэтому предполагается, что это должно быть реализовано в другом месте программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д