Скачиваний:
27
Добавлен:
15.09.2014
Размер:
10.53 Кб
Скачать

ПРИМЕР Файл lst_7_01.inc Процедуры для вывода символа и посылки команды на принтер LPT1.

; Файл lst_7_01.inc, 9.05.2000. ; Автор текста программы Кулаков Владимир Геннадьевич. DATASEG PErrTxt DB LIGHTRED,12,27,"Принтер не готов к печати",0 DB YELLOW,24,29,"Нажмите любую клавишу",0 ENDS CODESEG ;***************************** ;* ВЫВЕСТИ СИМВОЛ НА ПРИНТЕР * ;* Параметры: * ;* AL - код символа. * ;***************************** PROC OutCharToLPT1 near pusha ; Вывести символ на печать mov AH,0 mov DX,0 int 17h test AH,00101001b jnz @@PrintingError popa ret ; ВЫДАТЬ СООБЩЕНИЕ ОБ ОШИБКЕ И ВЫЙТИ ИЗ ПРОГРАММЫ @@PrintingError: ; Перейти в текстовый режим mov ax,3 int 10h ; Скрыть курсор - убрать за нижнюю границу экрана mov [ScreenString],25 mov [ScreenColumn],0 call SetCursorPosition ; Вывести сообщение об ошибке mov SI,offset PErrTxt call ShowColorString call ShowColorString call GetChar ; Выход в DOS mov AH,4Ch int 21h ENDP OutCharToLPT1 ;****************************************** ;* ПОСЛАТЬ КОМАНДУ НА ПРИНТЕР * ;* Параметры: * ;* DS:SI - указатель на строку команды. * ;* Первый байт строки содержит количество * ;* байтов команды, посылаемых на принтер. * ;****************************************** PROC OutCommandToLPT1 near pusha cld ; Загрузить счетчик байтов команды в CX lodsb xor CX,CX mov CL,AL @@OutNextByte: lodsb call OutCharToLPT1 loop @@OutNextByte popa ret ENDP OutCommandToLPT1 ENDS Файл lst_7_02.inc Процедуры для захвата русского шрифта и отображения его в режиме 320x200.

; Файл lst_7_02.inc, 9.05.2000. ; Автор текста программы Кулаков Владимир Геннадьевич. DATASEG ; Буфер для сохранения шрифта (16x256 байт) Font8x16 DB 4096 DUP(?) ; Позиция отображаемого символа FontString DW ? ;номер строки шрифта FontColumn DW ? ;номер колонки шрифта ENDS CODESEG ;**************************************************** ;* СЧИТЫВАНИЕ "РУССКОГО" ШРИФТА ИЗ ВИДЕОКОНТРОЛЛЕРА * ;**************************************************** PROC GrabRusFont near pushad ; Перепрограммировать синхронизатор cli mov DX,3C4h ; Установить последовательную адресацию ; ячеек видеопамяти mov AX,0704h out DX,AX sti ; Перепрограммировать графический контроллер mov DX,3CEh ; Выбрать для считывания плоскость 2 mov AX,0204h out DX,AX ; Запретить четную-нечетную адресацию mov AX,0005h out DX,AX ; Установить окно доступа по адресу A0000h mov AX,0006h out DX,AX ; Скопировать шрифт в буфер Font8x16 mov AX,0A000h mov ES,AX mov SI,0 mov BX,offset Font8x16 mov DX,256 @@M0: mov CX,16 @@M1: mov AL,[ES:SI] mov [BX],AL inc BX inc SI loop @@M1 add SI,16 dec DX jnz @@M0 popad ret ENDP GrabRusFont ;************************************************* ;* ОТОБРАЗИТЬ ШРИФТ НА ЭКРАНЕ В РЕЖИМЕ 320 X 200 * ;************************************************* PROC ShowRusFont near pusha push ES mov AX,0A000h mov ES,AX mov SI,offset Font8x16 xor DI,DI mov [FontString],0 mov DL,0 ;цвет фона символа mov DH,15 ;цвет символа @@m0: mov [FontColumn],0 push DI @@m1: ; Отобразить очередной символ mov AH,16 ;число строк в маске символа @@m2: ; Отобразить строку изображения символа mov AL,[SI] ;загрузить очередной байт маски mov CX,8 @@m3: ; Вывести на экран очередную точку изображения rol AL,1 jc @@m4 mov [ES:DI],DL jmp short @@m5 @@m4: mov [ES:DI],DH @@m5: inc DI loop @@m3 inc SI add DI,320-8 dec AH jnz @@m2 sub DI,320*16-8-2 inc [FontColumn] cmp [FontColumn],32 jb @@m1 pop DI add DI,320*(16+4) inc [FontString] cmp [FontString],8 jb @@m0 pop ES popa ret ENDP ShowRusFont ENDS Файл lst_7_04.inc Процедура для рисования тестового изображения (графика и пучка линий) на экране.

; Файл lst_7_04.inc, 9.05.2000. ; Автор текста программы Кулаков Владимир Геннадьевич. DATASEG ; Текстовые сообщения TTxt DB 25,9,"Чтобы получить копию изображения " DB "с экрана, включите принтер,",0 DB 26,9,"вставьте бумагу, установите режим " DB "ON-LINE, а затем нажмите",0 DB 27,9,"любую клавишу на клавиатуре и ждите " DB "завершения печати",0 ; Обозначения для графика GTxt DB 5,3,"Y",0, 12,35,"X",0 DB 7,1,"5",0, 8,1,"4",0, 9,1,"3",0, 10,1,"2",0 DB 11,1,"1",0, 12,1,"0",0, 13,0,"-1",0, 14,0,"-2",0 DB 15,0,"-3",0, 16,0,"-4",0, 17,0,"-5",0 DB 13,8,"1 2 3 4 5",0 ; График синуса GSin DD 0,19,38,55,71,83,92,97,98,96 DD 90,80,66,51,33,13,-5,-25,-43,-60 DD -74,-86,-94,-98,-98,-94,-87,-76,-62,-45 DD -27,-8,11,30,48,65,78,88,95,98 DD 97,93,84,72,57,40,22,2,-17,-36 DD -53,-69,-81,-91,-97,-98,-96,-91,-81,-68 DD -53,-35,-16,3,22,41,58,73,85,93 DD 98,98,95,88,78,64,48,30,10,-9 DD -28,-46,-63,-77,-87,-95,-98,-98,-93,-85 DD -74,-59,-43,-24,-4,14,33,51,67,80 ; График косинуса GCos DD 50,49,46,41,34,27,18,8,-1,-11 DD -20,-29,-36,-42,-47,-49,-49,-48,-44,-39 DD -32,-24,-15,-5,4,14,23,31,38,44 DD 48,49,49,47,43,37,30,21,12,2 DD -7,-16,-25,-33,-40,-45,-48,-49,-49,-46 DD -41,-35,-28,-19,-9,0,10,19,28,36 DD 42,46,49,49,48,45,40,33,25,16 DD 6,-3,-12,-22,-30,-37,-43,-47,-49,-49 DD -47,-44,-38,-31,-23,-13,-3,6,15,24 DD 33,39,45,48,49,49,46,42,36,29 ENDS CODESEG ;*********************************** ;* НАРИСОВАТЬ ГРАФИК И ПУЧОК ЛИНИЙ * ;*********************************** PROC DrawFigure near pusha ; Вывести текстовое сообщение mov [DefaultColor],LIGHTGREEN mov SI,offset TTxt call GShowString call GShowString call GShowString ; Нарисовать ось Y графика mov [Color],WHITE mov [dword ptr X0],24+3 mov [dword ptr Y0],100 mov [dword ptr X1],24+3 mov [dword ptr Y1],300 call EVGALine ; Нарисовать ось X графика mov [dword ptr X0],24+3 mov [dword ptr Y0],200 mov [dword ptr X1],24+240+3 mov [dword ptr Y1],200 call EVGALine ; Нарисовать метки по оси Y mov CX,11 mov [dword ptr X0],24 mov [dword ptr Y0],200-16*5 mov [dword ptr X1],24+7 mov [dword ptr Y1],200-16*5 @@Y0: call EVGALine add [dword ptr Y0],16 add [dword ptr Y1],16 loop @@Y0 ; Нарисовать метки по оси X mov CX,5 mov [dword ptr X0],24+5*8+3 mov [dword ptr Y0],200-4 mov [dword ptr X1],24+5*8+3 mov [dword ptr Y1],200+4 @@X0: call EVGALine add [dword ptr X0],5*8 add [dword ptr X1],5*8 loop @@X0 ; Вывести обозначения осей и меток mov [DefaultColor],WHITE mov SI,offset GTxt mov CX,14 @@T0: call GShowString loop @@T0 ; Нарисовать графики синуса и косинуса mov CX,99 mov SI,offset GSin mov DI,offset GCos mov [dword ptr X0],24+3 mov [dword ptr X1],24+3+2 @@G0: mov EAX,[SI] add EAX,200 mov [dword ptr Y0],EAX mov EAX,[SI+4] add EAX,200 mov [dword ptr Y1],EAX call EVGALine mov EAX,[DI] add EAX,200 mov [dword ptr Y0],EAX mov EAX,[DI+4] add EAX,200 mov [dword ptr Y1],EAX call EVGALine add SI,4 add DI,4 add [dword ptr X0],2 add [dword ptr X1],2 loop @@G0 ; Нарисовать пучок линий mov [dword ptr X0],530-100 mov [dword ptr Y0],200+100 mov [dword ptr X1],530+100 mov [dword ptr Y1],200-100 mov CX,50 @@NextLine0: call EVGALine sub [dword ptr Y0],4 add [dword ptr Y1],4 loop @@NextLine0 mov [dword ptr X0],530-100 mov [dword ptr Y0],200-100 mov [dword ptr X1],530+100 mov [dword ptr Y1],200+100 mov CX,50 @@NextLine1: call EVGALine add [dword ptr X0],4 sub [dword ptr X1],4 loop @@NextLine1 popa ret ENDP DrawFigure ENDS

Соседние файлы в папке Учебник