Как заполнить окно в центре экрана символами "*" - Assembler
Формулировка задачи:
Добрый день. У меня программа почти готова, только вот заполняет символы на весь экран, а мне нужно заполнить только окно в центре экрана, как это сделать, что нужно исправить, помогите пожалуйста. Я в ассемблере вообще полный 0, но что-то получилось.
Вот код:
Вот результат:
Вот это серое окно мне и нужно заполнить символами "*", ну ещё проблема: в этом окне мерцают символы, как это исправить?
data SEGMENT char db ? ; символ data ENDS code SEGMENT ASSUME cs:code,ds:data start: mov ax,3 int 10h ; видеорежим mov ax,0B800h ; 0-ая видеостраница mov es,ax ; окно в центре экрана mov ah,7 xor al,al mov bh,0f0h mov ch,6 mov cl,20 mov dh,18 mov dl,60 int 10h ; ввод начального символа 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 al, 09 jne _loop char_out proc near ; вывод текущего символа mov ah, 0Ah mov bh, 0 mov al, char mov cx, 25*80 int 10h ret char_out endp code ENDS end start
Решение задачи: «Как заполнить окно в центре экрана символами "*"»
textual
Листинг программы
code SEGMENT ASSUME cs:code xTopLeft equ 20 yTopLeft equ 6 szX equ 60-xTopLeft szY equ 18-yTopLeft org 100h start: mov ax,3 int 10h ; видеорежим mov ax,0B800h ; 0-ая видеостраница mov es,ax mov al,20h mov bx,2*(yTopLeft*80+xTopLeft) @@00: mov di,bx mov cx,szY @@01: push cx push di mov ah,70h mov cx,szX rep stosw pop di add di,160 pop cx loop @@01 xor ax,ax int 16h cmp al,13 jnz @@00 ret code ENDS end start