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  +


Привет smile.gif

7-ой бит аттрибута имеет два назначения. Во-первых, он, как ты заметила, управляет мерцанием символа (если = 1, то символ мерцает). Такой режим обычно установлен по умолчанию. Во-вторых, 7-й бит может быть использован для задания повышенной яркости заднего фона (аналогично 3-ему биту для переднего).

Сабж непосредственно выбирает тот или другой режим: если BL = 1, то 7-й бит управляет мерцанием; BL = 0 - задает яркость заднего фона.

; выбираем управление мерцанием
 mov ax,1003h
 mov bl,1
 int 10h

; ...

; выбираем управление яркостью заднего фона
 mov ax,1003h
 xor bl,bl
 int 10h


В Windows мерцание работает только в полноэкранном режиме.


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


Новичок
*

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

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


пасиба бааальшое, но это я всё знала, а вот где в проге эту штуку лучше ставить чтобы она управляла чем надо?
допустим есть надпись на экране и цикл: в начале спрашивается что надо юзеру мерцание или яркость и в зависиомсти от ответа переходит на метку где ставиться мерцание надписи на экране или яркость фона. я знаю как это все реализовать но вот как применить к этому сабж...

Например:

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

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:
;выход из проги


только это у меня не работает и тут ещё вопрос появляется какой из множества способов вывести строки на экран лучше?

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


я так тож делала, только у меня это не работает sad.gif
в том то всё и дело..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


не работает в том смысле что при нажатии на 1 и 0 ничего не меняется на экране
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Lonely_Raven
****

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

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


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 аттрибут символа
переход на след символ
пишем все это в память т.е. на экран выводим
переходим в видеопамяти дальше
повтор пока не выведем всю строку smile.gif
======================
    push ds
   mov ax,ss
   mov ds,ax

т.к. это PASAL а Я все это сделал в процедуре, а в процедуре
начала блока данных идет от стека
---
адрес DS сегмента данных нужно сохранить
----
а потом востановить при выходе из процедуры
    pop ds

------
Справочная литература
В.Ю. Пирогов ASSEMBLER учебный курс


Сообщение отредактировано: volvo -


Прикрепленные файлы
Прикрепленный файл  TEXT_VID.zip ( 499 байт ) Кол-во скачиваний: 410


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


Спасибо большое SHADOW!!!!! буду разбираться smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Amoxicillin Clav Side Effects
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Buy Plavix Uk
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Can Amoxicillin Be Used For Proctitis
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Cialis Von Lilly Lycos
 К началу страницы 
+ Ответить 

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

 





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