Заполнение окна одинаковыми символами - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, необходимо заполнить полученное окно одинаковыми символами, т.е вводимый с клавиатуры символ полностью должен заполнять это окно. Не подскажите, как можно изменить код, чтобы это осуществить?
;Программа очищает экран и вырезает в его центре инверсное окно разумных размеров. 
;Вводимый с клавиатуры символ полностью заполняет это окно. При вводе следующего символа всё повторяется.
 
model small
 
stack 100h
 
dataseg
    char    db  ? ;сам символ
    posx    db  20 ;горизонтальная координата
    posy    db  6 ;вертикальная координата
codeseg
 
    startupcode
 
    ; очистка экрана
    call clear_scr
 
    ; ввод начального символа
input:  mov ah, 0
    int 16h
    cmp al, 0
    je input       ; если символ не введён, то запрашиваем снова
    mov char, al
 
    ; главный цикл
_loop:     call char_out; выводим символ на экран
 
    mov ah, 0   ; считываем код нажатой клавиши
    int 16h
    cmp al, 0   ; если это символ

    mov char, al    ; сохраняем его и проверяем условие выхода
    cmp ah, 43h
    jne _loop       ; если это F9
    jmp exit

exit:   call clear_scr
    mov ah, 4ch
    int 21h

clear_scr   proc near   ; функция очистки экрана
    mov ax, 0600h
    mov bh, 07h
    mov cx, 0000h
    mov dx, 184fh
    int 10h
clear_scr   endp

char_out proc near     ; вывод текущего символа
 
    mov ah, 02h     ; в указанной позиции
    mov bh, 0
    mov dh, posy
    mov dl, posx
    int 10h
 
    mov ah,7
    xor al,al
    mov bh,0f0h
    mov ch,6
    mov cl,20
    mov dh,12
    mov dl,30
    int 10h 
 
    mov ah, 09h
    mov bh, 0
    mov bl, 07h
    mov al, char
    mov cx, 1
    int 10h
    ret
 
char_out endp
 
end

Решение задачи: «Заполнение окна одинаковыми символами»

textual
Листинг программы
char_out proc near     ; вывод текущего символа
    mov ah, 0Ah
    mov bh, 0
    mov al, char
    mov cx, 25*80
    int 10h
    ret
 
char_out endp

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

В данном коде, который написан на языке Assembler, реализована процедура вывода текущего символа. Список действий, выполняемых в данной процедуре, следующий:

  1. mov ah, 0Ah - устанавливает код функции вывода в регистре AH на значение 0Ah (10), что означает вывод символа.
  2. mov bh, 0 - устанавливает код страницы в регистре BH на значение 0, что означает, что будет использоваться страница 0.
  3. mov al, char - копирует символ из памяти в регистр AL.
  4. *mov cx, 2580* - устанавливает счётчик циклов на 2580, что означает 2000 (2K) байтов, которые будут выводиться.
  5. int 10h - вызывает функцию вывода символа на экран.
  6. ret - завершает процедуру и возвращает управление обратно. Также стоит отметить, что в данном коде присутствует объявление процедуры с именем char_out и её реализация.

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


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

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

13   голосов , оценка 4.077 из 5
Похожие ответы