Как заполнить окно в центре экрана символами "*" - 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

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

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