Нацiональний унiверситет “Львiвська Полiтехнiка”
Кафедра “Електроннi обчислювальнi машини”
Збiрник лабораторних робiт
з дисциплiни
"Системне програмування"
Укладено:
лектор:
лаб.роб./
пр.зан.:
Львiв - 2000
Лабораторна робота №1.
Операцiйна система MS-DOS: основнi команди, конфiгурацiя середовища, команднi файли.
Мета: оволодiння навичками роботи в середовищi операцiйної системи MS-DOS в режимi командного рядка, виконання базових функцiй управлiння файловою системою та потоками даних, створення командних файлiв.
До складу операцiйної роботи входять такi основнi модулi:
BIOS – базова система вводу-виводу. Знадодиться в ПЗП. Призначена для автоматичного тестування апаратних пристроїв; виклику блоку початкового завантаження (Boot Record) i передачi йому управлiння; обслуговування апаратних переривань.
Boot Record – блок початкового завантаження. Знаходиться на 0-й сторонi 1-го сектора 0-ої (00) дорiжки системного диску i займає 512 байт. Автоматично заноситься на диск при його форматуваннi. Призначена для перевiрки наявностi в перших двох позицiях системного диску основних модулiв ОС (IO.SYS, MSDOS.SYS); завантаження цих файлiв в ПЗП та передачi їм управлiння або виводу на екран повiдомлення в разi їх вiдсутностi.
IO.SYS – модуль розширення базової системи вводу-виводу. Тiсно пов’язаний iз особливостями апаратури i є iнварiантним по вiдношенню до даної моделi ПК. Знаходиться в першiй позицiї каталога системного диску, пiсля завантаження розмiщується в молодших адресах ПЗП. Призначений для настройки переривань та iнших параметрiв ОС у вiдповiдностi iз стандартною конфiгурацiєю ПК; пiдключення драйверiв нестандартних пристроiв i нестандартного командного процесора; запуску модуля обробки переривань (MSDOS.SYS) i завершення завантаження ОС шляхом завантаження командного процесора (COMMAND.COM). При конфiгуруваннi середовища i необхiдностi пiдключення драйверiв додаткових нестандартних зовнiшнiх пристроїв модуль IO.SYS використовує файл CONFIG.SYS.
MSDOS.SYS – модуль обробки переивань ОС (основний модуль ОС). Утворює верхнiй рiвень ОС, з яким взаємодiє бiльшiсть прикладних програм. Знадодиться на другiй позицiї каталога системного диску, пiсля завантаження – в молодших адресах ОЗУ пiсля IO.SYS. Призначений для обробки логiчних та програмних переривань, що забезпечують роботу файлової системи та пристроїв вводу-виводу (клавiатури, дисплея, принтера, тощо); обслуговування прикладних прогрма та обробки помилок.
COMMAND.COM – командний процесор. Знаходиться на системному диску, при завантаженнi роздiляється на двi частини – резидентну (постiйно знаходиться в ОЗУ), яка розмiщується в молодших адресах ОЗУ пiсля MSDOS.SYS, i нерезидентну, яка розмiщується в старших адресах ОЗУ та при виконаннi прикладних програм може бути повнiстю чи частково знищена (з метою економiї пам’ятi). Призначений для прийому та аналiзу команд, введених з клавiатури або отриманих при виконаннi командного файла; виконання вбудованих команд ОС; завантаження i виконання зовнiшнiх команд ОС i прикладних програм; виконання файла автозапуску AUTOEXEC.BAT для початкової настройки ОС при її запуску; завантаження (у випадку знищення) нерезидентної частини командного процесора в ОЗУ його резидентною частиною.
Утилiти DOS – зовнiшнi (транзитнi) програми, що являють собою програми, якi входять до стандартного комплекту ОС у виглядi окремих виконавчих модулiв i виконують сервiснi функцiї.
Ядро MS-DOS складають модулi 2й - 5й iз загальним об’ємом використовуваної пам’ятi приблизно 60 Kb.
Процес завантаження системи: пiсля тестування апаратури (модуль BIOS) i виконання початкового завантаження (модуль Boot Record) в пам’ять послiдовно зчитуються i виконуються модулi IO.SYS, MSDOS.SYS. Пiсля зчитування файлу CONFIG.SYS (конфiгурацiя системи) завантажуються драйвери пристроїв та встановлюються параметри ОС. Якщо CONFIG.SYS вiдсутнiй, параметри встановлюються по замовчуванню. Пiсля цього завантажується та починає працювати командний процесор COMMAND.COM. Якщо в кореневому каталозi присутнiй файл AUTOEXEC.BAT, то вiн запускається на виконання. У випадку вiдсутностi цього файлу ОС запитує користувача про поточну дату та час. Всi файли ОС зчитуються з того накопичувача, з якого було завантажено програму-завантажувач. Пiсля успiшного завершення завантаження системи на екран видається системне запрошення (prompt) для вводу команд – пiсля цього ПК очiкує дiй користувача.
Базовий синтаксис команд MS-DOS:
[disk:][path\] command [parameters] <Enter>
При цьому атрибути, що обмеженi квадратними дужками, є необов’язковими. В командах (якщо це необхiдно) допускається використання шаблонiв iмен файлiв:
“*” - замiняє будь-яку к-ть символiв вiд позицiї вставки до кiнця iменi або розширення файлу;
“?” - замiняє один будь-який символ в позицiї вставки в iменi або розширеннi файлу.
За призначенням команди MS-DOS, як правило, подiляються на такi групи:
Робота з каталогами:
DIR, MKDIR, CHDIR, RMDIR, TREE
DIR [drive:][path][filename] [/P] [/W] [/A[[:]attributes]][/O[[:]sortorder]] [/S] [/B] [/L] [/C]
MKDIR [drive:]path | MD [drive:]path
CHDIR [drive:][path] | CHDIR[..] | CD [drive:][path] | CD[..]
RMDIR [drive:]path | RD [drive:]path
TREE [drive:][path] [/F] [/A]
Дозволяють визначити, якi файли та пiдпорядкованi каталоги входять до складу поточного каталога, створити новий пiдкаталог в заданому або поточному каталозi, знищити пустий каталог, змiнити поточний каталог (перейти до iншого калога), вивести на екран шляхи до всiх каталогiв поточного диску.
Робота з файлами:
TYPE, COPY, XCOPY, RENAME, DEL, PRINT, FASTOPEN, FIND, ATTRIB
TYPE [drive:][path]filename
COPY [/Y|/-Y] [/A|/B] source [/A|/B] [+ source [/A|/B] [+...]][destination [/A|/B]] [/V]
XCOPY source [destination] [/Y|/-Y] [/A|/M] [/D:date] [/P] [/S] [/E] [/V] [/W]
RENAME [drive:][path]filename1 filename2
REN [drive:][path]filename1 filename2
DEL [drive:][path]filename [/P]
ERASE [drive:][path]filename [/P]
PRINT [/D:device] [/B:size] [/U:ticks1] [/M:ticks2] [/S:ticks3] [/Q:qsize] [/T] [[drive:][path]filename[ ...]] [/C] [/P]
FASTOPEN drive:[[=]n] [drive:[[n][...]] [/X]
FC [/A] [/C] [/L] [/LBn] [/N] [/T] [/W] [/nnnn][drive1:][path1]filename1 [drive2:][path2]filename2
FIND [/V] [/C] [/N] [/I] "string" [[drive:][path]filename[...]]
ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H][[drive:][path]filename] [/S]
Дозволяють вивести на екран вмiст будь-якого файлу, скопiювати файл або групу файлiв в iнший каталог, перейменувати файл або групу файлiв iз збереженням його/їх в тому ж каталозi, знищити файл або групу файлiв, роздрукувати вмiст файлу, порiвняти декiлька файлiв за вмiстом, знайти потрiбний файл на лиску або в каталозi, переглянути/змiнити атрибути файлу, та iн.
Команди-фiльтри для роботи з поками даних:
FIND, SORT, MORE
FIND [/V] [/C] [/N] [/I] "string" [[drive:][path]filename[...]]
SORT [/R] [/+n] [<] [drive1:][path1]filename1 [> [drive2:][path2]filename2]
[command |] SORT [/R] [/+n] [> [drive2:][path2]filename2]
MORE < [drive:][path]filename
command-name | MORE
Дозволяють переадресувати потоки даних зi стандартних пристроiв вводу (клавiатури) або виводу (дисплей) на вхiд iнших програм.
Робота з дисками i пам’яттю:
FORMAT, CHKDSK, DISKCOPY, DISKCOMP, VERIFY, SYS, VOL, LABEL, SUBST, MEM
FORMAT drive: [/V[:label]] [/Q] [/U] [/F:size][/B|/S] [/C]
FORMAT drive: [/V[:label]] [/Q] [/U] [/T:tracks /N:sectors] [/B|/S] [/C]
FORMAT drive: [/V[:label]] [/Q] [/U] [/1] [/4] [/B|/S] [/C]
FORMAT drive: [/Q] [/U] [/1] [/4] [/8] [/B|/S] [/C]
CHKDSK [drive:][[path]filename] [/F] [/V]
DISKCOPY [drive1: [drive2:]] [/1] [/V] [/M]
DISKCOMP [drive1: [drive2:]] [/1] [/8]
VERIFY [ON|OFF]
SYS [drive1:][path] drive2:
VOL [drive:]
LABEL [drive:][label]
SUBST [drive1: [drive2:]path]
SUBST drive1: /D
MEM [/CLASSIFY|/DEBUG|/FREE|/MODULE modulename] [/PAGE]
Дозволяють здiйснювати форматування диску, перевiряти правильнiсть структури диску, створювати копiю вмiсту гнучкого диску, перевiряти правильнiсть структури гнучкого диску, запису на диск системних файлiв NS-DOS, присвоєння та перегляду мiтки логiчного диску, змiни логiчного iменi диску, визначення об’єму доступної пам’ятi.
Настройка конфiгурацiї середовища:
DATE, TIME, VER, MODE, BUFFERS, DEVICE, FILES, BREAK, LASTDRIVE, SHELL
DATE [mm-dd-yy]
TIME [hours:[minutes[:seconds[.hundredths]]][A|P]]
VER
MODE LPTn[:] [c][,[l][,r]]
MODE LPTn[:] [COLS=c] [LINES=l] [RETRY=r]
MODE COMm[:] [b[,p[,d[,s[,r]]]]]
MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s] [RETRY=r]
MODE LPTn[:]=COMm[:]
MODE [device] [/STATUS]
MODE device CODEPAGE PREPARE=((yyy [...]) [drive:][path]filename)
MODE device CODEPAGE SELECT=yyy
MODE device CODEPAGE REFRESH
MODE device CODEPAGE [/STATUS]
MODE [display-adapter][,shift[,T]]
MODE [display-adapter][,n]
MODE CON[:] [COLS=c] [LINES=n]
MODE CON[:] [RATE=r DELAY=d]
BUFFERS=n[,m]
DEVICE=[drive:][path]filename [dd-parameters]
FILES=x
BREAK [ON|OFF]
LASTDRIVE=x
SHELL=[[drive:]path]filename [parameters]
Дозволяють здiйснювати вивiд на екран та встановлювати поточну дату та час, визначати версiю використовуваної ОС, встановлювати параметри конфiгурацiї ОС (режим роботи зовнiшнiх пристроїв, необхiдна к-ть буферiв та максимальна к-ть одночасно вiдкритих файлiв, встановлення додаткових драйверiв, та iн.). Останнi 7 команд цiєї групи використовуються в командному файлi CONFIG.SYS.
Органiзацiя командних файлiв:
ECHO, CLS, PAUSE, REM, PROMPT, PATH, SET, GOTO, IF, FOR, SHIFT, CALL
ECHO [ON|OFF]
CLS
PAUSE
REM
PROMPT [text]
PATH [[drive:]path[;...]]
SET variable=[string]
GOTO label
IF [NOT] ERRORLEVEL number command | IF [NOT] string1==string2 command |
IF [NOT] EXIST filename command
FOR %%variable IN (set) DO command [command-parameters]
FOR %variable IN (set) DO command [command-parameters]
SHIFT
CALL [drive:][path]filename [batch-parameters]
ЗАВДАННЯ:
Пояснити змiст команд наданого викладачем командного файлу.
За допомогою системних команд MS-DOS виконати вказаний викладачем варiант завдання.
Створити власний командний файл, що реалiзує виконанi в п.1 команди. Передбачити вивiд на екран повiдомлення в разi виникнення помилки при виконаннi одної з виконуваних команд. Перевiрити роботу створеного файлу, викликавши створений командний файл з файлу AUTOEXEC.BAT.
Скласти звiт про виконану роботу.
Варiанти завдання (набiр пунктiв з Основного набору операцiй):
Основний набiр операцiй:
ЛIТЕРАТУРА:
1.Фролов А.В., Фролов Г.В. Операционная система MS-DOS: В 3 кн. – М.:”ДИАЛОГ-МИФИ”, 1991-1992.
3.Данкан Р. Профессиональная работа в MS-DOS: Пер. С англ. – М:Мир, 1992. – 509 с.
4.Зверев С.А. Практическая работа в MS-DOS. – М.:Воениздат, 1991. – 76 с.
Лабораторна робота №2.
Технологiя виконання системних робiт на IBM PC.
Мета: оволодiння навичками роботи iз системною програмою DEBUG (наладчик).
РОБОТА IЗ ПРОГРАМОЮ DEBUG
Програма DEBUG - це наладчик програм у системi MS-DOS. Debug можна викликати за допомогою наступної команди MS-DOS:
DEBUG [<специфiкацiя_файла] [<список_аргументiв >]
Наприклад,
DEBUG file.exe
Якщо вказане iм'я файлу, то можна задавати ще й список параметрiв запуску даної програми. Команди debug складаються з лiтери та одного чи декiлькох параметрiв.
Команда debug | функцiя
A [<address>] асемблювання
С <range> <address> порiвняння
D [<range>] вивiд дампа на екран
E <address> [<list>] ввiд байтiв з клавiатури
F <range> <list> наповнення (зони в пам'ятi)
G [=<address> [<address>...]] запуск програми
H <value> <value> hex-арифметика
I <value> ввiд байта з порту
L [<address>[<drive:>
<record> <record>]] завантаження
M <range> <address> пересилання блока пам'ятi
N <filename>[<filename>] задати iм'я [файла]
O <value> <byte> вивiд байта до порту
Q вихiд до MS-DOS
R <register-name> вмiст регiстра
S <range> <list> пошук
T [=address>][<value>] трасування
U [<range>] деасемблювання
W [<address> [<drive:>
<record> <record>] запис
Якщо у командi debug присутня синтаксична помилка, вiн виводить помилковий командний рядок та вказує на помилку символом "^" та словом error.
Наприклад,
dcs:100 cs:110 (вiрно: dcs:100 l10)
^ error
db 123
^ error
Пiд час вводу команд дозволенi довiльнi сполучення символiв верхнього та нижнього регiстрiв.
Параметри у командi можуть бути розмежованi комами або пропусками. Наступнi команди еквiвалентнi:
dcs:100 110
d cs:100 110
d,cs:100,110
Опис деяких команд DEBUG.
1.Команда ASSEMBLE активує режим вводу команд асемблера та переводу їх в машиннi коди. Встановлення початкової адреси здiйснюється за допомогою команди:
A nnnn <Enter>
де nnnn - адреса змiщення в кодовому сегментi, з якої буде здiйснюватись ввiд команд
Завершити ввiд команд можна двiчi натиснувши клавiшу <Enter>.
2.Команда UNASSEMBLE деасемблює вказаний дiапазон байтiв з вказiвкою адрес та значень байтiв.
Наприклад:
U04BA:0100 L10
debug деасемблює 16 байтiв, починаючи вiд адреси 04BA:0100.
3.Команда TRACE має наступний формат:
T[=адреса][значення]
Якщо наведено значення параметра [=адреса], буде виконана команда, що розташована за вказаною адресою. Якщо наведений параметр <значення, команда трасування Т буде виконана вiдповiдне число разiв.
Наприклад:
T=011a 10
debug виконає 16(10h) iнструкцiй, починаючи вiд адреси 011A у поточному сегментi.
4.Команда GO має наступний формат:
G [=адреса][адреси]
Здiйснює/поновлює виконання програми з адреси вказаної в IP. Якщо наведено значення параметра [=адреса], будуть виконанi всi програмнi iнструкцiї, що знаходяться в дiапазонi адрес змiщень мiж поточним значенням IP та [=адреса], пiсля чого виконання буде призупинено.
Наприклад:
C:\> DEBUG <Enter>
A 100 <Enter>
0D13:100 MOV AH,00
0D13:102 INT 16H
0D13:104 CMP AL,00
0D13:106 <Enter>
T <Enter>
На цiй стадiї виконання IP буде мiстити 0102 i вказуватиме на наступну команду - INT 16H. Для того, щоб автоматично виконати викликану функцiю не трасуючи її тiла, необхiдно застосувати наступну команду:
G 104 <Enter>
Пiсля цього наладчик автоматично виконає всi iнструкцiї до вказаної адреси, пiсля чого можна продовжити трасування безпосередньо введеної програми.
5.Команда DUMP виводить на екран вмiст вказаної зони пам'ятi.
Наприклад:
dcs:100 110
debug друкує дамп у наступному форматi:
04BA:0100 42 45 52 54 41 ... 4E 44 TOM SAWYER
6.Команда REGISTERS виводить на екран вмiст регiстрiв та ознак. В якостi необов'язкового параметра можна вказати який-небудь окремий регiстр, значення якого необхiдно вивести на екран. По замовчуванню команда виводить значення всiх регiстрiв.
Регiстр прапорiв:
ЗАВДАННЯ:
Запустити наладчик.
Активувати режим асемблювання.
Ввести програмний код вказаного викладачем варiанту завдання.
Виконати трасування введеної програми.
Покроково задокументувати змiну значень регiстрiв даних, сегментних регiстрiв та регiстру прапорiв, пояснити змiну цих значень.
Визначити i проаналiзувати представлення введеної програми в машинному кодi.
Скласти звiт про виконану роботу.
Варiанти завдання:
ЛIТЕРАТУРА:
1.Р.Джордейн.Справочник програмиста персональных компъютеров типа IBM PC XT и AT. - M."Финансы и статистика",1992,стор.13-31.
2.Л.О.Березко,В.В.Троценко. Особливостi програмування на Турбо-асемблерi. -Киiв,НМК ВО,1992.
3.Л.Дао. Программирование микропроцессора 8088.Пер. с англ.-М."Мир",1988.
4.П.Абель.Язык ассемблера для IBM PC и программирования. Пер. с англ.-М.,"Высшая школа",1992.
5.Операционная система MS-DOS(версия 3.3). Справочное руководство.
6.А.Шнайдер.Язык ассемблера для персонального компъютера фирмы IBM.Пер. с англ.- М.,"Мир",1988.
Лабораторна робота №3.
*.COM - файли та програмування мовою assembler для IBM PC.
Мета: оволодiння навичками створення *.COM - файлiв.
Програма типу .COM вмiщує лише один сегмент, де розташованi усi компоненти програми:
- префiкс програмного сегмента;
- програмний код;
- данi;
- стек.
Структура типової програми має вигляд:
title Програма типу .COM
text segment 'code'
assume CS:text, DS:text, ES:text, SS:text
org 100h
myproc proc
... ; текст прграми
myproc endp
... ; означення даних
text ends
end myproc
Програма мiстить лише один сегмент text з класом 'CODE'. Оператор ASSUME затверджує, що усi чотири сегментнi регiстри вказують на цей єдиний сегмент. Оператор ORG 100h резервує 256 байтiв для PSP (префiкса програмного сегмента). Наповнювати PSP буде система. У програмi нема потреби iнiцiалiзувати регiстр DS, бо його, як всi iншi сегментнi регiстри, iнiцiалiзує система. Система у випадку .COM - файлу завжди задає IP=100h. Через це негайно за оператором ORG 100h повинен знаходитись перший виконуваний рядок програми. Якщо власнi данi бажано розмiстити на початку програми, тодi першою командою програми має бути jmp через цi данi.
Образ пам'ятi програми типу .COM наведено на рис.
-------------------
CS,DS,ES,SS -> | PSP (256 байтiв) | меншi адреси
| ---------------- | <-- IP
| Програма та |
| данi |
| -----------------| бiльшi адреси
| Стек |
------------------ <-- SP= FFFEh
До покажчика стека автоматично записується число FFFEh. Незалежно вiд реального розмiру програми їй надається 64 K адресного простору, тобто один i тiльки один сегмент. Стек зростає в напрямку зменшення адрес та за умови поганого планування програмiстом може "наїхати (тобто затерти)" на власнi данi та програму.
Розрiзняють два стилi оформлення ( запису ) асемблерних програм - iз стандартними та спрощеними сегментними директивами. Наступний приклад iлюструє застосування стандартних сегментних директив.
CODE SEGMENT WORD 'CODE'
ORG 100h
ASSUME cs:CODE, ds:CODE, ss:CODE, es:CODE
ProgramStart:
Jmp cont
HelloMessage db 'Hello, world', 13, 10, '$'
cont:
mov dx,OFFSET HelloMessage ;DS:DX points to the HelloMessage
mov ah,09 ;DOS string print function
int 21h ;print the HelloMessage
mov ah,4Ch ;DOS terminate program function
int 21h ;end of the program
CODE ENDS
END ProgramStart
;Нижче наведено приклад iз спрощеними сегментними директивами.
.MODEL TINY
.CODE
org 100h
start:
jmp prog
;власнi данi, що потребують перестрибування
HelloMessage DB 'Hello, world', 13, 10, '$'
prog:
mov ah,09 ;DOS print string function
mov dx,OFFSET HelloMessage ;point to "Hello, world"
int 21h ;display "Hello, world"
mov ah,4ch ;DOS terminate program function
int 21h ;terminate the program
END start
;----------------------------------------------------------
Система Turbo-Assembler виробляє .COM-файл в наступний спосiб:
C:\> tasm filename.asm <Enter>
Результат - файл filename.obj. Необов'язковi параметри /l або /la призводять до додаткової генерацiї файлу filename.lst, що мiститть лiстинг асемблювання програми.
C:\> tlink/t filename.obj <Enter>
Результат - файл filename.com, що вже можна запускати.
ЗАВДАННЯ:
Створити програму типу .COM, що реалiзує вказаний викладачем варiант завдання.
Перевiрити роботу створеної програми за допомогою наладчика DEBUG. Покроково проаналiзувати змiну значень регiстрiв даних, сегментних регiстрiв та регiстру прапорiв, пояснити змiну цих значень.
Скласти звiт про виконану роботу.
Варiанти завдання:
Див. "Лабораторна робота №2"
ЛIТЕРАТУРА:
1.Р.Джордейн.Справочник програмиста персональных компъютеров типа IBM PC XT и AT. - M."Финансы и статистика",1992,стор.13-31.
2.Л.О.Березко,В.В.Троценко. Особливостi програмування в турбо-асемблерi. -Киiв,НМК ВО,1992.
3.Л.Дао. Программирование микропроцессора 8088.Пер.с англ.-М."Мир",1988.
4.П.Абель.Язык ассемблера для IBM PC и программирования. Пер. з англ.-М.,"Высшая школа",1992.
Лабораторна робота №4.
*.EXE - файли та програмування мовою assembler для IBM PC.
Мета: оволодiння навичками створення *.EXE - файлiв та визначення конфiгурацiї ПЕОМ та її модулiв.
1.Структура стандартної програми типу .EXE
Структура стандартної програми типу .EXE має наступний вигляд:
TITLE Програма типу .EXE
STACK SEGMENT PARA STACK 'STACK'
db 200h DUP (?)
STACK ENDS
DATA SEGMENT WORD 'DATA'
HelloMessage db 'Hello, world',13,10,'$'
DATA ENDS
CODE SEGMENT WORD 'CODE'
ASSUME cs:CODE, ds:DATA
ProgramStart:
push ds ;initialize stack segment
sub ax,ax ;initialize stack segment
push ax ;initialize stack segment
mov ax,Data ;initialize data segment
mov ds,ax ;initialize data segment
mov dx,OFFSET HelloMessage ;DS:DX points to the HelloMessage
mov ah,09 ;DOS string print function
int 21h ;print the HelloMessage
mov ah,4Ch ;DOS terminate program function
int 21h ;end of the program
CODE ENDS
END ProgramStart
Порядок запису сегментiв у програмi на мовi Turbo-Assembler може бути довiльним.
Образ програми у пам'ятi починається з префiкса програмного сегмента (Program Segment Prefix, PSP), що утворюється та заповнюється системою. PSP завжди має розмiр 256 байтiв та вмiщує таблицi та поля даних, що використовуються системою пiд час виконання програми. Пiсля PSP розташовуються сегменти програми. Сегментнi регiстри автоматично iнiцiалiзуються наступним чином: ES та DS вказують на початок PSP, CS - на початок програмного сегменту, SS - на початок сегменту стеку. До IP завантажується вiдносна адреса точки входу до програми (з операнда директиви END).
Додаткова iнiцiалiзацiя та завершення:
Оскiльки системний завантажувач використовує DS для встановлення початкової точки PSP, програма користувача повинна зберегти цю адресу, записавши значення DS до стеку. Система вимагає, щоби наступне значення в стеку було нульовою адресою (точнiше, змiщенням). Необхiдно також iнiцiалiзувати DS так, щоб вiн вказував на власнi данi програми користувача (оскiльки не iснує способу пересилання безпосереднiх значень до сегментних регiстрiв, в якостi промiжного пункту пересилання використовується один iз регiстрiв даних, наприклад, AX). Послiдовнiсть операцiй:
push ds ;store DS in stack
sub ax,ax ;zero AX
push ax ;store zero in stack
mov ax,Data ;store Data segment address in DS
mov ds,ax
Образ пам'ятi програми типу .EXE наведено на рисунку:
DS,ES -> -------------------
| PSP (256 байтiв) | меншi адреси
CS -> | ---------------- | <-- IP
| Програмний |
| сегмент |
|------------------|
| Сегмент даних |
SS -> |------------------|
| Сегмент стека |
| -----------------| <-- SP
Розмiр кожного сегменту не може перевищувати 64KB.
Команда RET використовує значення DS, що було збережено в стеку на початку програми, для повернення в DOS.
Розрiзняють два стилi оформлення ( запису ) асемблерних програм - iз стандартними та спрощеними сегментними директивами. Попереднiй приклад iлюструє застосування стандартних сегментних директив. Нижче наведено приклад iз спрощеними сегментними директивами.
Приклад оформлення асемблерної програми у стилi .EXE файла iз спрощеними сегментними директивами:
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
HelloMessage db 'Hello, world', 13, 10, '$'
.CODE
push ds ;initialize stack segment
sub ax,ax
push ax
mov ax,@data
mov ds,ax ;set DS to point to the data segment
mov ah,9 ;DOS print string function
mov dx,OFFSET HelloMessage ;point to "Hello, world"
int 21h ;display "Hello, world"
mov ah,4ch ;DOS terminate program function
int 21h ;terminate the program
END
Система Turbo-Assembler продукує .EXE-файл в наступний спосiб:
C:\> tasm filename.asm <Enter>
Результат - файл filename.obj. Необов'язковi параметри /l або /la призводять до додаткової генерацiї файлу filename.lst, що мiстить лiстинг асемблювання програми.
C:\> tlink filename.obj <Enter>
Результат - файл filename.exe, що вже можна запускати.
2. Конфiгурацiя ПЕОМ
Для вирiшення деяких задач необхiдно знати тип ЕОМ, тип мiкропроцесора, склад зовнiшнiх пристроїв та їхнi технiчнi характеристики (наприклад, спроба звертання програми до неiснуючого пристрою може призвести до "зависання" операцiйної системи). Ця iнформацiя зберiгається у певних комiрках ОЗП, ПЗП i КМОП-пам'ятi i наводиться нижче.
2.1. Визначення типу ПЕОМ.
ПЗП BIOS мiстить за адресою F000:FFFEH байт що дозволяє iдентифiкувати тип ПЕОМ:
FFH оригiнальний IBM PC;
FEH XT, Portable PC; FDH - PCjr;
FCH AT;
FBH XT iз пам'яттю 640Kb на системнiй платi;
FAH PS/2 модель 25 або 30;
F9H Convertible PC;
F8H PS/2 моделi 55SX, 70,80;
9AH Comrad XT, Compaq Plus;
30H Sperry PC;
2DH Compaq PC, Compaq Deskpro.
2.2. Визначення типу мiкропроцесора.
Алгоритм визначення типу мiкропроцесора грунтується на розходженнях у регiстрах прапорiв (Рг) мiкропроцесорiв (МП) 8086, 80286 i 80386 i полягає в наступному:
У регiстр прапорiв записується 0. Якщо чотири старших розряди РгП встановлюються в 1 - це МП 8086. Якщо нi, то в регiстр прапора записується код F000H. Якщо пiсля цього 4 старшi розряди РгП залишаються в 0, то це МП 80286, у противному випадку - 80386.
2.3. Визначення дати створення BIOS.
Дата створення BIOS займає в ПЗП BIOS 8 байтiв починаючи з адреси F000:FFF5H i зберiгається у форматi ASCII у виглядi мм/дд/рр, де мм - номер мiсяця; дд - день; рр рiк.
2.4. Визначення конфiгурацiї IBM PC XT.
Мiкросхема послiдовного паралельного iнтерфейсу з периферiєю Intel 8255 у ПЕОМ призначена для багатьох цiлей. Вона повiдомляє про позицiю перемикачiв на системнiй платi, приймає данi з клавiатури, управляє рядом периферiйних пристроїв, включаючи мiкросхему таймера 8253.
З машин сiмейства IBM PC лише AT не використовує мiкросхему 8255; вона зберiгає iнформацiю про обладнання разом iз годинником реального часу в спецiальнiй мiкросхемi з незалежним живленням. Проте для роботи з клавiатурою i управлiння мiкросхемою таймера, мiкросхема AT використовує тi ж адреси портiв, що i 8255.
2.5. Визначення конфiгурацiї IBM PC AT.
2.5.1. Данi, що зберiгаються в КМОП-памяти.
КМОП-пам'ять органiзована на базi мiкросхеми MC146818 фiрми Motorola i має 64 8-розрядних комiрки (регiстри). У таблицi 1 приведений вмiст тих комiрок пам'ятi, в яких зберiгаються данi про конфiгурацiю i стан машини.
Звертання до КМОП-пам'ятi (запис i зчитування) здiйснюється в такий спосiб: спочатку в порт 70H заноситься адреса комiрки (номер регiстру). Потiм в залежностi вiд виконуваної операциии в порт 70H або записуються данi, або з порту 70H данi зчитуються.
Таблиця 1 Вмiст комiрок
Адреса комiрки Вмiст
0EH Байт стану дiагностики при вмиканнi живлення
10H Тип використовуваного НГМД
14H Конфiгурацiя обладнання
15H16H Розмiр основної пам'ятi
30H-31H Розмiр розширеної (extended) пам'ятi
2.5.1.1. Байт стану дiагностики.
Байт стану дiагностики мiстить результати виконання дiагностики при вмиканнi живлення машини. Формат байта стану приведений у таблицi 2.
Таблиця 2 Вмiст байта дiагностики
Бiт Значення
0-1 - не використовується, дорiвнює 0
2 0 - невiрно встановлено годинник реального часу;
1 - годинник встановлено вiрно
3 1 - несправнiсть НМД, неможливо завантажити операцiйну систему з жорсткого диску;
0 - НМД справний
4 - фактичний розмiр оперативної пам'ятi не вiдповiдає встановленому в КМОП-пам'ятi;
0 - розмiр оперативної пам'ятi встановлений правильно
5 - помилка в конфiгурацiї системи;
0 - конфiгурацiя встановлена правильно
6 1 - помилка в контрольнiй сумi КМОП-пам'ятi;
0 - контрольна сума КМОП-пам'ятi правильна
7 - розрядка акумулятора, що живить КМОП- пам'ять i годинник реального часу;
0 - акумулятор справний i заряджений
2.5.1.2. Тип використовуваних флоппi-дискiв.
Молодша i старша тетради цього байта описують вiдповiдно другий i перший НГМД:
0000 - дисковiд не встановлений;
0001 - дисковiд на 360К;
0010 - дисковiд на 1.2М;
0011 - дисковiд на 720К;
0100 - дисковiд на 1.44М.
2.5.1.3. Конфiгурацiя обладнання.
У таблицi 3 приведений байт конфiгурацiї:
Таблиця 3 Байт конфiгурацiї
Бiт Значення
0 1 - у системi встановленi НГМД;
0 - НГМД не використовуються
1 1 - встановлений арифметичний сопроцессор 80287 або 80387;
0 - сопроцесор не встановлений
2-3 Не використовуються, рiвнi 0
4-5 Тип вiдеоконтролера i його режим:
Бiти: 5 4
0 0 - не використовуються або EGA;
0 1 - CGA, EGA, VGA у режимi 40x25
1 0 - CGA, EGA, VGA у режимi 80x25
1 1 - монохромний контролер
6-7 Кiлькiсть використовуваних НГМД
2.5.1.4. Обсяг основної пам'ятi.
Комiрка 15H мiстить молодший байт, а комiрка 16H - старший байт розмiру основної пам'ятi в кiлобайтах.
2.5.1.5. Обсяг додаткової пам'ятi.
Комiрки 16H i 17H мiстять вiдповiдно молодший i старший байти розмiру додаткової пам'ятi (розташованої вище 1М) у кiлобайтах.
2.5.2. Данi, що зберiгаються в областi BIOS оперативної пам'ятi.
BIOS в процесi iнiцiалiзацiї опитує стан перемичок i аналiзує вмiст КМОП-пам'ятi. Пiсля аналiзу BIOS записує у свою область пам'ятi за адресою 0040:0010H слово конфiгурацiї. Призначення окремих бiтiв цього слова приведено в таблицi 4.
Таблиця 4
Бiт Значення
0 1 - система мiстить НГМД;
0 - система не мiстить НГМД
1 1 - встановлений арифметичний сопроцесор;
0 - арифметичний сопроцесор не встановлений
2-3 Обсяг основної пам'ятi, встановленої на системнiй платi:
Бiти: 3 2
0 1 - 16К
1 0 - 32К
1 1 - 64К i бiльше
4-5 Бiти: 5 4
0 0 - не використовується або EGA
0 1 - CGA, EGA, VGA в режимi 40x25;
1 0 - CGA, EGA, VGA в режимi 80x25;
1 1 - монохромний контролер
6-7 Кiлькiсть встановлених НГМД
8 1 - використовується контролер прямого доступу до пам'ятi;
0 - контролер прямого доступу до пам'ятi не використовується
9-11 Кiлькiсть встановлених портiв послiдовної передачi даних RS232S
12 1 - використовується iгровий адаптер (джойстик);
0 - iгровий адаптер не використовується
13 1 - встановлений послiдовний принтер (тiльки для PCjr)
14-15 Кiлькiсть встановлених принтерiв
ЗАВДАННЯ:
Використовуючи довiдкову iнформацiю про технiчнi характеристики ПЕОМ, визначити адресу або область ПЗП, ОЗУ або КМОП-пам'ятi, що мiстять данi, необхiднi для виконання вказаного викладачем варiанту завдання.
Створити програму типу .EXE, що реалiзує вказане завдання. Запустити створену програму та задокументувати результати її виконання.
Скласти звiт про виконану роботу.
Варiанти завдання:
ЛIТЕРАТУРА:
1.Р.Джордейн.Справочник програмиста персональных компъютеров типа IBM PC XT и AT. - M."Финансы и статистика",1992,стор.13-31.
2.Л.О.Березко,В.В.Троценко. Особливостi програмування в турбо-асемблерi. -Киiв,НМК ВО,1992.
3.Л.Дао. Программирование микропроцессора 8088.Пер.с англ.-М."Мир",1988.
4.П.Абель.Язык ассемблера для IBM PC и программирования. Пер. з англ.-М.,"Высшая школа",1992.
Лабораторна робота №5.
Органiзацiя переривань у IBM PC.
Мета: Знайомство з механiзмом переривань, оволодiння навичками їх обробки.
1. Механiзм i типи переривань.
Для обробки подiй, що вiдбуваються асинхронно стосовно виконання програми, найкраще пiдходить механiзм переривань. Переривання можна розглядати як деяку особливу подiю в системi, що потребує моментальної реакцiї. Наприклад, добре спроектованi системи пiдвищеної надiйностi використовують переривання по аварiї в мережi живлення для виконання процедур запису вмiсту регiстрiв i оперативної пам'ятi на магнiтний носiй, iз тим щоб пiсля вiдновлення живлення можна було б продовжити роботу з того ж мiсця.
Оскiльки переривання можуть виникати за рiзноманiтними причинами, кожному перериванню присвоюється номер переривання, з яким зв'язується та або iнша подiя. Система в разi надходження тої чи iншої подiї запускає вiдповiдну процедуру реакцiї на подiю.
За джерелом i характером виникнення переривання роздiляються на групи (Рис. 1):
Рис. 1.
Програмнi переривання викликаються самими програмами, тому вони не є асинхронними. Для цього вони використовують команду INT.
Програмнi переривання зручно використовувати для органiзацiї доступу до окремих спiльних для всiх програм модулiв. Наприклад, програмнi модулi операцiйної системи доступнi прикладним програмам саме через переривання, i немає необхiдностi при виклику цих модулiв знати їхню поточну адресу в пам'ятi. Прикладнi програми самi можуть встановлювати свої обробникi переривань для їхнього наступного використання iншими програмами. Для цього обробникi переривань, що вбудовуються, повиннi бути резидентними в пам'ятi.
Апаратнi переривання викликаються фiзичними пристроями i надходять асинхронно. Цi переривання iнформують систему про подiї, пов'язанi iз роботою пристроїв, наприклад, про те, що завершено друк символу на принтерi i можна видати наступний символ, або про те, що потрiбний сектор диска вже прочитано i його вмiст доступний програмi.
Використання переривань при роботi з повiльними зовнiшнiми пристроями дозволяє сполучити ввiд/вивiд з обробкою даних в центральному процесорi i в результатi пiдвищує загальну продуктивнiсть системи.
Зовнiшнi апаратнi переривання викликаються сигналами, зовнiшнiми стосовно цетрального процесора, i подаються на його входи INT i NMI.
Переривання по входi INT вiдносяться до апаратних маскованих переривань, оскiльки можуть бути дозволенi або забороненi прапором IF регiстра прапорiв. Номер вектора переривань, що маскуються, передається до процесора по його вiсьми молодших розрядах шини даних.
Вхiд немаскованого переривання NMI звичайно використовується для повiдомлень про "катастрофiчнi" подiї (вiдключення живлення, виявлення помилок пам'ятi i т.д.). Номер цього переривання дорiвнює 2.
Внутрiшнi (логiчнi) переривання формуються безпосередньо процесором, коли виникає така особлива ситуацiя, як, наприклад, дiлення на 0. Цi переривання мають номери 0, 1, 3, 4 (див. табл.1).
Таблиця 1. Найбiльш важливi переривання
Номер Опис
0 Помилка дiлення. Викликається автоматично пiсля виконання команд DIV або IDIV, якщо в результатi дiлення вiдбулося переповнення. DOS зазвичай при обробцi цього переривання виводить повiдомлення про помилку й зупиняє виконання програми. Для процесора 8086 при цьому адреса повернення вказує на наступну пiсля команди дiлення команду, а в процесорi 80286 - на перший байт команди, що викликала переривання
1 Переривання покрокового режиму. Виникає пiсля виконання кожної машинної команди, якщо в словi прапорiв встановлений бiт покрокового трасування TF. Використовується для наладки програм. Переривання не виникає пiсля виконання команди MOV у сегментнi регiстри або пiсля завантаження сегментних регiстрiв командою POP
2 Апаратне немасковане переривання. Це переривання може використовуватися по-рiзному в рiзних машинах. Звичайно виникає при помилцi парностi в оперативнiй пам'ятi i при запитi переривань вiд сопроцесора
3 Переривання для трасування. Це переривання генерується при виконаннi однобайтової команди з кодом CCh i звичайно використовується наладчиками для встановлення точки переривання
4 Переповнення. Генерується машинною командою INTO, якщо встановлений прапор OF. Якщо прапор не встановлений, то команда INTO виконується як NOP. Це переривання використовується для обробки помилок при виконаннi арифметичних операцiй
5 Друк копiї екрана. Генерується при натисканнi на клавiатурi клавiшi PrtScr. Звичайно використовується для друку образу екрана. Для процесора 80286 генерується при виконаннi машинної команди BOUND, якщо значення, що перевiряється, вийшло за межi заданого дiапазону
6 Невизначений код операцiї або довжина команди бiльше 10 байтiв (для процесора 80286)
7 Особливий випадок вiдсутностi сопроцессора
8 IRQ0 - переривання iнтервального таймера, виникає 18,2 разiв в секунду
9 IRQ1 - переривання вiд клавiатури. Генерується при натисканнi i при вiдпусканнi клавiшi. Використовується для читання даних з клавiатури
A IRQ2 - використовується для каскадування апаратних переривань у машинах класу AT
B IRQ3 - переривання асинхронного порту COM2
C IRQ4 - переривання асинхронного порту COM1
D IRQ5 - переривання вiд контролера жорсткого диска для XT
E IRQ6 - переривання генерується контролером флоппi-диска пiсля завершення операцiї
F IRQ7 - переривання принтера. Генерується принтером, коли вiн готовий до виконання чергової операцiї. Багато адаптерiв принтера не використовують це переривання
10 Обслуговування вiдеоадаптера
11 Визначення конфiгурацiї пристроїв у системi
12 Визначення розмiру оперативної пам'ятi в системi
13 Обслуговування дискової системи
14 Послiдовний ввiд/вивiд
15 Розширений сервiс для AT-комп'ютерiв
16 Обслуговування клавiатури
17 Обслуговування принтера
18 Запуск BASIC у ПЗУ, якщо вiн є
19 Завантаження операцiйної системи
1A Обслуговування годинника
1B Обробник переривань Ctrl-Break
1C Переривання виникає 18,2 разiв в секунду, викликається програмно обробником переривання таймера
1D Адреса вiдеотаблицi для контролера вiдеоадаптера 6845
1E Покажчик на таблицю параметрiв дискети
1F Покажчик на графiчну таблицю для символiв iз кодами ASCII 128-255
20-5F Використовуються DOS або зарезервованi для DOS
60-67 Переривання, зарезервованi для користувача
68-6F Не використовуються
70 IRQ8 - переривання вiд годинника реального часу
71 IRQ9 - переривання вiд контролера EGA
72 IRQ10 - зарезервовано
73 IRQ11 - зарезервовано
74 IRQ12 - зарезервовано
75 IRQ13 - переривання вiд сопроцесора
76 IRQ14 - переривання вiд контролера жорсткого диска
77 IRQ15 - зарезервовано
78-7F Не використовуються
80-85 Зарезервованi для BASIC
86-F0 Використовуються iнтерпретатором BASIC
F1-FF Не використовуються
2. Таблиця векторiв переривань.
Для того щоб зв'язати номер переривання з адресою програми реакцiї на переривання (обробника переривань), використовується таблиця векторiв переривань, що займає перший кiлобайт оперативної пам'ятi - адреси вiд 0000:0000 до 0000:03FF. Таблиця складається з 256 елементiв - 4-байтних адрес обробникiв переривань. Цi елементи називаються векторами переривань. У першому словi елемента таблицi записане змiщення, а в другому - сегмент адреси обробника переривань. Перериванню з номером 0 вiдповiдає адреса 0000:0000, перериванню з номером 1 - 0000:0004 i т.д. Перериванню з номером n буде вiдповiдати адреса 0000:4*n.
Iнiцiалiзацiя таблицi вiдбувається частково програмою BIOS пiсля тестування апаратури, частково при завантаженнi DOS. DOS може переключити на себе деякi переривання BIOS.
3. Маскування переривань.
Часто при виконаннi критичних дiлянок програм, для того щоб гарантувати виконання визначеної послiдовностi команд, необхiдно забороняти переривання. Це можна зробити командою CLI (скидання прапора дозволу переривання). Її потрiбно ввести в початок критичної послiдовностi команд, а наприкiнцi ввести команду STI (встановити прапор дозволу переривання). Команда CLI забороняє тiльки маскованi переривання, немаскованi - завжди обробляються процесором.
Якщо програмiст використовує заборону переривань за допомогою команди CLI, необхiдно слiдкувати за тим, щоб переривання не вiдключалися на тривалий перiод часу, оскiльки це може призвести до небажаних наслiдкiв, наприклад, вiдставання системного годинника. Якщо потрiбно заборонити лише деякi переривання, наприклад, вiд клавiатури, для цього треба скористатися послугами контролера переривань.
4. Змiна таблицi векторiв переривань.
Якщо програмi буде потрiбно органiзувати обробку деяких переривань, для цього необхiдно перевстановити потрiбний вектор переривань на свiй обробник змiнивши вмiст вiдповiдного елемента таблицi векторiв переривань. Дуже важливо не забути перед завершенням роботи програми вiдновити вмiст змiнених векторiв, оскiльки пiсля завершення роб...