
- •Архітектура комп’ютерів методичний посібник для проведення лабораторних робіт
- •Лабораторна робота № 1 перетворення чисел в машинних кодах
- •Теоретичні відомості
- •1. Формати даних
- •1.1 Природна форма числа
- •1.2 Нормальна форма числа
- •2. Машинні коди чисел
- •2.1 Дії над числами в природній формі
- •2.2 Дії над числами в нормальній формі
- •Методичні вказівки
- •Література
- •Завдання
- •Лабораторна робота № 2 цеом нейманівської архітектури
- •Теоретичні відомості
- •1. Структура еом
- •2. Елементарні машинні операції
- •3. Формати команд та кодування операцій еом
- •Методичні вказівки
- •Література
- •Завдання
- •1. Схема алгоритма розв’язку задачі
- •2. Програма в змістовній формі
- •3. Система операцій еом
- •4. Кодування операцій еом
- •5. Адресна інформація в 16-й системі числення
- •6. Розподіл пам’яті
- •7. Програма в машинних кодах
- •1. Загальні відомості про системи прямого доступу до пам’яті
- •2. Прямий доступ до пам’яті в пеом
- •3. Призначення та формати регістрів кпдп
- •3.1 Регістр станів (stat)
- •3.2 Регістр команд (cr)
- •3.3 Регістр режиму (mod)
- •3.4 Регістр маски (mask)
- •3.5 Регістр запиту (req)
- •3.6 Регістр поточної адреси
- •3.7 Регістр поточного лічильника слів (ccr)
- •3.8 Базові регістри адрес та лічильника (bar та car)
- •3.9 Тимчасовий регістр (tr)
- •3.10 Канали системи пдп пеом
- •4. Ініціалізація кпдп
- •Методичні вказівки
- •Література
- •Завдання
- •Текст програми
- •Контрольні запитання
- •1. Принципи організації системи переривань
- •2. Стани програмованого контролера переривань.
- •3. Призначення та формати операційних слів пкп
- •3.1 Операційне слово ocw1
- •3.2 Операційне слово ocw2
- •3.3 Операційне слово ocw3
- •Методичні вказівки
- •Література
- •Завдання
- •Текст програми
- •Контрольні запитання
- •Лабораторна робота № 5
- •Генерації звуку та випадкових чисел
- •Теоретичні відомості
- •1. Призначення таймера
- •2. Архітектура та принципи функціонування таймера
- •3. Програмування таймера
- •4. Засоби bios для роботи з таймером
- •5. Генерація звукових сигналів
- •6. Генерація випадкових чисел
- •Методичні вказівки
- •Література
- •Завдання
- •Тексти програм
- •Лабораторна робота № 6 вивчення та дослідження методів програмного керування годинником реального часу
- •Теоретичні відомості
- •1. Призначення годинника реального часу
- •2. Призначення та формати регістрів кмон-пам’яті
- •3. Засоби bios для роботи з годинником реального часу
- •Методичні вказівки
- •Література
- •Завдання
- •Тексти програм
- •Лабораторна робота № 7 дослідження режимів роботи послідовних інтерфейсів пеом
- •Теоретичні відомості
- •1. Загальні відомості про інтерфейс
- •2. Використання порту rs232c
- •3. Функції апаратних засобів інтерфейса rs232c
- •4. Формати портів уапп
- •5. Ініціалізація уапп
- •6. Підтримка асинхронного адаптера в bios
- •7. Підтримка асинхронного адаптера в dos
- •Методичні вказівки
- •Література
- •Завдання
- •Тексти програм
- •1. Призначення та характеристики інтерфейса Centronics
- •2. Опис портів інтерфейса Centronics
- •3. Засоби bios для роботи з принтером
- •Методичні вказівки
- •Література
- •5. Гук м. Аппаратные средства ibm pc. Энциклопедия. – сПб.: “Издательс-тво
- •Завдання
- •Тексти програм
- •Лабораторна робота № 9 дослідження методів програмного керування контролером клавіатури
- •Теоретичні відомості
- •1. Контролер клавіатури pc/at i8042
- •2. Порти контролера клавіатури
- •3. Методи програмного керування клавіатурою
- •4. Коди відповідей клавіатури
- •5. Засоби bios та ms dos для роботи з клавіатурою
- •5.1 Засоби bios
- •5.2 Засоби ms dos
- •Методичні вказівки
- •Література
- •Завдання
- •Тексти програм
- •Лабораторна робота № 10 дослідження методів програмного керування контролером нгмд
- •Теоретичні відомості
- •1. Основні відомості про контролер нгмд
- •2. Програмування контролера нгмд
- •Методичні вказівки
- •Література
- •Завдання
- •2) Записати введений користувачем рядок у сектор s на доріжку t;
- •Контрольні запитання
- •Література
- •1. Гук м. Аппаратные средства ibm pc. – сПб.: “Питер”, 1999. – 816 с.
Тексти програм
// delay – 1
#include <conio.h>
#include <stdio.h>
void tm_delay (int ticks)
{
asm {
// збереження в стеку вмісту регістра SI
push si
// помістити змінну ticks у регістр SI
mov si, ticks
// занести код функції 00h переривання 1Ah в регістр AH
mov ah, 00h
// викликати обробник переривання 1Ah int 1Ah
// переписати молодше слово лічильника із DX у BX
mov bx, dx
// скласти вміст регістрів BX, SI
add bx, si
}
// мітка переходу для організації циклу затримки
delay_loop:
asm {
// викликати обробник переривання 1Ah int 1Ah
// порівняти поточне значення лічильника із заданим
cmp dx, bx
// якщо нерівні, йти на мітку циклу затримки
jne delay_loop
// інакше, відновити вміст регістра SI
pop si
}
}
void main (void)
{
int n;
char c = „y‟;
while (c != „n‟) {
clrscr ();
printf (“Введіть час затримки в секундах: ”);
scanf (“%d”, &n);
tm_delay (n * 18);
printf (“Завершено. Бажаєте ще (y/n)?”);
c = getch ();
}
}
38
// delay – 2
#include <dos.h>
#include <conio.h>
#include <stdio.h>
void main (void)
{
unsigned long time_mks;
unsigned int lw, hw;
clrscr ();
printf (“Введіть час затримки, мкс: ”);
scanf (“%ld”, &time_mks);
// формування молодшого та старшого байтів затримки
lw = (unsigned int) (time_mks & 0x0000FFFF);
hw = (unsigned int) ((time_mks & 0xFFFF0000) >> 16);
asm {
// зберігаємо в стеку всі регістри
pusha
// заносимо в регістр AH номер функції 0x86 mov ah, 0x86
// заносимо в регістр CX старший байт затримки
mov cx, hw
// заносимо в регістр DX молодший байт затримки
mov dx, lw
// викликаємо обробник переривання 15h
int 0x15
// відновлюємо вміст регістрів
popa
}
printf (“Час затримки закінчився”);
}
// bip
#include <conio.h>
void beep (void)
{
asm {
// зберегти вміст регістрів AX і CX у стеку
push ax
push cx
// коефіцієнт перерахунку – в регістр CX
mov cx, frac
// в регістр AL – керуюче слово таймера
mov al, 0xB6
// керуюче слово відсилається в порт 43h з регістра AL
out 0x43, al
39
}
tm:
// коефіцієнт перерахунку заноситься в регістр CX
mov ax, cx
// в порт 42h пересилається спочатку молодший,
out 0x42, al
mov al, ah
// а потім старший байт
out 0x42, al
// читається байт з порту 61h in al, 0x61
// прочитаний байт зберігається в регістрі AH
mov ah, al
// у два молодші біти записуються одиниці
or al, 3
// нове значення відсилається в порт 61h
out 0x61, al
asm {
// в регістр AL – скан-код натисненої клавіши
in al, 0x60
// утворюється додатковий скан-код
and al, 0x80
// залишитись у циклі, якщо клавіша натиснена
jz tm
// відновлюємо початкове значення байта
mov al, ah out 0x61, al
// відновлюємо регістри CX та AX
pop cx
pop ax
}
}
void main (void)
{
int frac;
char k;
clrscr ();
printf (“Натискайте клавіши та слухайте звуки.\n”);
printf (“Для завершення роботи натисність ECS.\n”);
while ((k = getch ()) != 27) {
frac = k * 100;
beep ();
}
}
// random
#include <dos.h>
void rnd_set (int bound)
40
{
outp (0x43, 0xB6);
outp (0x42, bound & 0x00FF);
outp (0x42, (bound & 0xFF00) >> 8);
outp (0x61, inp (0x61) | 1);
}
int rnd_get (void)
{
int i;
outp (0x43, 0x86);
i = inp (0x42);
i = (inp (0x42) << 8) + i;
return i;
}
void main (void)
{
int i, j;
clrscr ();
rnd_set (100);
for (i = 1; i < 40; i++) {
printf (“%d ”, rnd_get ());
getchar ();
}
}
КОНТРОЛЬНІ ЗАПИТАННЯ
1. Скільки та які порти вводу/виводу використовуються для програмування таймера?
2. Які дії передбачає програмування таймера?
3. Назвіть засоби BIOS, що використовуються для роботи з таймером.
4. Чому часові затримки, сформовані з використанням таймера, не залежать від продуктивності комп’ютера?
5. Які порти використовуються для керування гучномовцем ПК?
41