Помощь в написании студенческих работ
Антистрессовый сервис

Программа для перегляду текстових файлів різного розміру

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT, и AT: Пер. с англ. — Финансы и статистика, 1992. — 544 с. Касаткин А. И. Профессиональное программирование на языке Си. Системное программирование. — Минск: Выш.шк., 1993. — 301 с. Зараз існує безліч програм для перегляду текстових файлів. Аналогом даної є такі програми як wiev, wpwiev та інші. Финогенов К. Г… Читать ещё >

Программа для перегляду текстових файлів різного розміру (реферат, курсовая, диплом, контрольная)

Міністерство освіти та науки України.

Кіровоградський Державний Технічний університет.

Кафедра програмного забезпечення.

Курсова робота.

з дисципліни «Програмування на мові ASM-86» на тему:

" Программа для перегляду текстових файлів різного розміру" .

Зміст.

Вступ.

1. Призначення та область застосування програми.

2. Огляд існуючих програм.

3. Опис і обґрунтування проектних рішень системи.

4. Інструкція користувача.

5. Основні висновки.

Список літератури.

Текст програми.

Вступ.

Інформація — цінна річ, тому для її збереження в сучасному суспільстві використовують все частіше персональний комп`ютер. При перегляді текстових файлів виникає потреба в зручних в користуванні та розумінні програм переглядачів текстових файлів. Переді мною була поставлена задача розробити таку програму з мінімальним набором елементарних функцій для роботи з текстом.

1. Призначення та область застосування програми.

Дана програма призначена для перегляду текстових файлів різного розміру. Програма може бути використана будь яким користувачем ЕОМ для перегляду потрібної інформації.

2. Огляд існуючих програм.

Зараз існує безліч програм для перегляду текстових файлів. Аналогом даної є такі програми як wiev, wpwiev та інші.

3. Опис і обґрунтування проектних рішень системи.

Дана програма написана на мові асемблера з використанням переривань для роботи з файлами та текстом. Вона працює на будь якій машині де є DOS або WINDOWS. При написанні програми для реалізації прокрутки екрану вверх та вниз використовується читання тексту порціями. В програмі реалізовані такі можливості як прокрутка вверх та вниз по рядкові та сторінку цілком, коротка допомога, пошук слова та інші потрібні речі. Так як програма використовує пряме читання файлів на диску то при використанні WINDOWS NT треба бути уважним при перегляді файлів і мати дозвіл, но перегляд.

4. Інструкція користувача.

Для запуску програми потрібно набрати в командному рядку ім`я запускного файлу та замість параметра ім`я файлу для перегляду. Але якщо програма запущена без параметра то вона запросить ввести ім`я. Після чого появиться екран з відкритим файлом. В низу екрану постійно видно підказку. Для виклику допомоги досить нотиснути клавішу? або F1 або Alt-H. Щоб вийти з програми потрібно натиснути Alt — Q.

Висновки.

При постійній роботі з комп`ютером досить часто потрібно переглянути файл. Тому дана програма є незамінимою в роботі. Вона є простою в користуванні та розумінні. Працює майже на всіх машинах без особливої потреби в ресурсах.

Список літератури.

1. Финогенов К. Г. Самоучитель по системным функциям MS-DOS. — М.: Радио и связь, Энтроп, 1995. — 382 с.

2. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT, и AT: Пер. с англ. — Финансы и статистика, 1992. — 544 с.

3. Касаткин А. И. Профессиональное программирование на языке Си. Управление ресурсами: Справочное пособие. — Минск: Выш.шк., 1992. — 432 с.

4. Касаткин А. И. Профессиональное программирование на языке Си. Системное программирование. — Минск: Выш.шк., 1993. — 301 с.

5. Электронный справочник! Драйвер Help фирмы Flambeaux Software версия 1.2. Адаптировал С. М. Абель.

6. The Norton Guides, Copyright © 1987 by Peter Norton Computing — Assembly language, Прерывания.

Текст програми.

Bios Segment At 40h.

Db 16 Dup (?).

Flag Dw?

Db 56 Dup (?).

Cols Dw?

Db 23 Dup (?).

A6845 Dw?

Bios Ends.

Cseg Segment Para Public 'CODE'.

Assume CS: Cseg, DS: Cseg, ES: Nothing.

Org 100h.

List Proc Near.

Jmp Start.

; Необходимые данные и рабачие области.

Special Db 1eh; Байты.

Normal Db 02h;

Foregrd Db 07h;

Blink Equ 0Fh; атрибутов.

CR Equ 0Dh.

LF Equ 0Ah.

EOF Equ 1Ah.

Eor Equ 1.

Nodata Equ 2.

Crt_Col Dw 0.

Crt_Buf Dw 0.

Crt_Prt Dw 0.

Index Dw 0.

Reclen Dw 0.

Row Db 2.

Col Db 1.

Attr Db 02h.

Blknum Db 0.

Scroll Dw 0.

First Dw 0.

Current Dw 0.

Last Dw 0.

Recaddr Dw 0.

Handle Dw 0.

Psize Dw 16.

Blksize Dw 0.

Switch1 Db 0.

Switch2 Db 0.

Numlf Db 1.

Numcr Db 0.

char_msk db 0ffh.

min_disp db 0.

TextMax Db 32.

TextLen Db 0.

TextBuf Db 32 Dup (0).

Prompt Db 'Command:'.

Spaces Db 32 Dup (32).

Db 'Keys: PgUp PgDn Arrows ESC=exit?=Help '.

Pr_Len Equ This Byte — Prompt.

TextMsg Db '*** Текст не найден ***'.

EofMsg Db ' *** Конец файла ***'.

EofLen Equ This Byte — EofMsg.

Work Db 'LIST '.

Keyin Db 64.

Keyout Db 0.

Filenm Db 76 Dup (0).

Askfile Db 13,10,'Введите имя файла: $'.

Openmsg Db ' Open failed, return code='.

Opencod Dw '00'.

Db '$'.

Code2 Db 'File not found $'.

Code3 Db 'Path not found $'.

Code4 Db 'Too many files $'.

Code5 Db 'Access denied $'.

Org offset Work+256.

Workx Equ $-Work.

What1 Db 13,32,27,81; Cr, Sp, Esc, Q.

Db 68,85,63,72; D, U,?, H.

Db 47,82,76,84 ;/, R, L, T.

Db 80,65,78,88; P, A, N, X.

Db 66; B.

Num1 Equ $-What1.

What2 Db 77,75,73,81 ;->,<-, PgUp, PgDn.

Db 71,72,61,80; HOME,^, F3, v.

Db 59,68,79,119; F1, F10, END,^HOME.

Db 115,132,118 ;^<-,^PgUp,^PgDn.

db 46,31.

Num2 Db $-What2.

Where1 Dw Offset NxtPage, Offset NxtPage, Offset Close, Offset Close.

Dw Offset NxtPage, Offset Back, Offset Got_H, Offset Got_H.

Dw Offset Got_S, Offset Right, Offset Left, Offset Top.

Dw Offset Up1, Offset Got_Rs, Offset Down1, Offset Close.

Dw Offset Bottom.

Where2 Dw Offset Right, Offset Left, Offset Back, Offset NxtPage.

Dw Offset Top, Offset Up1, Offset Got_Rs, Offset Down1.

Dw Offset Got_H, Offset Close, Offset Bottom, Offset Home.

Dw Offset Scroll0, Offset Top, Offset Bottom.

dw offset ctrl, offset strip.

HelpMsg Db CR, 9,'Просмотрщик файлов V 1.0 '.

Db CR, LF.

Db CR, LF, 9,'Commands and keys:'.

Db CR, LF.

Db CR, LF, 9,' - or Space ', 9,9,'continue to next page'.

Db CR, LF, 9,'ESC, Q, X or F10', 9,' terminate'.

Db CR, LF, 9,'HOME, T or Ctl PgUp', 9,' restart from Top of file'.

Db CR, LF, 9,'END, B or Ctl PgDn', 9,' skip to Bottom of file'.

Db CR, LF, 9,'Ctl Home ', 9,9,' restart from top of block'.

Db CR, LF, 9,'PgDn or D ', 9,9,' scroll Down one page'.

Db CR, LF, 9,'PgUp or U ', 9,9,' scroll Up one page'.

Db CR, LF, 9,'H,? or F1 ', 9,9,' list Help for keys'.

Db CR, LF, 9,' - or L ', 9,9,'scroll Left 20 columns'.

Db CR, LF, 9,'- or R ', 9,9,'scroll Right 20 columns'.

Db CR, LF, 9,'Ctl - ', 9,9,'reset scroll to column 1'.

Db CR, LF, 9,' or P ', 9,9,'Previous, up one line'.

Db CR, LF, 9,' or N ', 9,9,'Next, down one line'.

Db CR, LF, 9,'/text ', 9,9,' find text'.

Db CR, LF, 9,'A or F3 ', 9,9,' find text Again'.

db CR, LF, 9, «ALT S», 9,9," do/don't Strip parity bit".

db «(toggle)».

db CR, LF, 9, «ALT C», 9,9," do/don't display Control".

db «chars».

db «(toggle)».

Db '$'.

Start: Mov BX, PgmSize.

Mov AH, 4Ah; Модифицируем память.

Int 21h;

Call GetParm.

Openit: Call Open.

Jz Init.

Ret.

Close: Mov BX, Handle.

Mov AH, 3Eh; Закрываем файл.

Int 21h.

Mov AX, 0600h; Очищаем экран.

Sub BL, BL.

Mov BH, Foregrd.

Sub CX, CX.

Mov DX, 184Fh.

Int 10h.

Ret; Возвращаемся в DOS.

; Выделяем память для буфера файла.

Init: Mov BX, 1000h.

GetMem: Mov AH, 48h.

Int 21h.

Jc GetMem.

Mov RecAddr, AX.

Mov AX, BX.

Sub AX, 32.

Mul Psize.

Mov Blksize, AX.

Call InitCrt.

Call Set1.

Call Set25.

Read1: Call ReadBlk; Загружаем следующий блок.

Mov BL, Normal.

Mov Attr, BL.

Jnz Read2.

Jmp AtEnd.

Read2: Dec Row.

Cmp Numlf, 0.

Je GetNext.

Inc Row.

Mov Col, 1.

GetNext:

Mov AX, Index; Есть запись в буфере?

Cmp AX, Last.

Jb GotNext.

Jmp AtEnd.

GotNext:

Call ListOne; Выводим следующую запись.

Mov CX, Reclen.

Add Col, CL.

Mov DH, Row.

Cmp DH, 25.

Jne TestEor.

Cmp NumLF, 0.

Jne KeyRead.

TEstEor: Jmp Read2; Конец записей?

KeyRead: Mov AH, 0; Ждем нажатия клавиши.

Int 16h.

Mov SI, Offset Spaces; Очищаем строку 25.

Call Msg25.

; Обработка нажатой клавиши.

Cmp AL, 27; ESC выход.

Jne Chk00.

Jmp Close.

Chk00: Cmp AL, 0; Управляющий символ?

Jne Chk97; нет, буква.

Xchg AL, AH; да, считываем расширенный код.

Mov DI, Offset What2.

Mov BP, Offset Where2.

Mov CL, Num2.

Jmp Short Control.

Chk97: Cmp AL, 97; Нижний регистр?

Jl Upper.

Sub AL, 32; да, преобразуем в верхний.

Upper: Mov DI, Offset What1.

Mov BP, Offset Where1.

Mov CL, Num1.

Control: Mov SI, DI; Ищем букву/код.

Mov CH, 0; в таблице.

Push DS.

Pop ES.

Repnz Scasb.

Jne KeyRead.

Dec DI.

Sub DI, SI.

Shl DI, 1.

Mov BX, Word Ptr DS: [DI] [BP].

Jmp BX; Переходим на обработку нажатой.

; клавиши.

Right: Cmp Scroll, 220; key right.

Jb Got77.

Jmp KeyRead.

Got77: Add Scroll, 20.

Jmp BackUp.

Scroll0: Mov Scroll, 0; key ctrl-left.

Jmp BackUp.

Left: Cmp Scroll, 0; key left.

Jne Got75.

Jmp KeyRead.

Got75: Sub Scroll, 20.

Jmp BackUp.

Got_Rs: Call ReScan; F3.

Jmp NxtPage.

Got_H: Call Help; key F1.

Call Back1.

Jmp KeyRead.

strip: xor char_msk, 080h; выводить / игнор русские символы.

call Back1.

jmp NxtPage.

ctrl: xor min_disp, 020h; выводить / игнор символы 0−31.

call Back1.

jmp NxtPage.

Got_S: Call Scan; Поиск текста.

Jmp NxtPage.

NxtPage:; key (nextpage).

Mov AX, Index.

Cmp AX, Last; end of file?

Jae BWait.

Mov Current, AX.

Mov DH, 2.

Mov Row, DH.

Call Clear.

Jmp TestEor.

Up1: Cmp First, 0; Уже в начале?

Jne Up12; нет, scroll up one line.

Bwait: Jmp AtEnd; да, пропускаем.

Up12: Call Scroll_Up.

Mov AX, Index.

Mov Current, AX.

Mov AX, First.

Mov Index, AX.

Call UpOne.

Mov Row, 2.

Mov Col, 1.

Call ListOne.

Mov AX, Current.

Mov Index, AX.

Call UpOne.

Jmp KeyRead.

Home: Mov Index, 0.

Jmp NxtPage.

AtEnd: Mov SI, Offset EofMsg; Выводим сообщение 'End-of-file'.

Call Msg25.

Jmp KeyRead.

Bottom: Mov AX, Last; Позиция на последнюю запись.

Mov Index, AX.

Jmp BackUp.

Top: Sub CX, CX; В самое начало файла.

Mov AL, 0.

Sub DX, DX.

Mov AH, 42h.

Mov BX, Handle.

Int 21h.

Call Clear.

Mov Row, 2.

Mov Col, 1.

Mov First, 0.

Mov Blknum, 0.

Jmp Read1.

Back: Call Back1.

BackUp: Call Back1.

Jmp Nxtpage.

Down1: Mov AX, Index; scroll down one line.

Cmp AX, Last; Конец файла?

Jb Down2.

Jmp AtEnd.

Down2: Mov Current, AX.

Mov AX, First.

Mov Index, AX.

Call GetRec.

Mov AX, Index.

Down3: Call Scroll_Dn.

Mov AX, Index.

Mov First, AX.

Mov AX, Current.

Mov Index, AX.

Mov Row, 24.

Mov Col, 1.

Jmp GetNext.

; Scroll Up one page.

Back1 Proc Near.

Mov CX, 23.

Back0: Call UpOne.

Loop Back0.

Mov Col, 1.

Ret.

Back1 Endp.

; Scroll up one line.

UpOne Proc Near.

Push CX.

Mov CX, 2.

Cmp Index, 0; Уже на верху?

Je Up1d; да, не изменяем.

Up1a: Mov ES, Recaddr.

Up1b: Mov DI, Index.

Cmp ES: Byte Ptr[DI], LF.

Je Up1c.

Dec Index.

Jnz Up1b.

Up1e: Mov Index, 0.

Jmp Up1d.

Up1c: Dec Index.

Jz Up1d.

Loop Up1b.

Inc Index.

Up1d: Pop CX.

Ret.

UpOne Endp.

; Помещает записи в буфер экрана.

Assume CS: Cseg, DS: Cseg, ES: Nothing.

Show Proc Near.

Push AX.

Push BX.

Push CX.

Push DX.

Push DI.

Push ES.

Push SI.

Sub AX, AX.

Mov AL, DH.

Sub DH, DH.

Mov DI, DX.

Dec DI.

Dec AX.

Cmp CX, 0.

Jng Dsp9.

Cmp CX, 80.

Jbe Dsp1.

Mov CX, 80.

Dsp1: Mul Crt_Col.

Add DI, AX.

Shl DI, 1.

Mov DX, Crt_Prt.

Mov ES, Crt_Buf.

Mov BH, Attr.

Dsp2: Lodsb.

dsp2a: Cmp AL, min_disp.

Jae Dsp3.

Jmp Dsp4.

Dsp3: Mov BL, AL.

Call Displa.

Dsp4: Loop Dsp2.

Dsp9: Pop SI.

Pop ES.

Pop DI.

Pop DX.

Pop CX.

Pop BX.

Pop AX.

Ret.

Displa: In AL, DX.

Test AL, 1.

Jnz Displa.

Cli.

Disphi: In AL, DX.

Test AL, 1.

Jz Disphi.

Mov AX, BX.

Stosw.

Sti.

Ret.

Show Endp.

; Показывает следующую запись.

ListOne Proc Near.

Cmp Row, 2.

Jne List1.

Mov AX, Index.

Mov First, AX.

List1: Call GetRec.

Mov CX, Reclen.

Sub CL, Numlf.

Sub CL, Numcr.

Mov Reclen, CX.

Or CX, CX.

Jz List9.

Mov SI, Offset Work.

Cmp Row, 2.

Jae List2.

Mov Row, 2.

List2: Mov DH, Row.

Mov DL, Col.

Add SI, Scroll.

Sub CX, Scroll.

Call Show.

List9: Inc Row.

Mov BL, Normal.

Mov Attr, BL.

Ret.

ListOne Endp.

; GetRec — извлекает следующую запись.

GetRec Proc Near.

Push ES.

Push CX.

Push SI.

Push DI.

GetR: Test Switch1, Eor.

Jz GetR0.

Mov AX, Last.

Mov Index, AX.

Call ReadBlk.

Jnz GetR0.

Jmp GetRd.

GetR0: Sub DI, DI.

Mov Word Ptr NumLF, DI.

And Switch2,0FFh-Nodata.

Mov ES, RecAddr.

GetR2: Mov SI, Index.

Mov AL, ES: [SI].

Cmp AL, Eof.

Jne GetR3.

Mov Reclen, DI.

Or Switch1, Eor.

Jmp GetR.

GetR3: And AL, char_msk.

Cmp AL, 09h.

Jne GetR4.

Mov CX, DI.

Add CX, 8.

And CX, 0FFF8h.

Sub CX, DI.

GetR3b: Mov Work[DI], ' '.

Inc DI.

Loop GetR3b.

Inc Index.

Jmp GetR2.

GetR4:

Mov Work[DI], AL.

Inc DI.

Inc Index.

Cmp AL, Cr.

Jne GetR5.

Inc NumCR.

cmp ES: byte ptr [SI+1], LF.

je GetR6.

mov byte ptr work [di-1], LF.

dec NumCR.

Inc NumLF.

Jmp GetR8.

GetR5: Cmp AL, ' '.

Je GetR7.

Cmp AL, Lf.

Jne GetR6.

Inc NumLF.

Jmp GetR8.

GetR6: Or Switch2, Nodata.

GetR7: Cmp DI, 255.

Je GetR8.

Jmp GetR2.

GetR8: Mov Reclen, DI.

Cmp Work, 0Fh.

Jne GetR9.

Jmp GetR0.

GetR9: Test Switch2, Nodata.

Jnz GetRd.

Jmp GetR0.

GetRd: Pop DI.

Pop SI.

Pop CX.

Pop ES.

Ret.

GetRec Endp.

; Читает блок из файла.

ReadBlk Proc Near.

Mov Switch1,0.

Mov BX, Handle.

Mov CX, Blksize.

Push DS.

Mov DS, RecAddr.

Sub DX, DX.

Mov AH, 3Fh.

Int 21H.

Pop DS.

Or AX, AX.

Jz ReadB2.

Mov Last, AX.

Mov Index, 0.

Mov First, 0.

Mov Current, 0.

Inc Blknum.

Mov DI, Last.

Mov ES, RecAddr.

Mov Byte Ptr ES: [DI], 1Ah.

ReadB2: Ret.

Readblk Endp.

; Ввод текста после '/'.

ReScan Proc.

Push DI.

Push SI.

Push DS.

Pop ES.

Jmp Scan1.

Scan: Push DI.

Push SI.

Push DS.

Pop ES.

Mov TextMax, 32.

Mov DX, Offset TextMax.

Mov AH, 0Ah.

Int 21h.

Scan1: Sub CX, CX.

Or CL, TextLen.

Jz NoMatch.

Mov AX, First.

Mov Index, AX.

Call GetRec.

Scan3: Call GetRec.

Test Switch1, Eor.

Jnz NoMatch.

Mov AX, Index.

Cmp AX, Last.

Jae NoMatch.

Mov CX, RecLen.

Sub CL, TextLen.

Jle Scan3.

Mov AL, TextBuf.

Mov DI, Offset Work.

Repnz Scasb.

Jne Scan3.

Cmp TextLen, 1.

Je Match.

Sub CH, CH.

Mov CL, TextLen.

Dec CL.

Mov SI, Offset TextBuf+1.

Repe Cmpsb.

Jne Scan3.

Or CX, CX.

Jnz Scan3.

Match: Call Set25.

Mov Attr, Blink.

Call UpOne.

Jmp Scaned.

NoMatch: Mov AX, First.

Mov Index, AX.

Call Set25.

Mov SI, Offset TextMsg.

Add Special, 128.

Call Msg25.

Sub Special, 128.

Mov Switch1,0.

Mov Col, 1.

Scaned: Pop SI.

Pop DI.

Ret.

ReScan Endp.

; Очищает экран.

Clear Proc Near.

Push AX.

Push BX.

Push CX.

Push DX.

Mov AX, 0600h.

Mov BH, Foregrd.

Jmp Scroller.

Scroll_Dn:

Push AX.

Push BX.

Push CX.

Push DX.

Mov AX, 0601h.

Mov BH, Foregrd.

Jmp Scroller.

Scroll_Up:

Push AX.

Push BX.

Push CX.

Push DX.

Mov AX, 0701h.

Mov BH, Foregrd.

Scroller:

Mov CX, 0100h.

Mov DX, 174Fh.

Int 10h.

Pop DX.

Pop CX.

Pop BX.

Pop AX.

Ret.

Clear Endp.

; Выводит строку 0.

Set1 Proc Near.

Mov AX, 0600h.

Sub BL, BL.

Mov BH, Foregrd.

Sub CX, CX.

Mov DX, 184Fh.

Int 10h.

Mov Word Ptr Work+5,0000h.

Mov DH, 1.

Mov DL, DH.

Mov SI, Offset Work.

Mov CX, 80.

Mov BL, Special.

Mov Attr, BL.

Call Show.

Ret.

Set1 Endp.

; Выводит строку 25.

Set25 Proc Near.

Push DI.

Push SI.

Mov DH, 25.

Mov DL, 1.

Mov CX, Pr_Len.

Mov BL, Special.

Mov Attr, BL.

Mov SI, Offset Prompt.

Call Show.

Mov AH, 2.

Mov DX, 1808h.

Mov BX, 0.

Int 10H.

Pop SI.

Pop DI.

Ret.

Set25 Endp.

; Выводит сообщение в строке 25.

Msg25 Proc Near; SI — указатель на текст.

Mov DH, 25.

Mov DL, 10.

Mov CX, EofLen.

Mov BL, Special.

Mov Attr, BL.

Call Show.

Mov BL, Normal.

Mov Attr, BL.

Ret.

Msg25 Endp.

; Инициализация необходимых данных.

InitCrt Proc Near.

Push ES.

Mov AX, Bios.

Mov ES, AX.

Mov CX, ES: Cols; Количество столбцов.

Mov Crt_Col, CX.

Mov DX, ES: A6845; Порт состояния.

Add DX, 6.

Mov Crt_Prt, DX.

Mov Crt_Buf, 0B800h; Адрес видео буфера (color).

Mov BX, ES: Flag.

And BX, 30h.

Cmp BX, 30h.

Jne CrtSet.

Mov Crt_Buf, 0B000h; Адрес видео буфера (mono).

CrtSet: Pop ES.

Ret.

InitCrt Endp.

; HELP — Выводит управляющие клавиши.

Help Proc Near.

Call Clear.

Mov DX, 0200h.

Mov AH, 2.

Sub BH, BH.

Mov BL, Foregrd.

Int 10h.

Mov DX, Offset HelpMsg.

Mov AH, 9.

Int 21h.

Mov AH, 2.

Mov DX, 1808h.

Sub BX, BX.

Int 10H.

Ret.

Help Endp.

; Извлекает имя файла с командной строки или из введенной.

GetParm Proc Near.

Xor AX, AX.

Xor CX, CX.

Mov AL, Byte Ptr DS: [80h].

Or CX, AX.

Jz GetFile.

Mov DI, Offset Filenm.

Mov SI, 81h.

Blanks: Lodsb.

Cmp AL, ' '.

Je Skipit.

Stosb.

Skipit: Loop Blanks.

Ret.

GetFile:

Mov DX, Offset AskFile.

Mov AH, 9.

Int 21H.

Mov AH, 0AH.

Mov DX, Offset Keyin.

Int 21h.

Sub BL, BL.

Or BL, Keyout.

Jz GetFile.

Mov Filenm[BX], 0.

Ret.

GetParm Endp.

; Открывает файл.

Open Proc Near.

Mov OpenCod, 0.

Mov DX, Offset Filenm.

Mov AL, 0.

Mov AH, 3DH.

Int 21H.

Mov Handle, AX.

Jnc Opened.

Mov OpenCod, AX.

Cmp AL, 2.

Jl Error.

Cmp AL, 5.

Ja Error.

Sub BX, BX.

Mov BL, AL.

Mov CL, 4.

Shl BX, CL.

Lea DX, Code2−32 [BX].

Jmp Error2.

Error: Aam.

Xchg AL, AH.

Or OpenCod, AX.

Mov DX, Offset OpenMsg.

Error2: Mov AH, 9.

Int 21H.

Opened: Cmp OpenCod, 0.

Ret.

Open Endp.

List Endp.

PgmSize Equ ($-Cseg+16)/16; Размер программы в параграфах.

Cseg Ends.

End List.

Показать весь текст
Заполнить форму текущей работой