Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

Int 21h ;Вызов dos

В случае ошибки операция устанавливает флаг CF и возвращает код

ошибки в регистре AX.

ПРОГРАММА: ПОСТРАНИЧНАЯ ПЕЧАТЬ С ЗАГОЛОВКАМИ

________________________________________________________________

__________________________________________________________________________

TITLE PRTNAME (COM) Ввод и печать имен

CODESG SEGMENT PARA PUBLIC 'CODE'

ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG

ORG 100H

BEGIN: JMP SHORT MAIN

; -----------------------------------------------------

NAMEPAR LABEL BYTE ;Список параметров

MAXNLEN DB 20 ; максимальная длина имени

NAMELEN DB ? ; длина введенного имени

NAMEFLD DB 20 DUP(' ') ; введенное имя

;Строка заголовка:

HEADG DB 'List of Employee Names Page '

PAGECTR DB '01',0AH,0AH

FFEED DB 0CH ;Перевод страницы

LFEED DB 0AH ;Перевод строки

LINECTR DB 01

PROMPT DB 'Name? '

; -----------------------------------------------------

MAIN PROC NEAR

CALL Q10CLR ;Очистить экран

CALL M10PAGE ;Установка номера страницы

A2LOOP:

MOV DX,0000 ;Установить курсор в 00,00

CALL Q20CURS

CALL D10INPT ;Ввести имя

CALL Q10CLR

CMP NAMELEN,00 ;Имя введено?

JE A30 ; если нет - выйти,

CALL E10PRNT ; если да - подготовить

; печать

JMP A20LOOP

A30:

MOV CX,01 ;Конец работы:

LEA DX,FFEED ; один символ

CALL P10OUT ; для прогона страницы,

RET ; возврат в DOS

MAIN ENDP

; Ввод имени с клавиатуры:

; -----------------------

D10INPT PROC NEAR

MOV AH,40H ;Функция

MOV BX,01 ; вывода на экран

MOV CX,05 ; 5 символов

LEA DX,PROMPT

Int 21h ;Вызов dos

MOV AH,0AH ;Функция ввода с клавиатуры

LEA DX,NAMEPAR

Int 21h ;Вызов dos

RET

D10INPT ENDP

; Подготовка для печати:

; ----------------------

E10PRNT PROC NEAR

CMP LINECTR,60 ;Конец страницы?

JB E20 ; нет - обойти

CALL M10PAGE ; да - печатать заголовок

E20: MOV CH,00

MOV CL,NAMELEN ;Число символов в имени

LEA DX,NAMEFLD ;Адрес имени

CALL P10OUT ;Печатать имя

MOV CX,01 ;Один

LEA DX,LFEED ; перевод строки

CALL P10OUT

Inc linectr ;Увеличить счетчик строк

E10PRNT ENDP

; Подпрограмма печати заголовка:

; -----------------------------

M10PAGE PROC NEAR

CMP WORD PTR PAGECTR,3130H ;Первая страница?

JE M30 ; да - обойти

MOV CX,01 ;

LEA DX,FFEED ; нет --

CALL P10OUT ; перевести страницу,

MOV LINECTR,03 ; установить счетчик строк

M30:

MOV CX,36 ;Длина заголовка

LEA DX,HEADG ;Адрес заголовка

M40:

CALL P10OUT

INC PAGECTR+1 ;Увеличить счетчик страниц

CMP PAGECTR+1,3AH ;Номер страницы = шест.xx3A?

JNE M50 ; нет - обойти,

MOV PAGECTR+1,30H ; да - перевести в ASCII

INC PAGECTR

M50: RET

M10PAGE ENDP

; Подпрограмма печати:

; -------------------

P10OUT PROC NEAR ;CX и DX установлены

MOV AH,40H ;Функция печати

MOV BX,04 ;Номер устройства

INT 21H ;Вызов DOS

RET

P10OUT ENDP

; Очистка экрана:

; --------------

Q10CLR PROC NEAR

MOV AX,0600H ;Функция прокрутки

MOV BH,60H ;Цвет (07 для ч/б)

MOV CX,0000 ;От 00,00

MOV DX,184FH ; до 24,79

INT 10H ;Вызов BIOS

RET

Q10CLR ENDP

; Установка курсора (строка/столбец):

; ----------------------------------

Q20CURS PROC NEAR ;DX уже установлен

MOV AH,02 ;Функция установки курсора

MOV BH,00 ;Страница № 0

INT 10H ;Вызов BIOS

RET

Q20CURS ENDP

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.19.1. Постраничная печать с заголовком.

Программа, приведенная на рис.19.1, аналогична программе на рис.9.1,

за исключением того, что после ввода имен с клавиатуры выводит их не на

экран, а на печатающее устройство. Каждая напечатанная страница содержит

заголовок и через двойной интервал список введенных имен в следующем виде:

List of Employee Names Page 01

Clancy Alderson