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

 
 Ответить  Открыть новую тему 
> -=FAQ=-
Shadow
сообщение 9.05.2003 2:53
Сообщение #1


Lonely_Raven
****

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

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


F A Q

Содержание
Все примеры в COM-формате


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


Lonely_Raven
****

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

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


Перекодировка символов используя функции BIOS



.8086
.MODEL TINY
.CODE
ORG 100h

Start:
; Переходим в текстовый режим 80х25х16
mov ax,3
int 10h

;;
;; Выводим информационную строку
;; Пользуясь средствами BIOS после 1/10/86
; AH = 13h
; AL = режим вывода (см. установки отдельных битов ниже)
; = 0 - в строке только символы, атрибут в BL, курсор не сдвигается
; = 1 - в строке только символы, атрибут в BL, курсор сдвигается
; = 2 - строка содержит символы и атрибуты, курсор не сдвигается
; = 3 - строка содержит символы и атрибуты, курсор сдвигается
; BH = номер видеостраницы
; BL = атрибут, если режим вывода равен 0 или 1
; CX = длина строки (исключая атрибуты)
; DH = координата по вертикали
; DL = координата по горизонтали
; ES:BP = адрес строки
;;
;;

mov ax,1301h; В данном случае:
mov bx,7 ; Вывод строки символов по адресу ES:BP длиной CX
mov cx,Len ; байт, атрибут в BL, со сдвигом курсора. На
lea bp,Slon1; видеостраницу #0, координаты курсора 0х15
mov dx,0E00h
int 10h ; Ожидаем нажатия клавиши
mov ah,0
int 16h

;;;;;;;;;;;; Заменяем первый диапазон символов;;;;;;;;;;;;;
; AH = 11h - Функции символьного генератора
; Загрузка набора символов пользователя в алфавитно-цифровом режиме
; AL = 00
; BH = байт на символ (обычно 8,14,16)
; BL = номер загружаемого блока (0-7 VGA)
; CX = количество символов
; DX = код первого символа
; ES:BP = адрес таблицы символов

mov ax,1100h; В данном случае:
lea bp,font1; Загружаемый фонт размером 8х14
mov cx,26 ; (разрабатывалось для EGA). Начиная с
mov dx,'A' ; символ а'A' (код 65) по 'Z' (т.е. 26 симв.)
mov bx,0E00h; Все суем в нулевой банк
int 10h ; Тоже самое для второго диапазона
mov ax,1100h
lea bp,font2
mov cx,26
mov dx,'a' ; С символа 'a' (код 65) по 'z'
mov bx,0E00h
int 10h ; И для третьего
mov ax,1100h
lea bp,font3
mov cx,21
mov dx,'А' ; С символ а'А' (код 65) по 'Ф'
mov bx,0E00h
int 10h ; Ждем нажатия клавиши
mov ah,0
int 16h ; Установка видеорежима используя BIOS, также восстанавливаем исх. шрифт
mov ax,3
int 10h

mov ax,4C00h

int 21h ; Данные о СЛОНЕ

font1 db 0,0,0,0,28,35,124,127,255,255,127,63,31,15
db 0,0,0,0,0,128,224,112,188,222,239,247,251,253
db 0,0,0,0,0,0,0,0,0,0,128,192,224,240
db 0,0,0,0,0,0,0,1,0,7,31,63,127,112
db 0,0,0,0,62,127,255,255,127,255,255,255,255,227
db 0,0,0,0,0,192,240,248,248,220,232,240,254,255
db 0,0,0,0,0,0,0,0,0,0,0,0,15,127
db 0,0,0,0,0,0,0,0,0,0,7,255,252,195
db 0,0,0,0,0,0,0,0,0,0,255,248,7,255
db 0,0,0,0,0,0,0,0,0,0,0,192,192,128
db 15,15,15,15,15,15,31,31,31,31,63,63,63,63
db 253,254,254,254,255,255,255,255,255,255,255,255,255,255
db 252,255,255,255,127,191,191,223,239,247,251,253,252,251
db 225,227,255,195,176,187,122,114,2,2,2,130,2,207
db 241,248,4,67,225,225,193,1,1,1,1,0,3,255
db 255,255,255,255,255,255,255,255,255,255,255,127,255,252
db 3,135,159,255,255,255,254,253,251,247,239,159,127,127
db 254,249,247,207,191,127,255,255,255,255,255,255,255,255
db 63,255,255,255,255,255,255,255,255,255,255,255,255,255
db 255,255,255,255,255,255,255,255,255,255,255,255,255,255
db 128,0,0,128,128,192,224,224,224,224,192,220,191,127
db 0,0,0,0,0,0,0,0,0,0,0,0,192,248
db 63,63,63,31,31,31,15,7,3,0,0,0,0,0
db 255,255,255,255,255,255,255,255,255,255,63,7,1,0
db 251,247,247,246,246,246,250,250,252,254,255,255,255,255
db 191,64,63,227,156,127,255,129,126,231,25,191,131,63


font2 db 255,255,127,255,255,127,255,255,255,255,251,241,224,0
db 255,255,255,255,255,255,255,255,255,254,193,191,191,127
db 191,191,223,223,223,223,223,191,127,127,191,223,223,223
db 255,255,255,255,255,254,253,243,239,223,223,191,127,127
db 254,253,243,207,63,255,255,255,255,255,255,255,255,255
db 0,192,240,252,254,255,255,255,255,255,255,255,255,255
db 0,0,0,0,0,0,128,192,224,240,248,252,254,254
db 0,0,15,31,31,3,3,3,1,1,0,0,0,0
db 0,116,239,192,128,129,195,255,255,255,255,255,127,31
db 63,63,127,127,255,255,255,255,254,253,251,247,207,191
db 128,231,223,223,191,191,127,127,255,255,255,255,255,255
db 223,223,239,239,243,252,255,255,255,255,255,255,255,255
db 254,253,253,251,231,31,255,255,255,255,255,255,255,255
db 3,14,248,224,128,192,192,192,224,224,224,240,240,240
db 0,0,0,0,0,0,0,0,0,0,0,32,64,128
db 63,63,127,127,127,127,127,127,127,127,127,127,63,63
db 255,255,255,255,223,223,223,223,223,223,191,191,191,127
db 240,240,240,248,248,248,248,248,248,248,248,248,240,240
db 0,0,0,0,0,0,0,0,0,0,1,1,3,3
db 63,31,15,55,55,59,125,126,127,255,255,255,255,255
db 255,255,255,255,255,255,255,255,127,159,175,191,223,223
db 254,255,255,255,255,255,255,255,255,255,255,254,253,253
db 255,255,255,255,255,255,255,127,191,191,223,223,223,223
db 240,240,240,240,240,224,224,224,192,192,192,128,128,0
db 7,7,7,7,7,7,7,15,15,15,31,31,63,127
db 253,253,253,253,251,251,247,255,255,255,255,255,255,255

font3 db 239,247,251,253,252,252,248,248,248,248,240,240,240,240
db 251,251,251,251,253,30,3,3,3,3,3,3,3,3
db 255,251,253,253,253,253,251,255,255,255,255,255,255,255
db 251,251,251,251,251,253,252,252,252,252,254,254,254,254
db 255,255,255,255,255,255,127,31,3,0,0,0,0,0
db 255,255,255,255,255,255,255,255,252,3,63,63,63,127
db 255,255,255,255,255,254,249,199,63,255,255,255,255,255
db 223,191,190,127,127,191,191,222,223,223,239,239,239,223
db 255,255,255,127,127,127,127,255,255,255,255,255,255,255
db 255,254,252,248,248,240,240,240,240,240,248,248,248,248
db 71,123,252,253,251,251,119,15,7,3,0,0,0,0
db 255,255,63,223,232,231,239,239,223,207,7,0,0,0
db 240,240,224,224,96,160,224,224,224,192,128,0,0,0
db 7,7,7,0,7,15,15,15,7,3,0,0,0,0
db 255,255,255,63,216,231,239,239,239,239,7,0,0,0
db 254,254,254,254,112,174,223,223,223,222,128,0,0,0
db 127,127,134,249,251,251,251,251,127,3,0,0,0,0
db 255,255,63,200,247,239,239,239,255,199,0,0,0,0
db 223,223,207,54,185,189,189,189,191,28,0,0,0,0
db 255,255,143,114,253,253,253,253,255,240,0,0,0,0
db 248,248,0,252,252,252,252,252,248,224,0,0,0,0

;; Типа сам СЛОН
;;
;
slon1 db " ABCDEF GHIJ ",13,10
db " KLMNOPQRSTUV ",13,10
db " WXYZabcTdeTTfg o ",13,10
db " hijkTlmTTTTTTn ",13,10
db " pTTqTTTTTTTr ",13,10
db " stuvTTTTTwTTx ",13,10
db " yzАБВГДЕЖЗИЙ ",13,10
db " КЛМНОП РСТУФ ",13,10

; Длина строки
len dw $-slon1

End start



В принципе должен получится слон...


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


Lonely_Raven
****

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

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


Вывод строки


.8086
.MODEL TINY
.CODE
ORG 100h

start:
mov ax,3 ; Очищаем экран, - бит 7=0
int 10h

;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;; Средств ДОС;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;;;;;;; Функция ДОС #9;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;;
;; AH = 09
;; DS:DX = адрес строки, оканчивающейся знаком '$'.
;; Вывод символов на устройство STDOUT, по умлч. - дисплей.
;; Управляющие коды распознаются. При нажатии Ctrl+Break
;; вызывается INT23h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;
;

mov ah,9 ; Функция ДОС - Вывод строки
lea dx,DOSString ; DS:DX - дрес строки, оканчивающейся знаком '$'
int 21h
mov cx,DOSStrLength
dec cx ; Уменьшаем длину, чтобы исключить вывод '$'
push cx ; Сохраняем длину строки
push dx ; и смещение, оно нам еще пригодится
mov si,dx ; DS:SI - дрес строки (для lodsb)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Несколько другая реализация
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; AH = 02
;; DL = код символа
;; Вывод символа на устройство STDOUT, по умлч. - дисплей.
;; Управляющие коды распознаются. При нажатии Ctrl+Break
;; вызывается INT23h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;

mov ah,2
DOSOutput:
lodsb
mov dl,al
int 21h
loop DOSOutput

;;;;;;;;;;;;;;; И еще одна
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; AL = код символа
;; INT 29h
;; Так называемая - НЕДОКУМЕНТИРОВАННАЯ ФУНКЦИЯ ДОС
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
pop si ; Восстанавливаем из стека
pop cx ; длину строки и смещение
DOSUnDocOutput:
lodsb
int 29h
loop DOSUnDocOutput

;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;; Средства BIOS;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;;;;;;; Функция BIOS #13;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; AH = 13h
;; AL = режим вывода (см. установки отдельных битов ниже)
;; = 0 - в строке только символы, атрибут в BL, курсор не сдвигается
;; = 1 - в строке только символы, атрибут в BL, курсор сдвигается
;; = 2 - строка содержит символы и атрибуты, курсор не сдвигается
;; = 3 - строка содержит символы и атрибуты, курсор сдвигается
;; BH = номер видеостраницы
;; BL = атрибут, если режим равен 0 или 1
;; CX = длина строки (исключая атрибуты)
;; DH = координата по вертикали
;; DL = координата по горизонтали
;; ES:BP = адрес строки
;;
;;
;; Значения отдельных битов в AL:
;;
;; │7│6│5│4│3│2│1│0│ AL
;; │ │ │ │ │ │ │ └──── 0=не сдвигать курсор, 1=сдвигать курсор
;; │ │ │ │ │ │ └───── 0=BL имеет атрибут, 1=атрибуты в строке
;; └─┴─┴─┴─┴─┴────── не используется
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;

mov ax,1301h
mov bx,001Fh
mov cx,BIOSStrLength1
mov dx,1000h
lea bp,BIOSString1
int 10h
mov al,3
mov cx,BIOSStrLength2
mov dx,1100h
lea bp,BIOSString2
int 10h
mov ax,4C00h
int 21h

DOSString DB 'Строка, выведенная средствами ДОС',13,10,'$'
DOSStrLength DW $-DOSString
BIOSString1 DB 'Строка, выведенная средствами BIOS',13,10
BIOSStrLength1 DW $-BIOSString1
BIOSString2 DB 'В',1Fh,'т',7,'о',1Fh,'р',8,'а',9,'я',10,' ',7,'с',11,'т',12,'р'
DB 7,'о',7,'к',7,'а',1Eh,' ',1Eh,'о',1Fh,'т',7,' ',7,'B',2,'I',3,'O',4,'S',5
BIOSStrLength2 DW 22

END start




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


Lonely_Raven
****

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

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


Графический курсор мыши



.8086
.MODEL TINY
.CODE
ORG 100h

START:
xor ax,ax ; Сбросить драйвер
int 33h ;
inc ax ; Если AX=0FFFFh - драйвер установлен
jz MouseInstalled ;
lea dx,Error ; Не установлен...
mov ah,9 ;
int 21h ;
jmp Exit ;

MouseInstalled:
mov ax,13h ; Устанавливаем графический видеорежим
int 10h
mov ax,9 ; Установить графический курсор мыши
mov bx,8 ; Положение координатной точки от левого края
mov cx,8 ; от верхнего края
lea dx,M1 ; Адрес маски курсор и экрана
int 33h
mov ax,0A000h ;
mov es,ax ;
xor di,di ;
mov cx,32000 ;

NextRandPix: ;
inc ax ;
stosw ;
loop NextRandPix ; Заполняем экран разноцветными пикселями
mov ax,1 ; Отобразить курсор мыши
int 33h

@Wait:
mov ax,3 ; Ожидание нажатия клавиши (любой)
int 33h ;
and bx,7
jz @Wait

Exit:
mov ax,4C00h
int 21h

mes db 'CopyRight xxxxxxxh','$'
mes1 db 'The Nick Shadow Maverick','$'
Error db 'Драйвер мыши не установлен, либо не соответствует стандарту Microsoft$'

; Желательно, чтобы маска экрана была инверсна самому изображению
; если, конечно нет каких либо весомых причин, чтобы делать иначе :)
; 1234567890123456
m1 dw 1001110000101110b;1
dw 0110101111100100b;2
dw 0000110001101010b;3
dw 0110111110101110b;4
dw 0110100001101110b;5
dw 1111111111111111b;6
dw 0001110000110000b;7
dw 0110110111101111b;8
dw 0000110001110001b;9
dw 0111010111111110b;10
dw 0000010000100001b;11
dw 1111111111111111b;12
dw 0000000000000000b;13
dw 1111110000111111b;14
dw 1111110000111111b;15
dw 1111110000111111b;16
; Само изображение курсора
; 0123456789012345
m2 dw 0110001111010001b;1
dw 1001010000011011b;2
dw 1111001110010101b;3
dw 1001000001010001b;4
dw 1001011110010001b;5
dw 0000000000000000b;6
dw 1110001111001111b;7
dw 1001001000010000b;8
dw 1111001110001110b;9
dw 1000101000000001b;10
dw 1111101111011110b;11
dw 0000000000000000b;12
dw 1111111111111111b;13
dw 0000001111000000b;14
dw 0000001111000000b;15
dw 0000001111000000b;16
END START



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


Lonely_Raven
****

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

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


Вывод точки средствами BIOS


.8086
.MODEL TINY
.CODE
ORG 100h

START:
mov ax,13h ; Устанавливаем режим 320х200х256цв
int 10h

; Вывод пикселя
; AH = 0C
; AL = цвет (XOR'ится с текущим значением пикселя, если бит 7=1)
; BH = номер видеостраницы
; CX = номер столбца (с нуля)
; DX = номер строки (с нуля)

mov ah,0Ch ; В данном случае: вывод пикселя, на видеостраницу #0, со
mov bh,0 ; стартовым смещением от начала экрана 0,0
lea si,Char_A ; DS:[SI] - адрес матрицы пикселей
xor cx,cx
mov dx,cx ; DX=CX=0
cld ; Инкремент SI

NextStroke:
lodsb ; Получаем в AL очередной байт матрицы
inc cx ; Увеличиваем X
int 10h ; Обращаемся к BIOS
cmp cx,StrokeLength ; Проверяем конец строки
jne NextStroke
xor cx,cx ; Заново обнуляем CX
inc dx ; Инкремент по Y
cmp dx,StrokeNumber
jne NextStroke

mov ah,0 ; Ожидаем нажатия клавиши
int 16h
mov ax,4C00h ; Завершаем работу
int 21h

StrokeLength dw 12 ; Длина строки
StrokeNumber dw 12 ; Количество строк

; Массив данных "ASM"
; 1 2 3 4 5 6 7 8 9 10 11 12
Char_A db 00,00,15,15,00,00,00,15,15,00,00,00; 1
db 00,15,00,00,15,00,15,00,00,15,00,00; 2
db 00,15,00,00,15,00,15,00,00,00,00,00; 3
db 00,15,15,15,15,00,00,15,15,00,00,00; 4
db 00,15,00,00,15,00,00,00,00,15,00,00; 5
db 00,15,00,00,15,00,15,00,00,15,00,00; 6
db 00,15,00,00,15,00,00,15,15,00,00,00; 7
db 00,00,00,14,00,00,00,14,00,00,00,00; 8
db 00,00,00,14,14,00,14,14,00,00,00,00; 9
db 00,00,00,14,00,14,00,14,00,00,00,00; 10
db 00,00,00,14,00,00,00,14,00,00,00,00; 11
db 00,00,00,14,00,00,00,14,00,00,00,00; 12
END START



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


Профи
****

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

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


Вывод точки в режиме 13h



.8086
.MODEL TINY
.CODE
ORG 100h

START: ; Сразу оговорка, алгоритм далеко не самый совершенный :)
mov ax,13h
int 10h
mov ax,0A000h
mov es,ax ; ES - сегмент начала видеопамяти
mov ax,320 ; Ширина экрана
mul Y ; Вычисляем относительный номер строки
cmp dx,0 ;
jne exit ; Если больше чем надо - выходим (слаб. проверка)
mov bx,ax ;
add bx,X ; BX - смещение
mov al,4 ; Красный цвет
mov es:[bx],al ; Помещаем в видеопамять
mov ah,0 ; Ждем нажатия клавиши
int 16h ;

Exit:
mov ax,3
int 10h
mov ax,4C00h
int 21h

Y dw 100 ; Вертикаль
X dw 160 ; Горизонталь

END START

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 19.11.2024 20:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"