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