Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2023, 17:53   #11
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Да, забыл.
Значит всё сложнее.
FPaul вне форума Ответить с цитированием
Старый 10.03.2023, 19:10   #12
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Можно воспользоваться функциями 2 и 9 в цикле.
Код:
use16
org     256
    mov ah, 15
    int 10h
    mov byte ptr screen_page, bh
    mov al, ah
    mov ah, 0
    sub ax, word ptr window_width
    shr ax, 1
    mov byte ptr window_position.x, al
    push ds
    mov ax, 0040h
    mov ds, ax
    mov al, [84h]
    pop ds
    mov ah, 0
    sub ax, word ptr window_height
    shr ax, 1
    mov byte ptr window_position.y, al
    mov al, 32
    jmp update_screen

main_loop:
    mov ah, 11h
    int 16h
    jz wait_a_kay
    mov ah, 10h
    int 16h
    jmp main_loop

wait_a_kay:
    mov ah, 10h
    int 16h
    cmp ax, 0x7000
    jnz update_screen
    mov ah, 12h
    int 10h
    test ah, 20h
    jnz main_loop
    mov ax, 4C00h
    int 21h

update_screen:
    push ax
    mov ax, 0732h
    mov bh, byte ptr text_color
    xor cx, cx
    xor bh, 77h
    mov dx, 317Fh
    int 10h
    pop ax
    cmp al, 32
    jc main_loop
    mov cx, word ptr window_height
    push word ptr window_position

draw_window_loop:
    push cx
    push ax
    mov ah, 2
    mov bh, byte ptr screen_page
    mov dx, word ptr window_position
    int 10h
    inc byte ptr window_position.y
    pop ax
    mov ah, 9
    mov bx, word ptr page_and_color
    mov cx, word ptr window_width
    int 10h
    pop cx
    loop draw_window_loop
    pop word ptr window_position
    jmp main_loop

page_and_color:
text_color db 70h
screen_page db ?
window_position:
 ; позицию надо рассчитать исходя из размеров окна и параметров экрана, чтобы окно было по центру
window_position.x db ? ; максимум(0, (ширина экрана - ширина окна) shr 1)
window_position.y db ? ; максимум(0, (высота экрана - высота окна) shr 1)
window_width dw 20
window_height dw 10
Что-то вроде этого

Последний раз редактировалось macomics; 11.03.2023 в 00:23.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер Jluc333 Помощь студентам 8 08.03.2019 11:36
ассемблер olga12221 Фриланс 0 23.01.2018 12:23
ассемблер gylayko Помощь студентам 1 13.10.2011 19:14
Ассемблер maziLa Помощь студентам 2 14.07.2009 09:25
Ассемблер maziLa Помощь студентам 3 06.07.2009 10:31