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

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


Lonely_Raven
****

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

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


F A Q

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


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

 



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