МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
В. В. Мазур
К. К. Колесник
ЛАБОРАТОРНИЙ ПРАКТИКУМ
з курсу “Системне програмування та операційні системи”
Частина 1
Рекомендовано до друку науково-методичною радою
Національного університету “Львівська політехніка”
як навчальний посібник для студентів базового напрямку 6.0804 “Комп’ютерні науки”
Львів
Видавництво Національного університету “Львівська політехніка”
2005
ББК
Б 72
УДК
Рекомендовано до друку науково-методичною радою
Національного університету “Львівська політехніка”
як навчальний посібник для студентів базового напрямку 6.0804 “Комп’ютерні науки”
Рецензенти:
Лобур М. В., д.т.н., проф. Національного університету “Львівська політехніка”
Мазур В. В., Колесник К. К.
Б 72 Лабораторний практикум з курсу “Системне програмування та операційні системи”. Ч. 1: Навч. посібник. – Львів: Видавництво Національного університету “Львівська політехніка”, 2003. – с.
ISBN
У посібнику подано 10 інструкцій до виконання лабораторних робіт з курсу “Основи програмування”.
Для студентів базового напрямку 6.0804 “Комп’ютерні науки”.
ББК
(Мазур В. В., Колесник К. К., 2005
(Національний університет
“Львівська політехніка”, 2005
ISBN
В С Т У П
Лабораторний практикум з курсу “Системне програмування та операційні системи” розкриває питання програмування на мові асемблер для комп’ютерів на базі мікропроцесорів фірми Intel. Весь матеріал поділено на окремі теми, які містять теоретичну частину, фрагменти програм на мові низького рівня асемблер і завдання з лабораторних робіт. Представлений матеріал дозволяє студенту опанувати прийомами системного програмування.
Системне програмне забезпечення електронно-обчислювальної машини (ЕОМ) розширює її апаратурні можливості і забезпечує організацію та реалізацію обчислювального процесу. Однією із найважливіших складових системного програмного забезпечення виступають операційні системи. Для розробки програм системного програмного забезпечення, які забезпечують розширення апаратурних можливостей комп’ютера, підвищення ефективності використання ресурсів, вдосконалення засобів взаємодії користувача з ЕОМ застосовують мову програмування асемблер (Assembler) – символічний аналог машинної мови, яка найбільш близька до можливих апаратурних реалізацій віртуальної машини.
Чому з багатьох мов програмування, навіть таких популярних як С, С++, Pascal, Delphi тощо, вибирають Assembler для системного програмування?
Мова програмування Assembler повністю відображає всі архітектурні тонкості конкретного типу комп’ютера і дозволяє створювати ядра операційних систем реального часу, ядра мультизадачних систем, програми, які переводять процесор в захищений режим, драйвери, програми, які працюють з портами, звуковими та відеоплатами, віруси і антивіруси тощо. Не можна забувати, що між “залізом” комп’ютера і любою мовою високого рівня стоїть компілятор, який може генерувати не дуже ефективний код. Для критичних за розміром системних програм, при написанні яких враховується кожний байт, застосування мов програмування високого рівня є недоцільне, бо не можна вплинути на процес їх компіляції. Тому не потрібно принижувати значення низького рівня програмування порівнюючи з потужними мовами високого рівня. Розробники компіляторів обов’язково залишають можливість виходу на рівень асемблера. Ця можливість може бути реалізована у формі асемблерних вставок в програму чи підключення процедур на асемблері. В любому випадку це дозволяє підвищити якість отримуваного коду. Крім того, вивчаючи асемблер, ви обов’язково познайомитися з архітектурою комп’ютера, а це дозволить Вам в подальшому створювати більш ефективні програми на інших алгоритмічних мовах програмування і об’єднувати їх, при необхідності, з програмами на асемблері.
Посібник розрахований для студентів комп’ютерних спеціальностей, а також на тих, хто цікавитися програмуванням мікропроцесорів Intel на низькому рівні. Він може використовуватися і для самостійного вивчення студентами з дистанційною формою навчання.
ТЕОРЕТИЧНІ АСПЕКТИ
Архітектура ЕОМ є ключовим для вивчення асемблера. Структура асемблера, формат його команд, адресація операндів і т. д. повністю відображають особливості архітектури комп’ютера. Архітектура електронно-обчислювальної машини є її комплексним представленням і включає в себе: структурну схему ЕОМ; засоби і способи доступу до елементів структурної схеми ЕОМ; організацію і розрядність інтерфейсів ЕОМ; набір і доступність регістрів; організацію і способи адресацій пам’яті; способи представлення і формати даних ЕОМ; набір машинних команд ЕОМ; формати машинних команд; обробка нештатних ситуацій. Узагальнена структурна схема ЕОМ на базі мікропроцесорів Intel об’єднує в собі центральний мікропроцесор, оперативну пам’ять, зовнішні пристрої. Всі компоненти з’єднані між собою через системну шину, яка має додаткову шину – шину розширення (PCI – Peripheral Component Interface), до якої приєднані зовнішні пристрої, а також шини ранніх стандартів [1]. Однак головним елементом в комп’ютері виступає мікропроцесор (електронна схема), який дозволяє виконувати всі обрахунки і проводить обробку інформації. Мікропроцесор виконує сотні різних операцій зі швидкістю в декілька сотень операцій в секунду. Оцінити мікропроцесор можна за тактовою частотою, яка вказує про швидкість виконання елементарних операцій всередині мікропроцесора. В архітектурі мікропроцесорів Intel, основу яких складає блок мікропрограмного управління, виконавчий пристрій, регістри, як і у процесорів інших фірм, є індивідуальні архітектурні властивості і принципи: принцип зберігання програми (код програми і її данні знаходяться в одному адресному просторі в оперативній пам’яті); принцип мікропрограмування (в склад процесора входить блок мікропрограмного управління за допомогою якого для кожної машинної команди існує набір сигналів, які необхідно згенерувати для фізичного виконання необхідної машинної команди); лінійний простір пам’яті (сукупність комірок пам’яті, яким послідовно присвоюються адреси); послідовність виконання програм (процесор вибирає з пам’яті команди строго послідовно); для процесора немає різниці між даними і командами. Важливим елементом архітектури, який з’явився в мікропроцесорах i486, є конвеєр – спеціальний пристрій, який реалізує метод обробки команд всередині мікропроцесора, виконання яких розбивається на декілька етапів: вибір команди з кеш-пам’яті чи оперативної пам’яті; декодування команди; генерація адреса, за допомогою якого визначається адреси операндів в пам’яті; .виконання операції за допомогою арифметично-логічного пристрою; запис результату. Мікропроцесори, які мають один конвеєр, називають скалярними, а два і більше – суперскалярними (можливість виконання за один машинний такт двох команд). Мікропроцесор містить 32 регістра, які можна поділити на системні регістри і користувацькі. Користувацькі регістри мають певне призначення, наприклад регістр прапорців eflags – відображає стан мікропроцесора після виконання останньої машинної команди, а регістр вказівника команди eip містить адрес наступної виконаної машиною команди; при цьому доступ до цих регістрів зі сторони програм користувача обмежений. Мікропроцесор має три режими роботи: реальний режим, який використовувався для і8086 і підтримується до цього часу для забезпечення сумісності програмного забезпечення; захищений режим, який вперше з’явився в і80286; режим віртуального мікропроцесора і8086, який забезпечує повну його емуляцію, дозволяючи при цьому організувати багатозадачну роботу деяких програм. Режими роботи мікропроцесора мають значний вплив на роботу складної системи управління пам’яті.
ЛАБОРАТОРНА РОБОТА № 1
“СИСТЕМА ПРОГРАМУВАННЯ НА АСЕМБЛЕРІ”
МЕТА РОБОТИ
Мета роботи - вивчення системи програмування на Асемблері ІВМ РС.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Асемблер є мовою програмування низького рівня. Він забезпечує написання, відладку та виконання програм на рівні близькому до машинних команд. Основна область застосування Асемблера - написання високоефективних програм системного характеру (драйверів, динамічна відеографіка, обробка сигналів в режимі реального часу, тощо).
Програмування на Асемблері базується на системі програмування, яка забезпечує перехід від початкового файлу з текстом програми до завантажуваного файлу, готового до виконання (інтерпретації мікропроцесором).
Реалізація програми на Асемблері охоплює такі етапи:
- написання програми на мові Асемблера, ввід та оформлення її у вигляді початкового файлу за допомогою текстового редактора (наприклад, Nогtоn Соmmander);
- трансляція початкового файлу в об'єктний файл;
- редагування зв'язків на основі декількох об'єктних файлів і формування завантажуваного файлу для інтерпретації мікропроцесором.
Така схема забезпечує незалежне асемблювання кількох початкових файлів з подальшим їх об'єднанням на рівні об'єктних файлів в один завантажуваний. Вказаний підхід реалізує концепції модульного програмування (розробка та реалізація програм по частинах - модулях). Відповідно розглядають початковий модуль, об'єктний модуль та завантажуваний модуль. Відомі і простіші схеми асемблювання, які забезпечують, перехід, від рівня початкових файлів до завантажуваних.
2.1. Структура програми на Асемблері
Програма. на Асемблері складається з модулів. Модулі складаються з сегментів. Сегменти складаються з процедур, команд та директив.
Початковий програмний модуль складається з операторів. Виділяються оператори трьох типів: команди, директиви, коментар. Оператори команд визначають операції, які виконує процесор. Директиви вказують Асемблеру та Редактору зв'язків як оформляти (об'єднувати) команди та модулі в програму. Директиви також забезпечують розподіл пам'яті та визначення даних.
Оператори команд складаються з символічного імені, коду операції, поля операндів та коментаря. Код операції визначає команду і відрізняє її від директиви. При написанні програми на Асемблері символічне ім’я ставиться перед кодом операції через двокрапку і називається міткою (внутрішньою). Мітка визначає адресу команди в оперативній пам'яті, що може використовуватись, наприклад, операторами переходу.
Операнди (два, один, або відсутні) визначають дані над якими виконуються операції процесором. Операнди відділяються один від одного комою, а від коду команди - пропуском.
Коментар відділяється від полів команди та операндів пропуском та крапкою з комою. Він не приймає участі в асемблюванні і служить лише для документування програми.
Оператори директив складаються з символічного імені, коду псевдооперації, поля операндів та коментаря. Структура директиви аналогічна структурі команди. Код псевдооперації визначає зміст директиви.
Операндів директиви може бути декілька і вони розділяються комами, а від коду псевдооперації відділяються пропуском.
Символічне ім'я, яке стоїть на початку директиви розподілу пам'яті (директиви визначення) називається змінною. Символічне ім'я директиви відділяється від коду пропуском, а не двокрапкою, як мітка.
Коментар записується через пропуск та крапку з комою.
Програма складається з модулів, які можуть бути паралельно розроблені та реалізовані. Кожний модуль складається з операторів, які обробляються (транслюються) Асемблером. Для транслятора признаком кінця операторів модуля є директива - ЕND (Кінець). Крім того операнд директиви END визначає точку входу програми.
Кожний модуль поділяється на окремі частини директивами сегментації, які визначають початок (SEGMENT) та кінець (ENDS) сегмента. Кожен із сегментів (типів сегментів) має певні функції і забезпечує структуризацію програм. Всі сегменти поіменовані (SSEG - стековий сегмент, CSEG - програмний сегмент, DSEG - сегмент даних, ESEG - додатковий сегмент даних). Директива ASSUME зв'язує довільні імена з сегментами відповідного типу. Типи сегментів визначають функції, що вони виконують (SS, ES та-DS - визначення даних, CS - послідовність команд, а також, директив, що групують ці команди у блоки).
Програмний сегмент поділяється на частини директивами визначення процедур (по іменованих). Процедури близькі до підпрограм, але вони знаходяться, у складі початкового модуля. Основні складові програми вказані на прикладі
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG
START PROC FAR
PUSH DS
PAD: MOV BX,DSEG
CALL MAIN
MOV AX,4C00H
INT 21H
START ENDP
MAIN PROC NEAR
MOV AM,CATS
. . . RET
MAIN ENDP
CSEG ENDS
END START
2.2. Структура операндів
Виділяють два основних типи операндів: регістровий та операнд в оперативній пам'яті. Команда може мати 0,1,2 операнди. Якщо операнд один, то він або регістровий, або в оперативній пам'яті. Якщо їх два, то один регістровий, а інший в оперативній пам'яті. Операнд в регістрі визначається ім'ям цього регістра. Операнд в оперативній пам'яті визначається вмістом регістрів, поіменованих символічними іменами, областями оперативної пам'яті та константами - це визначає спосіб адресації.
2.3. Способи адресації
Безпосередня адресація:
MOV DX,3451H ; (3451H - абсолютна адреса)
MOV DX,OFFSET CATS ; адреса, змінної CATS відносно початку сегмента)
Індексна адресація:
MOV DX,[SI] ; (посередня адресація)
Відносна адресація:
MOV DX,[BX] ; (посередняадресація)
Адресація з індексацією та базуванням:
MOV [DX+SI] ; (посередня адресація)
Пряма адресація:
MOV DX,CATS
Пряма адресація з індексацією:
MOV DX,CATS[SI]
Пряма адресація з базуванням:
MOV DX,CATS[BX]
Пряма адресація з індексацією та базуванням:
MOV DX,CATS[BX+SI]
Якщо операнд заданий константою (безпосередня адресація), то він обробляється, як дані (при трансляції підставляється адреса цієї константи). Якщо в операнді вказане ім'я, то це - різновидність прямої адресації. Якщо в операнді імені немає, а є регістри (індексний чи базовий) в квадратних дужках, то це - посередня, адресація, бо адреса визначається через вміст регістрів. Коли є ім’я і регістри, то це пряма адресація з базуванням та індексуванням.
2.4. Класифікація команд:
Команди передачі даних MOV
Приклади:
MOV AH,CATS
MOV AX,BX
MOV AH,AL
MOV AH,6
Команди порівняння CMP, TEST, умовного JE, JG, JL, JNE, та безумовного JMP переходу
Приклади:
JMP FAD
CMP AH,01
JE C1
CMP AH,01
JNE C2
Команди виклику та повернення з процедури (підпрограми) CALL, RET
Приклад:
CALL PG
RET 4
Команди роботи зі стеком PUSH, POP
Приклад:
PUSH AX
POP
Команди роботи зі стрічковими даними LOADSB, MOVSB
Приклад:
MOV SI, OFFSET CATS
MOV DI, OFFSET RATS
MOV CX,3
REP MOVSB
Команда циклу LOOP
Приклад:
MOV CX,14
MOV SI,0
DAD: MOV AX,CAT[SI]
. . .
INC SI
LOOP DAD
. . .
MOV CX,10
C1: PUSH CH MOV CX,20
C2: PUSH CX
MOV CX,30
C3: MOV AX,B2
LOOP C3
POP CX
LOOP C2
POP CX
LOOP C1
Команди побітової обробки
AND AX,OFFOOH ; (логічне множення)
OR AX,OFFOOH ; (логічне додавання)
XOR AH,OF1H
TEST AX,BX ; (виконується аналогічно AND, однак операнди не міняються)
Команди зсуву
SHR AL,1 ; (вправо)
MOV CL,3
SHL AL,CL ; (вліво)
SAR AL,1 ; (арифметичний зсув вправо)
ROR AL,1 ; (циклічний зсув вправо)
ROR AL,1 ; (циклічний зсув вправо з переносом)
Арифметичні команди
ADD AX,DX ; (додавання)
SUB AX,AX ; (віднімання)
MUL BX ; (множення)
DIV BX ; (ділення)
Команди переривання INT, STI, CLI
Команди вводу/виводу
IN AX,DX
OUT DX,AX
Команди роботи з прапорцями (признаками)
TEST AX,01100B
Команди керування HLT,WAIT
Команди завантаження сегментів LDS, LES
Текст учбової програми на Фортрані
с Дата+час
implicit integer*2(j)
jah=42
call eldati (jah, jal, jcx, jdh, jdl)
jcx=jcx-1900
1 format (i2,’.’,i2,’.’,i2)
jah=44
call eldati (jah, jal, jcx, jdh, jdl)
jch=jcx/256
jcl=jcx-jch*256
write(*,1) jch, jcl, jdh
stop
end
Текст учбової підпрограми на Асемблері
title date+ time
frame struc
savep dw ?
saveret dd ?
jdl dd ?
jdh dd ?
jcx dd ?
jal dd ?
jah dd ?
frame ends
code segment ‘code’
assume cs:code
eldati proc far
public eldati
push bp
mov bp, sp
push si
les si,[bp]. jah
mov ah, es:[si]
cmp ah, 02bh
je c2
cmp ah, 02dh
je c2
c1: int 21h
les si, [bp]. jal
mov es:[si], al
mov al, 0
mov es:[si+1], al
les si,[bp]. jcx
mov es:[si], cx
les si,[bp]. jdh
mov es:[si], dh
mov es:[si+1], al
les si,[bp]. jdl
mov es:[si], dl
mov es:[si+1], al
jmp c3
c2: les si,[bp]. jcx
mov cx,es:[si]
les si,[bp]. jdh
mov dh, es:[si]
les si,[bp]. jdl
mov dl,es:[si]
int 21h
les si,[bp]. jal
mov es:[si], al
mov al, 0
mov es:[si+1],al
c3: pop si
mov sp, bp
pop bp
ret 20
eldati endp
code ends
end
3. КОНТРОЛЬНІ ЗАПИТАННЯ
1. На прикладі учбової підпрограми на асемблері вкажіть її основні структурні елементи та їх призначення.
Охарактеризуйте способи передачі параметрів у підпрограму.
Вкажіть особливості використання функцій DOS та BIOS.
Як здійснюється передача параметрів для функцій DOS та BIOS?
На учбовому прикладі прокоментуйте команди роботи зі стеком.
На учбовому прикладі прокоментуйте команди для організації вкладених циклів.
Охарактеризуйте команди Асемблера та функції BIOS для виводу на дисплей в графічному режимі.
4. ЛАБОРАТОРНЕ ЗАВДАННЯ
1. Ввести і протранслювати тексти учбових програм на Асемблері та Фортрані. Ознайомитись з лістінгами трансляції.
2. Зібрати відтрансльовані програми редактором зв'язків і ознайомитись з лістінгом редагування.
Виконати зібрану програму і вказати на виявлені особливості.
Використовуючи тексти учбових програм провести їх власну модифікацію і повторно виконати пп. 1-3.
5. ОФОРМЛЕННЯ ЗВІТУ
1. Коротко охарактеризувати систему програмування на Асемблері та вказати на її особливості.
2. Привести тексти учбових програм з письмовим коментарем основних команд та фрагментів програми.
3. Привести текст власного модифікованого варіанту учбової програми.
4. Привести лістінги трансляції та редагування зв'язків з коментарями.
5. Дати коротку характеристику системи програмування на Асемблері.
ЛАБОРАТОРНА РОБОТА № 2
“ПРОГРАМУВАННЯ ПАРАЛЕЛЬНОГО ІНТЕРФЕЙСУ”
МЕТА РОБОТИ
Мета роботи – засвоїти основи організації обміну інформацією між ЕОМ і отримати практичнi навики програмування вводу-виводу через паралельний інтерфейс.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
2.1. Зовнішні інтерфейси ЕОМ
В процесі функціонування інформаційно-обчислювальних систем значне місце посідають операції обміну інформацією між ЕОМ та між ЕОМ і зовнішними пристроями. Важливо відмітити, що обмін інформацією між ЕОМ та зовнішними пристроями у більшості випадків зводиться до обміну інформацією між ЕОМ та керуючою ЕОМ (контроллером) зовнішнього пристрою. Тому в лабораторній роботі розглядається узагальнена задача організації і реалізації обміну інформацією між ЕОМ через паралельний інтерфейс.
Обмін інформацією між між ЕОМ та зовнішніми пристроями передбачає наявність одного з можливих зовнішніх інтерфейсів – засобів взаємодії. Для ПЕОМ найбільш поширеними є послідовний (RS-232 C) і паралельний інтерфейси, а також USB та SCSI. Зв’язок між внутрішньою системною шиною комп’ютера (PCI, ISA) та входом./виходом зовнішнього інтерфейсу забезпечується за допомогою адаптера – пристрою, який реалізує протокол обміну. Протокол обміну – це сукупність правил та домовленостей (стандартів), які описують та регламентують процедуру обміну інформацією між взаємодіючими об’єктами. Фактично протокол обміну – це сукупність протоколів, які згруповані по певних признаках в багаторівневу ієрахічну структуру. Найбільш повно ця структура представлена семирівневою еталонною моделлю протоколів обміну даними (ISO) [1], яка буде вивчатись у інших курсах. В даній лабораторній роботі охоплюються лише кілька рівнів цієї моделі, які визначають фізичну реалізацію та логічну організацію обміну інформацією. Фізична реалізація зовнішнього інтерфейсу визначає конструктивне виконання роз’ємів, рівні та значення електричних сигналів. Логічна організація визначає відповідність сигналів приймача та передавача, послідовність операцій та сигналів для встановлення зв’язку та обміну інформацією.
В сучасних ПЕОМ адаптери послідовного і паралельного інтерфейсів часто інтегровані в системну плату і реалізовані за допомогою контроллера “Південний міст”, який входить до складу чіпсета.
2.2. Режими адаптера паралельного інтерфейсу
Сучасні адаптери паралельного інтерфейсу відповідають вимогам стандарту IEEE 1284 – “Стандартний метод передачі сигналів для двонаправленого паралельного периферійного інтерфейсу для персональних комп’ютерів”. Він забезпечує високу швидкість передачі інформації і зворотню сумісність з більш ранніми версіями та режимами адаптерів паралельного інтерфейсу.
Паралельний інтерфейс передбачає використання 25 ліній, які поділяються на лінії даних, лінії стану та лінії керування. Лінії даних використовуються для однонаправленого чи двонаправленого обміну даними. Лінії стану призначені для передачі контроллером присторою в адаптер сигналів, що характеризують стан пристрою. Лінії керування використовуються для передачі контроллеру пристрою керуючих сигналів адаптера.
Існує п’ять режимів роботи адаптера паралельного інтерфейсу:
Режим сумісності (Centronics, SPP) – стандартний однонаправлений режим передачі восьми бітів даних від ПК до периферійного пристрою з швидкістю до 150 Кб/с (по лініях даних).
Режим тетради - двонаправлений напівдуплексний чотирьохбітовий режим обміну з використаннням чотирьох ліній даних для передачі і чотирьох ліній стану для прийому даних (з швидкістю до 80 Кб/с).
Режим байта – двонаправлений режим з напівдуплексним використанням восьми ліній даних для передачі і прийому даних (з швидкістю до 150 Кб/с).
EPP – режим - вдосконалений паралельний інтерфейс з апаратурно реалізованим швидкісним двонаправленим обміном даними (до 2 Мб/с) на основі “рукопотискання” в межах одного циклу вводу/виводу.
ECP – режим – розширений паралельний інтерфейс з апаратурно реалізованим швидкісним двонаправленим обміном даними на основі “рукопотискання” в межах одного циклу вводу/виводу, або з використанням каналу прямого доступу до пам’яті (DMA) без використання прямих операцій вводу/виводу. Цей режим також використовує стиснення даних на основі алгоритму RLE.
2.3. Сигнали адаптера паралельного інтерфейсу
Для з’єднання адаптера паралельного інтерфейсу і периферійних пристроїв використовується три види роз’ємів:
1284 Тип А – 25-контактиний роз’єм (встановлюється на адаптері);
1284 Тип В – 36-контактний роз’єм Centronics (використовується у принтерах);
1284 Тип С – 36-контактний роз’єм аналогічний Centronics, але меншого розміру.
Електричні інформаційні та керуючі сигнали на входах/виходах паралельного інтерфейсу відповідають стандартам TTL логіки. Навантажувальна здатність виходів переважно не перевищує одного TTL входу. Для збільшення навантажувальної здатності використовуються буферні мікросхеми. Відповідність сигналів інтерфейсу і контактів роз’ємів для режиму сумісності відображена у таблиці 1.
Сукупність ліній інтерфейсу приєднується до певних адресованих програмно доступних апаратних регістрів адаптера які називаються портом. Біти цих регістрів відповідають певним значенням сигналів кожної з ліній. В ПЕОМ може бути до трьох адаптерів паралельного інтерфейсу, кожен з яких містить регістр даних, регістр стану (статусу) і регістр керування. Адаптери позначаються LPT1-LPT3 і адресуються базовою адресою, яка співпадає з адресою регістру даних в операціях вводу/виводу. Зазвичай LPT1 відповідає базова адреса 378h, LPT2 – 278H, LPT3 – 3DCH. Враховуючи те, що базові адреси можуть мінятись, в області даних BIOS записані фактичні базові адреси портів LPT1-LPT3. Базова адреса LPT1 записана в комірці 0040:0008, базова адреса LPT2 - в комірці 0040:000A, а базова адреса LPT3 – в комірці 0040:000С. Адреса регістру стану рівна базовій адресі+1, а адреса регістру керування – базовій адресі+2.
В вихідні сигнали на виводах 2-9 відповідають логічним значенням бітів 0-7 регістру даних. Відповіднисть вхідних сигналів на виводах роз’єму і бітів регістру стану відображена у таблиці 2, а відповідність вихідних сигналів на виводах роз’єму і бітів регістру керування – у таблиці 3.
Таблиця 1
№ виводу
адаптера
№ виводу
Centronics
Назва сигналу
(при обміні з принтером)
Напрям
Регістр
1
1
Strobe – строб
Вихід*
Керування
2
2
Data0 – дані, біт 0
Вихід
Даних
3
3
Data1 – дані, біт 1
Вихід
Даних
4
4
Data2 –дані, біт 2
Вихід
Даних
5
5
Data3 – дані, біт 3
Вихід
Даних
6
6
Data4 – дані, біт 4
Вихід
Даних
7
7
Data5 – дані, біт 5
Вихід
Даних
8
8
Data6 – дані, біт 6
Вихід
Даних
9
9
Data 7 – дані, біт 7
Вихід
Даних
10
10
Ask –прийом байта принтером завершений
Вхід
Стану
11
11
Busy – зайнято – принтер приймає дані
Вхід*
Стану
12
12
Paper – відсутність паперу
Вхід
Стану
13
13
Select – підтвердження вибору принтером
Вхід
Стану
14
14
Auto line feed – автоматичн.перевід стрічки
Вихід*
Керування
15
32
Error – помилка
Вхід
Стану
16
31
Init – іниціація контроллера принтера
Вихід
Керування
17
36
Select – вибір принтера адаптером
Вихід*
Керування
18-25
19-30
Ground – земля
- апаратна інвесія сигналу.
Таблиця 2
№ виводу
адаптера
№ біта
регістра
Значення активного сигналу
0
Зарезервоване
1
Зарезервоване
2
IRQ
15
3
Error (0 – помилка)
13
4
Select (1 – принтер on-line)
12
5
Paper (1 – відсутність паперу)
10
6
Ask (0 – підтвердження прийому байта)
11
7
Busy (0 – принтер зайнятий)
Таблиця 3
№ виводу
адаптера
№ біта
регістра
Значення активного сигналу
0
Strobe (1 – вивід байта даних)
1
Auto Line Feed (1- автоматичний перевід стрічки)
2
Init (0 – ініціація контроллера принтера)
3
Select (0 – відміна вибору принтера адаптером)
4
Interrupt (1 – переривання від принтера дозволено)
5
Doubly linked I/O (1 – дозвіл двонаправленого режиму)
6
Не використовується
7
Не використовується
2.4. Організація вводу/виводу для паралельного інтерфейсу
Всі режими стандарту 1284 забезпечують організацію вводу/виводу даних з використанням “рукопотискання”. Протокол “рукопотискання” в інтерфейсі передбачає, що прийом кожної зміни сигналу керування адаптера підтверджується зміною відповідного сигналу стану контроллера і навпаки. Це дає можливість периферійним пристроям керувати часом, потрібним для виконання операції вводу/виводу (синхронізація вводу/виводу), а також формувати цикл стійкої прийомопередачі незалежно від довжини кабеля, яка впливає на час встановлення сигналів.
Реалізація “рукопотискання” забезпечується циклічним виконанням такої послідовності кроків:
Байт, що виводиться, заноситься в регістр даних адаптера.
Перевіряється стан принтера (сигнал Busy) і після встановлення сигналу “Принтер вільний” адаптером встановлюється активне значення сигналу стробу, яке дозволяє прийом нового байта даних контроллером принтера.
По закінченню прийому байта, контроллером встановлюється відповідне значення сигналу Ask (прийом байта завершений), прийом якого відтверджується адаптером скиданням активного значення сигналу стробу.
Після чого адаптер переходить до першого кроку для виводу нового байта даних.
При реалізації такого протоколу синхронний ввід/вивід здійснюється під керуванням центрального процесора, який є ініціатором обміну. При низькій швидкодії периферійних пристроїв це приводить до нераціонального використання процесорного часу (процесор простоює, очікуючи завершення роботи периферійного пристрою). Для усунення цього недоліку використовується асинхронний ввід/вивід в режимі переривання. При цьому процесор ініціює вивід першого байта і переходить до виконання якої-небудь іншої задачі (наприклад обчислення нових значень). По завершенню обробки прийнятого байта контроллер периферійного пристрою встановлює активне значення сигналу Ask, яке викликає апаратне переривання процесора. Процесор переходить у підпрограму обробки переривань і формує сигнали для виводу наступного байта. Таким чином у цьому режимі ініціатором обміну (крім першого байта) є периферійний пристрій.
2.5. Реалізація обміну інформацією між ЕОМ за допомогою паралельного інтерфесу в режимі тетради
При вирішенні багатьох задач виникає необхідність забезпечення двонаправленого обміну інформацією з використанням паралельного інтерфейсу. В даній лабораторній роботі розглядається варіант організації двонаправленого обміну між ПЕОМ з використанням паралельного інтерфейсу в режимі тетради. Для цього використовується кабельне з’єднання роз’ємів паралельного інтерфейсу у відповідності з рис.1. При передачі, байт, що виводиться заноситься потетрадно в молодші розряди регістру даних (D0-D3), а прийом тетрад забезпечується входами інтерфейсу, які забезпечують отримання слова стану (Ask, Paper,Select, Error). Передача байта здійснюється півбайтами з використаннням мультиплексування. Сигнали Strobe та Busy використовуються для керування обміном. Прийомопередача здійснюється в напівдуплексному режимі (одна ПЕОМ передає, інша приймає, а потім вони міняються). Фрагмент програми, який ілюструє можливий варіант реалізації передачі даних, приведений на рис. 2.
Рис. 1. Кабельне з’єднання роз’ємів паралельного інтерфейсу для режиму тетради.
mov si,0
mov ax,40h ; занесення адреси LPT1 в регістр dx
mov es,ax
mov dx,es:[8]
c1: mov al,buf[si]
out dx,al ; занесення байта в регістр даних
inc dx
inc dx
mov al,13 ; формування строба (вивід керуючого слова)
out dx,al
dec al
out dx,al
dec dx ; ввід і аналіз слова стану
c2: in al,dx
test al,01000b
jz error
test al,80h
jz c2
inc si
dec dx
jmp c1
Рис.2. Фрагмент програми передачі даних.
КОНТРОЛЬНІ ЗАПИТАННЯ
1. Вкажіть призначення та основнi функцiї зовнішніх інтерфейсів ПЕОМ.
2. Якi особливостi організації передачі даних через паралельний інтерфейс ?
3. Які режими роботи адаптера паралельного інтерфейсу ?
4. Вкажіть основні сигнали паралельного інтерфейсу при виводі на принтер.
5. В чому полягає обмін сигналами в режимі “рукопотискання” ?
6. Вкажіть на особливості організації двонаправленого обміну даними в режимі тетради.
7. Прокоментуйте команди фрагмента програми обміну.
ЛАБОРАТОРНЕ ЗАВДАННЯ
Ознайомтесь з сигналами адаптера паралельного інтерфейсу і організацією обміну даними.
Встановіть відповідність