![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() |
Infinity |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: ![]() ![]() ![]() |
привет всем
![]() помогите пожалста разобраться с сабжем. на сколько я знаю эта подфункция переключает 7-ой бит байта атрибутов, который управляет мерцанием символов, тока вот интересно как оно работает... мне надо в цикле переключать значение этого бита, так чтобы цвет сиволов на экране менялся соответсвующим образом. я лабу сделала, но мне надо именно эту функцию там употребить.. помогите плиззз |
![]() ![]() |
Shadow |
![]()
Сообщение
#2
|
![]() Lonely_Raven ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: ![]() ![]() ![]() |
Infinity
---- смотри присоединенный файл он на PAS, но целиком все сделанно на ASSEMBLERE Думаю переделать не составит труда ---- Вот изменение атрибутов символа на экране, но только через видеопамять напрямую.. думаю пригодится ---- Сама программа неимеет оптимизаций и т.д. она просто работает ---- там именно в видеопамять пишеться аттрибут символа и код самого символа mov ax,0b800h
mov es,ax
адресс видопамяти в текстовом режиме lea si,S
mov ah,0
mov al,[si]
грузим адрес строки причем в ah = 0 ,а в al - код символа mov cx,ax
inc si
первый симол это длина строки я ее не пропускаю т.к. она потом мне нужна будет для счетчика цикла ---------------- cохраняем регитр ax и увеличиваем счетчик т.е. переходим на след символ
@out:
mov al,[si] {Symbol}
mov ah,c {attribut}
inc si {nex symbol}
mov es:[di],ax {to video memory}
inc di {movenau to video memory}
inc di {increment 2 se also for 1 symbol 2 byte memory}
loop @out
ню вот в al код символа, а в ah аттрибут символа переход на след символ пишем все это в память т.е. на экран выводим переходим в видеопамяти дальше повтор пока не выведем всю строку ![]() ====================== push ds
mov ax,ss
mov ds,ax
т.к. это PASAL а Я все это сделал в процедуре, а в процедуре начала блока данных идет от стека --- адрес DS сегмента данных нужно сохранить ---- а потом востановить при выходе из процедуры pop ds
------ Справочная литература В.Ю. Пирогов ASSEMBLER учебный курс Сообщение отредактировано: volvo - 6.11.2009 22:42 Прикрепленные файлы ![]() -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
![]() ![]() |
![]() |
Текстовая версия | 1.08.2025 18:25 |