![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() ![]() |
![]() |
Infinity |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: ![]() ![]() ![]() |
привет всем
![]() помогите пожалста разобраться с сабжем. на сколько я знаю эта подфункция переключает 7-ой бит байта атрибутов, который управляет мерцанием символов, тока вот интересно как оно работает... мне надо в цикле переключать значение этого бита, так чтобы цвет сиволов на экране менялся соответсвующим образом. я лабу сделала, но мне надо именно эту функцию там употребить.. помогите плиззз |
xds |
![]()
Сообщение
#2
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Привет
![]() 7-ой бит аттрибута имеет два назначения. Во-первых, он, как ты заметила, управляет мерцанием символа (если = 1, то символ мерцает). Такой режим обычно установлен по умолчанию. Во-вторых, 7-й бит может быть использован для задания повышенной яркости заднего фона (аналогично 3-ему биту для переднего). Сабж непосредственно выбирает тот или другой режим: если BL = 1, то 7-й бит управляет мерцанием; BL = 0 - задает яркость заднего фона. ; выбираем управление мерцанием В Windows мерцание работает только в полноэкранном режиме. -------------------- The idiots are winning.
|
Infinity |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: ![]() ![]() ![]() |
пасиба бааальшое, но это я всё знала, а вот где в проге эту штуку лучше ставить чтобы она управляла чем надо?
допустим есть надпись на экране и цикл: в начале спрашивается что надо юзеру мерцание или яркость и в зависиомсти от ответа переходит на метку где ставиться мерцание надписи на экране или яркость фона. я знаю как это все реализовать но вот как применить к этому сабж... Например: ; в сегменте кодов: только это у меня не работает и тут ещё вопрос появляется какой из множества способов вывести строки на экран лучше? Сообщение отредактировано: volvo - 6.11.2009 22:39 |
xds |
![]()
Сообщение
#4
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Как ты верно заметила, в среде MS-DOS существует множество способов вывода строк. В общем случае можно выделить три категории:
- вывод средствами MS-DOS/int 21h: обычный телетайпный вывод, ничего не знающий об атрибутах, установке положения курсора, очистке экрана и т.п.; полезен в тех случаях, когда необходимо чтобы программа поддерживала перенаправление вывода; абсолютно совместимый (главное, чтобы DOS была ![]() - вывод средствами BIOS/int 10h: знает про атрибуты, курсор и п.р., но не всегда удобен: не удается добиться одним вызовом требуемого результата; ничего не знает об устройствах DOS и стандартном выводе; - вывод напрямую в видеопамять: работает максимально быстро и всегда так, как требуется; удобен при полноэкранном выводе; наименее совместимый подход. Вывод строки: в DOS - int 21h / AH = 9h; в BIOS - int 10h / AH = 13h; напрямую - lodsb/stosb ;) Я дополнил твой код выводом через BIOS: .model tiny -------------------- The idiots are winning.
|
Infinity |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: ![]() ![]() ![]() |
я так тож делала, только у меня это не работает
![]() в том то всё и дело.. |
Infinity |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: ![]() ![]() ![]() |
не работает в том смысле что при нажатии на 1 и 0 ничего не меняется на экране
|
Shadow |
![]()
Сообщение
#7
|
![]() Lonely_Raven ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: ![]() ![]() ![]() |
Infinity
---- смотри присоединенный файл он на PAS, но целиком все сделанно на ASSEMBLERE Думаю переделать не составит труда ---- Вот изменение атрибутов символа на экране, но только через видеопамять напрямую.. думаю пригодится ---- Сама программа неимеет оптимизаций и т.д. она просто работает ---- там именно в видеопамять пишеться аттрибут символа и код самого символа mov ax,0b800h адресс видопамяти в текстовом режиме lea si,S грузим адрес строки причем в ah = 0 ,а в al - код символа mov cx,ax первый симол это длина строки я ее не пропускаю т.к. она потом мне нужна будет для счетчика цикла ---------------- cохраняем регитр ax и увеличиваем счетчик т.е. переходим на след символ
ню вот в al код символа, а в ah аттрибут символа переход на след символ пишем все это в память т.е. на экран выводим переходим в видеопамяти дальше повтор пока не выведем всю строку ![]() ====================== push ds т.к. это PASAL а Я все это сделал в процедуре, а в процедуре начала блока данных идет от стека --- адрес DS сегмента данных нужно сохранить ---- а потом востановить при выходе из процедуры pop ds ------ Справочная литература В.Ю. Пирогов ASSEMBLER учебный курс Сообщение отредактировано: volvo - 6.11.2009 22:42 Прикрепленные файлы ![]() -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
Infinity |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: ![]() ![]() ![]() |
Спасибо большое SHADOW!!!!! буду разбираться
![]() |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 22:17 |