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