3.1.2. Модуль STRIO.asm

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

З цих міркувань було розроблено програмний модуль STRIO.asm, в якому міститься п’ять спеціальних функцій: StrLength (визначає кількість символів, записаних в ASCII рядку), дві функції виводу ASCII-рядків на екран – StrWrite і StrWrite2, а також функцію NewLine (перехід на новий рядок) та WriteSimv (виводить на екран заданий символ необхідну кількість разів).

Слід зазначити, що даний програмний модуль не містить функцій читання із консолі в рядок, однак основна програма отримує дані із PSP DOS-а і опрацьовує вже створені дані, а тому не потребує якихось додаткових вказівок через консоль від користувача, всі необхідні специфічні дані (наприклад, маска файлів) користувач може задати в командному рядку при визові основної програми.

Код програмного модуля STRIO.ASM приведений нижче:

IDEAL

MODEL small

ASCnull EQU 0 ; ASCII нуль

ASCcr EQU 13 ; ASCII символ повернення каретки

ASClf EQU 10 ; ASCII символ вертикальної табуляції

; (прогону рядка)

CODESEG

PUBLIC StrLength, StrWrite, StrWrite2, NewLine, WriteSimv

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

; StrLength підраховує кількість ненульових символів в рядку

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

; Вхід di адреса ASCII рядка

; Вихід cx кількість ненульових символів в рядку

; Регістри cx

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

PROC StrLength

push ax ; зберегти у стеку змінювані

push di ; регістри ax, di

xor al, al ; в al поміщується шуканий символ 0

mov cx, 0ffffh ; в cx максимальна глибина пошуку

cld ; автоматичне збільшення di

repnz scasb ; шукати al, доки [di] або cx не стане 0

not cx ; логічне заперечення cx

dec cx ; зменшення cx на 1 – довжина рядка

pop di ; відновлення регістрів

pop ax

ret ; повернення до викликаючої програми

ENDP StrLength

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

; StrWrite вивід рядка на стандартний пристрій виводу

; StrWrite2 вивід заданої кількості символів рядка на консоль

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

; Вхід di адреса ASCII рядка

; cx кількість записуваних символів (для StrWrite2)

; Вихід символьний рядок виводиться на стандартний пристрій

; виводу

Регістри cx (для StrWrite)

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

PROC StrWrite

call StrLength ; встановити в cx довжину рядка

PROC StrWrite2 ; друга змінна точка входу

push ax ; збереження змінюваних регістрів

push bx

push dx

mov bx, 1 ; задання стандартного пристрою виводу

mov dx, di ; адресація ASCII рядка в ds:dx

mov ah, 40h ; в ax номер функції, що виконує запис

; в файл або на пристрій виводу

int 21h ; виклик 21 переривання DOS

pop dx ; відновлення збережених регістрів

pop bx ; із стеку

pop ax

ret ; повернення до визиваючої програми

ENDP StrWrite2

ENDP StrWrite

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

; NewLine перейти на новий рядок на стандартному пристрої виводу

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

; Вхід не має

; Вихід на пристрій виводу посилаються символи повернення

; каретки і прогону рядка

; Регістри не має

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

PROC NewLine

push ax ; збереження регістрів у стек

push dx

mov ah, 2 ; в ah номер функції виводу символу у DOS

mov dl, ASCcr ; в dl символ повернення каретки

int 21h ; вивести символ повернення каретки

mov dl, ASClf ; в dl символ прогону рядку

int 21h ; вивести символ прогону рядку

pop dx ; відновлення регістрів із стеку

pop ax

ret ; повернення до викликаючої програми

ENDP NewLine

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

; WriteSimv вивід на стандартний пристрій виводу заданий символ

; визначену кількість разів

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

; Вхід dl код символу

; cx кількість виводів символу

; Вихід на пристрій виводу задану кількість разів посилається

; переданий символ

;Регістри не має

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

PROC WriteSimv

push ax ; збереження регістрів

push cx

@@01:

mov ah,02 ; в ah номер функції DOS запису символу

int 21h ; вивести заданий символ

loop @@01 ; повторювати доки cx≠0

pop cx ; відновлення регістрів

pop ax

ret ; повернення до викликаючої програми

ENDP WriteSimv

END

Функції, надані програмним модулем STRIO.asm, є зручними і простими інструментами виводу інформації на стандартний пристрій виводу і будуть використані в основній програмі.


Информация о работе «Вивід вмісту каталогу y середовищі MS DOS»
Раздел: Информатика, программирование
Количество знаков с пробелами: 56313
Количество таблиц: 3
Количество изображений: 3

Похожие работы

Скачать
213419
24
23

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

Скачать
206879
0
16

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

Скачать
139853
0
2

... ів» (Tools Palette), яка дозволяє (як у PageMaker) переключатися між виділеними рамками та редагувати їх вміст. При запуску програми ця панель не з’являється і її потрібно спеціально викликати із меню «Графика» (Graphics) — погодьтесь, це досить неочікуване місце для цієї команди. Програма підтримує тільки один рівень відкату, у той час як багато інших пакетів підтримують до ста таких рівнів. ...

Скачать
148745
30
12

... обміну даними з ПЭВМ у процесі виконання програми користувача; 11.      Вкажіть типи буферних схем, використаних в УУМС-2. Їх призначення та особливості роботи. 12.      Дайте визначення адресного простору мікропроцесорної системи та розпишіть його розподіл в УУМС-2. Адресний простір УУМС складається з областей, состав яких показаний у табл.2. Варто звернути увагу, що внутрішні адресні області ...

0 комментариев


Наверх