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

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

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

 
 Ответить  Открыть новую тему 
> Модуль CRT
сообщение
Сообщение #1


Профи
****

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

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


Некоторые подпрограммы модуля Crt, написанные без использования системных средств. Сие отнюдь не претендует на оригинальность кода или максимальную эффективность (во всяком случае см. реализацию GetCursor). Жду комментариев...

Procedure CursorOff;Assembler;
{Убираем курсор}
asm
mov dx,3D4h {Регистр - Адрес КЭЛТ}
mov al,10
out dx,al {Выбираем регистр Начал Курсор #10}
inc dx {Регистр данных}
in al,dx {Читаем состояние курсор - это в принципе не нужно}
or al,100000b {Включаем бит 5 -> н VGA+ -> отключение курсора}
out dx,al
end;
Procedure CursorOn;Assembler;
{Включаем курсор}
asm
mov dx,3D4h {Регистр - Адрес КЭЛТ}
mov al,10
out dx,al {Выбираем регистр Начал Курсор #10}
inc dx {Регистр данных}
in al,dx {Читаем размеры курсора}
and al,11011111b {Отключаем бит #5}
out dx,al
end;
Procedure GetCursor(var X,Y:Byte);Assembler;
{Читаем координаты курсора}
asm
mov dx,3D4h {Регистр - Адрес КЭЛТ}
mov al,0Eh
out dx,al {Выбираем регистр Старшего Адрес Курсора}
inc dx
in al,dx {Получаем значение}
mov ah,al {Кладем в старший байт AX}
dec dx
mov al,0Fh
out dx,al {Выбираем регистр Младшего Адрес Курсора}
inc dx
in al,dx {Получаем значение}
mov dx,ax {DX=AX - координаты курсора, в формате 0-0x0, 2000-80x25}
mov cl,80 {Кол-во символов в строке}
div cl
inc al
les di,[bp+04] {ES:DI - дрес переменной Y}
stosb {Записываем}
dec al
mov ah,0
mul cl {Вычисляем смещение строки}
sub ax,dx {Координат по X в отрицательном виде}
neg ax
inc ax
les di,[bp+08]
stosb {Координат по X}
end;
Procedure PutCursor(X,Y:Byte);Assembler;
{Курсор то двигается...только вот???}
asm
mov al,Y
cbw {AX -> Y}
dec ax
shl ax,4 {AX = Y*16}
mov dx,ax {DX = Y*16}
shl ax,2 {AX = Y*64}
add dx,ax {DX = Y*16+Y*64 = Y*80}
mov al,X
cbw {AX = X}
dec ax
add ax,dx {AX = Y*80+X!}
mov bx,ax {Сохр. его в BX}
mov dx,3D4h {Регистр - Адрес КЭЛТ}
mov al,0Eh
out dx,al {Выбираем регистр Старшего Адрес Курсора}
inc dx
mov al,bh
out dx,al {Заносим старший байт}
dec dx
mov al,0Fh
out dx,al {Выбираем регистр Младшего Адрес Курсора}
inc dx
mov al,bl
out dx,al {Заносим младший байт}
end;
Procedure ClrScr(Attrib:Byte);Assembler;
asm
cld
mov ax,0B800h
mov es,ax
xor di,di {ES:DI - дрес видеобуфера}
mov cx,1000 {Размер буфер в двойных словах}
mov al,32
mov ah,Attrib {AX -> пробел|атрибут}
push ax
db $66,$C1,$E0,$10 {Сдвиг в старшую часть EAX (shl eax,10h)}
pop ax {EAX = AX:AX}
db $F3,$66,$AB {rep stosd}
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

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

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


Что, разве так плохо сделано??
Где комментарии?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


...
*****

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

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


Жаль не гарантирована эффективность, а так хорошо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

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

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


По поводу эффективности, дык это только в GetCursor хреново реализован просчет, может какие-нибудь идеи есть??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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