Исправление вывода строки - 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)

Объяснение кода листинга программы

  1. В начале кода объявляется переменная типа string с именем str и значением, которое состоит из 5 повторяющихся символов 20h. Это означает, что в памяти будет выделено 5 байт для хранения строки.
  2. Далее, с помощью команды mov в регистр ax записывается значение 20h.
  3. Затем, с помощью команды mov из регистра ax в память по адресу str записывается значение 20h. Это означает, что первый символ в строке str будет равен 20h.
  4. Последней командой mov из регистра ax в память по адресу str+1 записывается значение 20h. Это означает, что второй символ в строке str будет также равен 20h.
  5. Процесс повторяется еще 3 раза, пока все 5 символов в строке str не будут равны 20h.
  6. Код не содержит инструкций для вывода строки str на экран, поэтому предполагается, что это должно быть реализовано в другом месте программы.
  7. Код не содержит инструкций для изменения значения переменной str, поэтому предполагается, что это должно быть реализовано в другом месте программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5