Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 16.12.2021
Сообщений: 13

Программа очищает экран и вырезает в центре экрана инверсное окно разумных размеров

22.04.2023, 16:44. Показов 770. Ответов 1

Студворк — интернет-сервис помощи студентам
Программа очищает экран и вырезает в центре экрана инверсное окно разумных размеров. Далее, при нажатии любой символьной клавиши её отображение должно появляться внутри этого окна. Таким образом, окно постепенно заполняется вводимыми с клавиатуры символами. Заполнение окна происходит в общепринятом порядке: слева – направо – сверху - вниз.
Программно проверить нажатие клавиши Left Сtrl
Выход из программы по нажатию клавиши INSERT или при полном заполнении окна.
Разбирала код подобной задачи, но даже на основе этого, так и не получилось.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.04.2023, 16:44
Ответы с готовыми решениями:

Программа вырезает в центре экрана инверсное окно, в которое мы вводим символ, полностью заполняющий это окно
Всем доброго время суток. Пытаюсь разобраться с задачей. Программа очищает экран и вырезает в его центре инверсное окно разумных...

окно разумных размеров
доброго времени суток! помогите с лабой. программа очищает экран, вырезает в центре экрана инверсное окно разумных размеров и выводит...

Программа с графикой. В центре экрана построить окружность, на ней провести оси симметрии, в центре поставить точку
Помогите пожалуйста,нужна следующая программа: В центре экрана построить окружность, на ней провести оси симметрии, в центре поставить...

1
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
22.04.2023, 18:36
Заполнить прямоугольник в центре экрана данным символом

Добавлено через 1 час 23 минуты
Вот вариант с постепенным заполнением окна и желаемой обработкой клавиш выхода.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
; Программа очищает экран и вырезает в центре экрана инверсное окно разумных размеров.
; Далее, при нажатии любой символьной клавиши
; её отображение должно появляться внутри этого окна.
; Таким образом, окно постепенно заполняется вводимыми с клавиатуры символами.
; Заполнение окна происходит в общепринятом порядке: слева – направо – сверху - вниз.
; Программно проверить нажатие клавиши Left Сtrl
; Выход из программы по нажатию клавиши INSERT или при полном заполнении окна.
    .model small
    .code
 
retc    macro
    local m0
    jnc m0
    ret
m0:
    endm
 
cls macro
    mov ax,3
    int 10h
    endm
 
bordx=8 ; размер бордюра окна
bordy=4
x0  dw 0 ; коорд верхнего левого угла окна
y0  dw 0
x1  dw 0 ; коорд нижнего левого угла окна (+1)
y1  dw 0
xb  label byte
x   dw 0
yb  label byte
y   dw 0
char    db 32      ; символ кот заполняется окно
attr    db 16*1+15 ; атрибут кот заполняется окно
start:  mov ax,cs ; основная программа 
    mov ds,ax
    mov ax,0B800h ; сегмент видео памяти
    mov es,ax
    mov ax,3      ; режим 80*25 текст - стереть экран
    int 10h
    mov x0,bordx  ; задать коорд углов окна
    mov y0,bordy
    mov x1,80-bordx
    mov y1,25-bordy
    call fillwindow ; заполнить окно символом
    mov ax,x0
    mov x,ax
    mov ax,y0
    mov y,ax
m1: call setcursor
    call inpkey     ; ожидать ввода клавиши
    call outkey
    jmp m1
 
inpkey: mov ah,1 ; готовность клавиатуры (нажат символ)
    int 16h
    jnz in0  ; переход если нажат символ
    mov ah,12h ; опрос шифтовых клавиш
    int 16h
    test ah,1 ; левый Ctrl - выход Исп. правый Ctrl для ввода символов
    jnz in1
    jmp inpkey ; символ не нажат - ожидание
in0:    mov ah,0   ; читать нажатый символ
    int 16h
    cmp ah,82  ; Insert key
    jz in1
    cmp al,27  ; ESC key
    jz in1
    mov char,al ; char=символ
    ret
in1:    cls
    int 20h ; выход в Дос
 
fillwindow:     ; заполнить окно символом
    mov ax,x0
    mov x,ax
    mov ax,y0
    mov y,ax
nraw:   mov ax,y  ; найти адрес в видеопамяти
    mov bl,80 ; di=2*(80*y+x) - адрес в видеопамяти
    mul bl
    add ax,x
    add ax,ax
    mov di,ax
    mov al,char
    mov ah,attr
    mov cx,x1
    sub cx,x0
    rep stosw ; заполнить строку символами
    inc y     ; след строка
    mov ax,y
    cmp ax,y1 ; достигнута последняя строка ?
    jc nraw   ; конец цикла
    ret
 
outkey: mov ax,y  ; найти адрес в видеопамяти
    mov bl,80 ; di=2*(80*y+x) - адрес в видеопамяти
    mul bl
    add ax,x
    add ax,ax
    mov di,ax
    mov al,char
    mov ah,attr
    stosw     ; записать 1 символ
    inc x     ; продвинуть позицию курсора с учетом размеров окна
    mov ax,x
    cmp ax,x1
    retc
    mov ax,x0
    mov x,ax
    inc y
    mov ax,y
    cmp ax,y1
    retc
    cls       ; выход при полном заполнении окна
    int 20h 
 
setcursor:mov dl,xb
    mov dh,yb
    mov ah,2
    mov bh,0
    int 10h
    ret
 
    end start
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2023, 18:36
Помогаю со студенческими работами здесь

Изобразить удаляющийся квадрат определенных размеров, размещенный в центре экрана
Изобразить удаляющийся квадрат, определенных размеров, размещенный в центре экрана. начало у меня есть, но он у меня из середины...

Макроопределения на очистку экрана, установку курсора в центре экрана, вывод теста на экран
добрый вечер, может кто помочь с Макроопределениями на очистку экрана, установку курсора в центре экрана, вывод теста на экран,

Нарисуйте окно в центре экрана
Нарисуйте окно в центре экрана. При нажатии клавиши "энтер" окно должно изменить свои размеры. помогите)

Нарисовать окно в центре экрана
Нарисовать окно в центре экрана. Осуществить изменение размеров окна при нажатии клавиши Enter.)

Программа очищает экран
Программа очищает экран. Вводимый с клавиатуры символ по-является одновременно во всех четырех углах экрана и с разумной скоростью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru