Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
12 / 12 / 5
Регистрация: 03.06.2010
Сообщений: 84
1

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

23.11.2011, 23:54. Показов 1780. Ответов 5
Метки нет (Все метки)

Всем доброго время суток. Пытаюсь разобраться с задачей.

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

Мои наработки:
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
;Программа очищает экран и вырезает в его центре инверсное окно разумных размеров. 
;Вводимый с клавиатуры символ полностью заполняет это окно. При вводе следующего символа всё повторяется.
 
model small
 
stack 100h
 
dataseg
    char    db  ? ;сам символ
    posx    db  10 ;горизонтальная координата
    posy    db  10 ;вертикальная координата
 
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 al, 09
    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, 09h
    mov bh, 0
    mov bl, 07h
    mov al, char
    mov cx, 1
    int 10h
    ret
char_out endp
 
end
В принципе код похож на предыдущий.

Бьюсь в написании двух процедур, самого инверсного окна в центре. И размера символа во все инверсное окно.
Подскажите, как это сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2011, 23:54
Ответы с готовыми решениями:

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

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

При открытии любых сайтов в центре экрана появляется неопознанное окно и иногда внизу слева всплывает реклама
Windows 7 x64. При открытии любых сайтов в центре экрана появляется неопознанное окно и иногда...

Создать окно, которое нельзя закрыть.(Окно без крестика)
Как мне создать окно которое нельзя закрыть крестом.(Заблокировать крест, setEnabled(false) что то...

__________________
5
270 / 265 / 11
Регистрация: 24.12.2010
Сообщений: 328
24.11.2011, 00:25 2
Окошко можно так сделать:
Assembler
1
2
3
4
5
6
7
8
9
10
    ...
    mov ah,7
    xor al,al
    mov bh,0f0h
    mov ch,6
    mov cl,20
    mov dh,18
    mov dl,60
    int 10h
    ...
Цитата Сообщение от Alest Посмотреть сообщение
И размера символа во все инверсное окно
Так ли? Наверное имеется в виду забить окошко символами-копиями введенного.
1
12 / 12 / 5
Регистрация: 03.06.2010
Сообщений: 84
24.11.2011, 19:03  [ТС] 3
Так ли? Наверное имеется в виду забить окошко символами-копиями введенного.
Ммм.. Да, наверное вы правы..

В таком случае остается только цикл дописать заполняющие это окошко.....

Добавлено через 1 час 15 минут
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
move_right proc near
    cmp posx, 60
    je mrgt
    inc posx
mrgt:   ret
move_right endp
 
move_down proc  near
    cmp posy, 18
    je mdn
    inc posy
mdn:    ret
move_down endp
Добавлено через 16 часов 43 минуты
Решил! Подскажите код клавиши F9(над бы осуществить выход из программы по нажатию)
0
270 / 265 / 11
Регистрация: 24.12.2010
Сообщений: 328
24.11.2011, 19:56 4
Ну уж код клавиши могли бы и в какой-нибудь книжке посмотреть, например у Калашникова есть в приложениях. Код <F9> 43h.
1
12 / 12 / 5
Регистрация: 03.06.2010
Сообщений: 84
24.11.2011, 21:23  [ТС] 5
Спасибо большое. Мой опыт программирование на ассемблере исчисляется в днях.. Еще даж недели нет.. Самый лучший опыт практика.. стараюсь писать, решать задачи.
Коды в гугле искал..
Assembler
1
2
3
4
mov char, al
    cmp al, 43h
    jne _loop       ; если это F9
        jmp exit
Возможно не правильно обработал выход... не работает..
0
270 / 265 / 11
Регистрация: 24.12.2010
Сообщений: 328
24.11.2011, 22:12 6
43h это скэн-код, а не ASCII-символ, поэтому проверять нужно ah, а не al. Можно так организовать проверку:
Assembler
1
2
3
4
5
6
7
8
key:    mov ah,0
    int 16h
    cmp al,0    ;Расширенный код?
    jnz smbl    ;Нет, введен символ.
    cmp ah,43h  ;Да, это <F9>?
    jz exit     ;Да, выходим.
    jmp key     
smbl:   ...
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2011, 22:12

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как заполнить окно в центре экрана символами "*"
Добрый день. У меня программа почти готова, только вот заполняет символы на весь экран, а мне нужно...

Как прижать окно MainWindow и окно второе к левому верхнему углу экрана?
Имеется MainWindow (которое по умолчанию) в приложении. Имеется созданное окно (второе)....

Создать окно произвольного размера, скрыть окно, показать окно, удалить окно.
Создать окно произвольного размера, скрыть окно, показать окно, удалить окно. Для создания окна...

Как определить, что запущенная программа полностью отрисовала своё окно?
Ситуация следующая: из своей программы с помощью ShellExecute(0, &quot;open&quot;, fileName, 0, 0,...

Создать окно с кнопкой, закрывающей это окно
Создайте новый оконный проект в ОС Microsoft Windows 7 или Linux. Разместите посередине окна кнопку...

Построить в центре экрана изображение, которое содержит 10 вложенных квадратов
построить в центре екрана изображение которое содержит 10 вложеных квадратов со сторонами...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.