IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> подфункция 03h функции 10h прерывания Int 10h, и как же это всё работает-то...
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Женский

Репутация: -  0  +


привет всем smile.gif
помогите пожалста разобраться с сабжем. на сколько я знаю эта подфункция переключает 7-ой бит байта атрибутов, который управляет мерцанием символов, тока вот интересно как оно работает...
мне надо в цикле переключать значение этого бита, так чтобы цвет сиволов на экране менялся соответсвующим образом.
я лабу сделала, но мне надо именно эту функцию там употребить.. помогите плиззз
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Как ты верно заметила, в среде MS-DOS существует множество способов вывода строк. В общем случае можно выделить три категории:
- вывод средствами MS-DOS/int 21h: обычный телетайпный вывод, ничего не знающий об атрибутах, установке положения курсора, очистке экрана и т.п.; полезен в тех случаях, когда необходимо чтобы программа поддерживала перенаправление вывода; абсолютно совместимый (главное, чтобы DOS была smile.gif;
- вывод средствами BIOS/int 10h: знает про атрибуты, курсор и п.р., но не всегда удобен: не удается добиться одним вызовом требуемого результата; ничего не знает об устройствах DOS и стандартном выводе;
- вывод напрямую в видеопамять: работает максимально быстро и всегда так, как требуется; удобен при полноэкранном выводе; наименее совместимый подход.

Вывод строки:
в DOS - int 21h / AH = 9h;
в BIOS - int 10h / AH = 13h;
напрямую - lodsb/stosb ;)

Я дополнил твой код выводом через BIOS:

.model tiny
.code

.startup

;Очистка экрана: средствами BIOS достигается с помощью повторной установки
;текущего видеорежима
       mov ah,0Fh     ;получить текущий режим в AL
       int 10h
       xor ah,ah      ;снова его установить
       int 10h

;Вывод тестовой строки с атрибутом 1Eh
       mov ax,1301h   ;функция 13h, подфункция 1 - вывод с перемещением курсора
       xor dx,dx      ;начальная позиция вывода: DH = строка, DL = столбец
       mov bx,1Eh     ;BH = номер страницы; BL = атрибут
       lea bp,test1E  ;ES:BP -> строка
       mov cx,5       ;CX = длина строки
       int 10h

;Вывод тестовой строки с атрибутом 9Eh
       mov ax,1301h
       mov dx,100h
       mov bx,9Eh
       lea bp,test9E
       mov cx,5
       int 10h

;Вывод меню
       mov ax,1301h
       mov dx,300h
       mov bx,7
       lea bp,msg
       mov cx,msg_len
       int 10h

      ; в сегменте кодов:
      ; вывод строк на экран

again:
       xor ah, ah
       int 16h
       cmp al,30h
       je zero
       cmp al,31h
       je one
       cmp ah,01h
       je exit
       jmp again

zero:
       mov ax,1003h
       xor bl,bl
       int 10h
       jmp again

one:
       mov ax,1003h
       mov bl,1
       int 10h
       jmp again

exit:
      ;выход из проги

       mov ax,4C00h
       int 21h

msg db 'Что сделать?',13,10
       db '  0 - выключить мерцание',13,10
       db '  1 - включить мерцание',13,10
       db 'ESC - выход',13,10
msg_len equ $-msg

test1E  db ' 1Eh '
test9E  db ' 9Eh '

end


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.05.2024 9:50
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name