Поиск по базе сайта:
Інформація про комп’ютер зберігається у зарезервованих комірках пам’яті, які завантажуються в молодші 640 Кб адресного простору озп та використовуються системними та прикладними програмами під час роботи пк icon

Інформація про комп’ютер зберігається у зарезервованих комірках пам’яті, які завантажуються в молодші 640 Кб адресного простору озп та використовуються системними та прикладними програмами під час роботи пк




Скачати 208.27 Kb.
НазваІнформація про комп’ютер зберігається у зарезервованих комірках пам’яті, які завантажуються в молодші 640 Кб адресного простору озп та використовуються системними та прикладними програмами під час роботи пк
Дата конвертації25.10.2014
Розмір208.27 Kb.
ТипІнформація

Розробили: проф. Сидоренко В.В., викл. Дóренський О.П., 2006-2011

Лабораторна робота № 1

ТЕМА: Використання системного програмування в реальному режимі роботи центрального процесора для визначення конфігурації ПК IBM PC.

МЕТА: Ознайомитись з основами системного програмування, навчитись програмним шляхом одержувати інформацію про системні характеристики ПК типу IBM PC.

Короткі теоретичні відомості

Системна інформація про комп’ютер зберігається у зарезервованих комірках пам’яті, які завантажуються в молодші 640 Кб адресного простору ОЗП та використовуються системними та прикладними програмами під час роботи ПК.

Розглянемо спрощену схему розподілу пам’яті у реальному режимі (таблиця 1.1).
Таблиця 1.1 – Розподіл пам’яті у реальному режимі

Адреса

Значення

FFFFFF

ПЗП BIOS

F0000

Зарезервовано

C0000

Текстовий відеобуфер

B8000

Графічний відеобуфер

A0000

Область для завантаження транзитних програм (додатків користувача)

Резидентна частина командного процессора

Ядро системи MS DOS

Драйвера пристроїв

00400
^

Область даних BIOS і DOS


00000

Таблиця векторів переривань


У молодших адресах пам’яті розміщується ядро ОС, перші 1024 байта якої займає таблиця векторів переривань. Кожен елемент цієї таблиці ­– 32-розрядна адреса підпрограми-обробника переривання (згадайте цю тему з “Мікропроцесорних ВІС”), яка задана у форматі
[сегмент] : [зміщення]
і називається вектором переривань. Ці адреси використовуються CPU виклику підпрограми обробки апаратних та програмних переривань.

Після таблиці векторів переривань розміщено велику ділянку оперативної пам’яті, яка використовується як область даних BIOS та операційної системи (ОС).

Наступні 640 Кбайт ОЗП ­– область пам’яті, у якій знаходяться драйвери пристроїв ОС. Вони забезпечують керування введенням/виведенням для більшості стандартних пристроїв (наприклад, для клавіатури, дискових накопичувачів, відео адаптера, послідовного та паралельного інтерфейсів).

Як відомо, існує багато моделей ПК IBM PC: Оригінальний IBM PC, ХТ, АТ, PCjr, Compag XT, Sperry PC і ін. Є три способи визначення моделі та отримання деякої інформації про конфігурацію комп’ютера:

  1. прочитати дану інформацію з комірок ПЗП BIOS;

  2. викликати одну з функцій переривання 15h, яка повертає адресу таблиці конфігурації;

  3. за допомогою системної утиліти debug (дебагер).


Спосіб 1. У постійній пам’яті BIOS за адресою F000:FFFE міститься байт, значення якого є ідентифікацією типу комп’ютера (див. таблицю 1.2). За адресою F000:FFF5 міститься дата виготовлення BIOS, яка записана у коді ASCII в американському форматі (MM/DD/YY – місяць/день/рік) та займає 8 байт.
Таблиця 1.2 – Значення байту ідентифікації типу ПК

Код

Тип комп’ютера

FF

Оригінальний IBM PC

FE

XT, Portable PC

FD

PCjr

FC

AT

FB

XT з пам’яттю 640К на материнській платі

FA

PS/2 модель 25 або 30

F9

Convertible PC

F8

PS/2 моделі 55SX,70,80

9A

Compag XT, Compag Plus

30

Sperry PC

2D

Compag PC, Compag Deskpro


Для читання вмісту даної комірки області пам’яті BIOS можна використати стандартну функцію TC peekb():
unsigned char Val = peekb(Seg, Offset) ,
де параметр Seg – значення сегменту, Offset – зміщення.

Приклад використання способу 1 наведено в лістингу 1.1.
Лістинг 1.1 – Програма одержання коду типу ПК ІВМ РС.
#include

#include
int main (void)

{

unsigned char KOD;

KOD = peekb(0xF000,0xFFFE);

printf("Код типу комп’ютера: %xh\n", KOD);

return 0;

}
Спосіб 2. Більш детальну інформацію можна отримати, викликавши функцію C0h переривання BIOS INT 15h. Для генерації цього переривання необхідно:

на вході: АН=C0h

{виклик переривання}

на виході: ES:BX = адреса таблиці конфігурації

CF = 0, якщо виклик переривання пройшов успішно

CF = 1, якщо дана версія BIOS не підтримує виконання функції C0h.

Після виконання переривання регістри ES:BX будуть вказувати на таблицю в області ПЗП BIOS, значення якої наведено у таблиці 1.3.
Таблиця 1.3 – Таблиця ПЗП BIOS ідентифікації комп’ютера

Зміщення

Розмір, байт

Опис

(+0)

2

Розмір таблиці в байтах

(+2)

1

Код моделі

(+3)

1

Додатковий код моделі

(+4)

1

Версія BIOS revision:

0 – для першої реалізації; 2 - для другої і т.д.

(+5)

1

Байт конфігурації обладнання




біт 7

канал 3 DMA використовується дисковою системою базового введення/виведення (дисковою BIOS)

біт 6

Встановлено 2й контролер переривання 8259;

біт 5

Встановлено RTC;

біт 4

Після кожного виклику переривання від клавіатури INT 9h викликається функція 4Fh переривання INT 15h

біт 3

У BIOS реалізовано функцію очікування зовнішньої події

біт 2

Використовується розширена область даних BIOS

біт 1

Якщо встановлено – використовується шина Micro Channel, ні – ISA




біт 0

Зарезервовано

6

2

Зарезервовано і містить 0

8

2

Зарезервовано і містить 0

Довідка: в ТС регістри зарезервовані як _AH, _BX, _CX, _ES і т.д.
Для генерації переривання в ASM використовується команда INT або функція TС

geninterrupt(Num),

де параметр функції Num – номер переривання (наприклад, geninterrupt(0х15);).

Приклад використання способу 1 наведено в лістингу 1.1.
Лістинг 1.2 – Програма виклику функції C0h переривання 15h.
#include

#include
int main (void)

{

_AX=0x0C;

geninterrupt(0x15);

printf("Адреса таблиці конфігурації ПК: %x:%x\n", _ES, _BX);

return 0;

}
Спосіб 3. Системна програма DEBUG, яка у ОС Windows знаходиться в системній директорії WINDOWS\system32, дозволяє переглядати пам’ять, вводити програми і здійснювати трасування їх виконання, а також може бути використана для одержання системної інформації про ПК.

Після запуску програми debug.exe (Пуск → Выполнить → debug) або завантаження її з диска у пам’ять з’явиться запрошення до роботи  з’явиться дефіс, що і є сигналом готовності програми до приймання команд.
^ Перегляд пам’яті за допомогою дебагера

Перевіримо, насамперед, розмір доступної для роботи пам’яті. Дані значення знаходяться у чарунках пам’яті 413h і 414h. Це значення можна переглянути із Debug за адресою, яка складається з двох частин:

  • 400  адреса сегменту, який необхідно записати як 40 (останній нуль не пишеться);

  • 13  зміщення від початку сегменту.

Таким чином, для виконання описаної раніше операції необхідно у дебагері у командному рядку задати:

D 40:13



Перші два байти у шістнадцятковій системі лічби означатимуть об’єм пам’яті у Кб, при чому байти будуть розміщення у зворотній послідовності.
^ Серійний номер

Серійний номер комп’ютера “зашито” у ROM за адресою FE000h зі зміщенням 00h.

D FE00:0



Дата ROM BIOS

Дата ROM BIOS в форматі MM/DD/YY знаходиться за адресою FFFF5h, тобто необхідно задати:

^

D FFFF:05



Машинні (асемблерні) коди

Проілюструємо просту програму на машинній мові, її представлення у пам’яті і результати її виконання. Програма:

B82301 mov AX,0123h

052500 add AX,0025h

8BD8 mov BX,AX

03D8 add AX,BX

8BCB mov CX,BX

2BCB sub AX,AX

90 nop

СВ поверення y DOS

Треба зауважити, що машинні команди мають різну довжину: один, два або три байти. Машинні коди знаходяться у пам’яті безпосередньо один за іншим. Виконання програми починаєтьсяз першої команди і послідовно виконується до команди завершення роботи.

Можна ввести наведену вище програму безпосередньо у пам’ять комп’ютера і виконати її покомандно. В той же час можна переглянути вміст регістрів після виконання кожної команди.

Для того, щоб роздрукувати результати роботи дебагера необхідно натиснути +
.

Для безпосеренього введення програми на машинній мові необхідно ввести наступну команду:

E DS:100 B8 21 01 05 25 00



Команда Е означає введення (Enter). Параметр CS:100 визначає адресу пам’яті, куди будуть вводитись команди,  10016 (265) байт від початку сегменту кодів (звичайна стартова адреса для машинних кодів у відлагоджувача Debug). Команда Е записує кожну пару шістнадцяткових цифр у пам’ять у вигляді байту, починаючи з адреси CS:100 до дареси CS:105.

Тому наступною командою має бути

^

E CS:106 8B D8 03 D8 8B CB

E CS:10C 2B C8 2B C0 90 CB



Правильність введених у пам’ять кодів треба обов’язково перевіряти і у разі помилки обов’язково повторити запис необхідних значень.

Для перегляду стану всіх регістрі процесора необхідно ввести команду R і відлагоджувач виведе на екран стан всіх регістрів. Наприклад,

-R

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=0100 NV UP EI PL NZ NA PO NC

0B2B:0100 B82301 MOV AX,0123
Стан регістру ІР (вказівник команд) виводиться у вигляді ІР=0100, що є свідченням того, що команда, яка виконається, знаходиться зі зміщенням 100h байт від початку сегмента кодів.

Відразу за значенням регістру ІР виводиться флаги флагового регістру

NV UP EI PL NZ NA PO NC

Як видно, команда R також показує за зміщенням 100h першу машинну команду, яка виконається (MOV AX,0123).

Для покрокового виконання програми необхідно дати команду Т.

-E CS:100 B8 23 01 05 25 00

-E CS:106 8B D8 03 D8 8B CB

-E CS:10C 2B C8 2B C0 90 CB

-R

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=0100 NV UP EI PL NZ NA PO NC

0B2B:0100 B82301 MOV AX,0123

-T
AX=0123 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=0103 NV UP EI PL NZ NA PO NC

0B2B:0103 052500 ADD AX,0025

-T
AX=0148 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=0106 NV UP EI PL NZ NA PE NC

0B2B:0106 8BD8 MOV BX,AX

-T
AX=0148 BX=0148 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=0108 NV UP EI PL NZ NA PE NC

0B2B:0108 03D8 ADD BX,AX

-T
AX=0148 BX=0290 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=010A NV UP EI PL NZ AC PE NC

0B2B:010A 8BCB MOV CX,BX

-T
AX=0148 BX=0290 CX=0290 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=010C NV UP EI PL NZ AC PE NC

0B2B:010C 2BC8 SUB CX,AX

-T
AX=0148 BX=0290 CX=0148 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=010E NV UP EI PL NZ AC PE NC

0B2B:010E 2BC0 SUB AX,AX

-T
AX=0000 BX=0290 CX=0148 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=0110 NV UP EI PL ZR NA PE NC

0B2B:0110 90 NOP

-T
AX=0000 BX=0290 CX=0148 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=0111 NV UP EI PL ZR NA PE NC

0B2B:0111 CB RETF
Запис CS=0B2B означає, що початок сегмента кода програми знаходиться зі зміщенням 0В2В0h. Значення 0В2В:0100 означає 10016 байт від початкової адреси 0В2Вh у регістрі CS.

Для перегляду програми у машинних кодах в сегменті кодів треба ввести D:

-D CS:100

0B2B:0100 B8 23 01 05 25 00 8B D8-03 D8 8B CB 2B C8 2B C0 .#..%.......+.+.

0B2B:0110 90 CB E9 C9 D7 E9 C3 D7-89 7E 02 80 34 00 1A 0B .........~..4...

0B2B:0120 3F 2E B9 08 00 F3 AA 86-C4 AA 86 C4 B1 03 F3 AA ?...............

0B2B:0130 32 C0 AA C3 BE 69 9B BF-2F 96 B4 60 CD 21 BE D8 2....i../..`.!..

0B2B:0140 95 BF 2F 96 E8 CB E3 C3-33 C0 89 3E 93 9C A2 96 ../.....3..>....

0B2B:0150 9C A2 97 9C 8A F8 9C 57-33 C9 88 0E C2 9A AC E8 .......W3.......

0B2B:0160 73 E3 75 1D 3C 20 74 F6-3C 09 74 F2 86 06 97 9C s.u.< t.<.t.....

0B2B:0170 0A C0 74 EA F6 C7 80 74-05 C6 06 C2 9A 01 E9 2D ..t....t.......-
Для того, щоб ще раз провести виконання програми необхідно скинути регістр ІР, що робить команда

R IP,



після чого на екрані з’явиться запит зміщення:

-R IP

IP 0100

:100

Тепер можна повторити трасування командою Т.

Завершення роботи Debug здійснюється командою Q (Quit – вихід).
^ Визначення даних

Визначимо облать даних, яка містить відповідні значення:

Адреса в DS

Значення

^ Номери байтів

0000

2301

0 і 1

0002

2500

2 і 3

0004

0000

4 і 5

0006

2А2А2А

6, 7 і 8

А10000


Переслати слово, яке починається в DS за адресою 0000, у регістр АХ

03060200


Додати слово, яке починається у DS за адресою 0002, до АХ

А30400


Переслати вміст АХ у слово, яке починається у DS за адресою 0004

СВ


Поверенення в DOS


Введемо команди Е для сегмента даних:
-E DS:00 23 01 25 00 00 00

-E DS:06 2A 2A 2A
Перша команда записує три слова (шість байтів) у початок сегменту даних, DS:00. Зверніть увагу, що кожне слово вводиться у зворотній послідовності.

Друга команда записує три зірочки (***) для того, щоб їх можна було побачити після виконання команди D (Dump)  іншого значення ці символи не мають.

Запишемо тепер код команди

mov AX,[0000]

для завантаження у регітр АХ записаних у сегмент даних зі зміщенням 0000 даних:

-E cs:100 A1 00 00 03 06 02 00

-E CS:107 A3 04 00 CB

-D DS:000

0B2B:0000 23 01 25 00 00 00 2A 2A-2A F0 4F 03 78 05 8A 03 #.%...***.O.x...

0B2B:0010 78 05 17 03 78 05 1D 04-01 01 01 00 02 FF FF FF x...x...........

0B2B:0020 FF FF FF FF FF FF FF FF-FF FF FF FF 27 05 4E 01 ............'.N.

0B2B:0030 4F 0A 14 00 18 00 2B 0B-FF FF FF FF 00 00 00 00 O.....+.........

0B2B:0040 05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0B2B:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20 .!...........

0B2B:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20 .....

0B2B:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00 ........

-D CS:100

0B2B:0100 A1 00 00 03 06 02 00 A3-04 00 CB CB 2B C8 2B C0 ............+.+.

0B2B:0110 90 CB E9 C9 D7 E9 C3 D7-89 7E 02 80 34 00 1A 0B .........~..4...

0B2B:0120 3F 2E B9 08 00 F3 AA 86-C4 AA 86 C4 B1 03 F3 AA ?...............

0B2B:0130 32 C0 AA C3 BE 69 9B BF-2F 96 B4 60 CD 21 BE D8 2....i../..`.!..

0B2B:0140 95 BF 2F 96 E8 CB E3 C3-33 C0 89 3E 93 9C A2 96 ../.....3..>....

0B2B:0150 9C A2 97 9C 8A F8 9C 57-33 C9 88 0E C2 9A AC E8 .......W3.......

0B2B:0160 73 E3 75 1D 3C 20 74 F6-3C 09 74 F2 86 06 97 9C s.u.< t.<.t.....

0B2B:0170 0A C0 74 EA F6 C7 80 74-05 C6 06 C2 9A 01 E9 2D ..t....t.......-
Тепер введіть R для перевірки стану регістрі і мнемоніки команди.

-R

AX=0148 BX=0290 CX=0290 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=0100 NV UP EI PL NZ AC PE NC

0B2B:0100 A10000 MOV AX,[0000] DS:0000=0123
Виконаємо цю команду і перевіримо результат:

-T
AX=0123 BX=0290 CX=0290 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=0103 NV UP EI PL NZ AC PE NC

0B2B:0103 03060200 ADD AX,[0002] DS:0002=0025

-T
AX=0148 BX=0290 CX=0290 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=0107 NV UP EI PL NZ NA PE NC

0B2B:0107 A30400 MOV [0004],AX DS:0004=0000

-T
AX=0148 BX=0290 CX=0290 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B2B ES=0B2B SS=0B2B CS=0B2B IP=010A NV UP EI PL NZ NA PE NC

0B2B:010A CB RETF
Отже, після команди Т було виконано команду mov AX,[0000], яка пересилає у регістр АХ вміст слова, яке знаходиться з нулевим зміщенням. Після її виконання регістр АХ містить 0123. Наступна команда ADD виконує додавання вмісту АХ (0123) і даних зі зміщенням 0002  0025, тобто 0148. Команда mov [0004],AX переміщує результат додавання у чарунку зі зміщення 0004.

-D DS:004

0B2B:0000 48 01 2A 2A-2A F0 4F 03 78 05 8A 03 H.***.O.x...

0B2B:0010 78 05 17 03 78 05 1D 04-01 01 01 00 02 FF FF FF x...x...........

0B2B:0020 FF FF FF FF FF FF FF FF-FF FF FF FF 27 05 4E 01 ............'.N.

0B2B:0030 4F 0A 14 00 18 00 2B 0B-FF FF FF FF 00 00 00 00 O.....+.........

0B2B:0040 05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0B2B:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20 .!...........

0B2B:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20 .....

0B2B:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00 ........

0B2B:0080 00 0D 20 20 ..
^ Машинна адресація

Для доступу до машинної команди процесор визначає її адресу із регістру CS з зміщенням у регістрі ІР. Наприклад, нехай регістр CS містить 04AFh (дійсна адреса 04AF0), а регістр ІР містить 0023h, тоді
CS: 04AF0

IP: 0023

Адреса команди: 04В13
Якщо, наприклад, за адресою 04В13 знаходиться команда

Адреса 04В13: А11200 mov AX,[0012]

то у пам’яті за адресою 04В13 знаходиться перший байт команди. Процесор отримує доступ до цього байту і по коду команди (А1) визначає довжину команди  три байта.

Для доступа до даних зі зміщенням [0012] процесор визначає адресу, виходячи з вмісту регістру DS (як правило) і зміщення в операторі команди. Якщо DS містить 04В1h (реальна адреса 04В10), то результуючиа адреса даних визначається наступним чином:
DS: 04В10

Зміщення: 0012

Адреса даних: 04В22
Якщо, наприклад, за адресою 04В22 знаходиться число 24, а за 04В23  число 01, то процесор вибирає значення 24 і розміщує його у регістр AL, а значення 01  у регістр AH. Таким чином, регістр АХ буде мати значення 0124. У процесі вибірки кожного байту команди процесор збільшує значення регістр ІР на одиницю (інкрементує) і до початку виконання наступної команди у вище наведеному прикладі ІР буде містити зміщення 0026. Таким чином, процесор тепер готовий для виконання наступної команди, яку він отримує із адреси, яка знаходиться у регістрі CS (04AF0) зі зміщенням, значення якого знаходиться у регістрі ІР (0026), тобто 04В16.
^ Парна адресація

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

Наприклад, нехай команда повинна виконати вибірку слова, яке починається з адреси 04В23 і завантажити його у регістр АХ:

Пам’ять: |xx|24|01|xx|

|

Адреса : 04В23

Спочатку процесор отримує доступ до байтів за адресою 4В22 та 4В23 і пересилає байт з чарунки 4В23 у регістр AL. Потім він отримує доступ до батів за адресами 4В24 та 4В25 і пересилає байт з чарунки 4В23 у регістр АН. У результаті регістр АХ буде містити 0124. семблер має директиву EVEN, яка викликає вирівнювання даних і команд на парні адреси пам’яті.
^ Визначення розміру пам’яті

BIOS має у своїй RОM підпрограму, яка здійснює визначення об’єму пам’яті. Можна викликати дану функцію BIOS перериванням 12h, в результаті чого BIOS поверне у регістр АХ розмір пам’яті у Кбайтах.
^

E CS:100 CD 12 CB


Резільтат виконання підпрограми BIOS:



AX=0280 BX=0000 CX=0000 DX=0000 SP=FFB4 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0210 IP=09AA NV UP DI PL NZ NA PE NC

0210:09AA C4C4 LES AX,SP

-T
AX=0280 BX=0000 CX=0000 DX=0000 SP=FFB4 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0210 IP=064C NV UP DI PL NZ NA PE NC

0210:064C 1E PUSH DS

-T
AX=0280 BX=0000 CX=0000 DX=0000 SP=FFB2 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0210 IP=064D NV UP DI PL NZ NA PE NC

0210:064D 50 PUSH AX

-T
AX=0280 BX=0000 CX=0000 DX=0000 SP=FFB0 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0210 IP=064E NV UP DI PL NZ NA PE NC

0210:064E B84000 MOV AX,0040

-T
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFB0 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0210 IP=0651 NV UP DI PL NZ NA PE NC

0210:0651 8ED8 MOV DS,AX

-T
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFB0 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0210 IP=0653 NV UP DI PL NZ NA PE NC

0210:0653 F70614030024 TEST WORD PTR [0314],2400 DS:0314=3000

-T
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFB0 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0210 IP=0659 NV UP DI PL NZ NA PE NC

0210:0659 754F JNZ 06AA

-T
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFB0 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0210 IP=06AA NV UP DI PL NZ NA PE NC

0210:06AA 58 POP AX

-T
AX=0280 BX=0000 CX=0000 DX=0000 SP=FFB2 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0210 IP=06AB NV UP DI PL NZ NA PE NC

0210:06AB 1F POP DS

-T
AX=0280 BX=0000 CX=0000 DX=0000 SP=FFB4 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0210 IP=06AC NV UP DI PL NZ NA PE NC

0210:06AC CF IRET

-T
AX=0280 BX=0000 CX=0000 DX=0000 SP=FFBA BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=0105 IP=0102 NV UP DI PL NZ NA PE NC

0105:0102 CB RETF

-T
AX=0280 BX=0000 CX=0000 DX=0000 SP=FFBE BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=3002 IP=0210 NV UP DI PL NZ NA PE NC

3002:0210 0000 ADD [BX+SI],AL DS:0000=F8
Як видно, регістр АХ містить розмір пам’яті у шістнадцятковому форматі. Для вихода із підпрограми BIOS і повернення у програму використовується команда IRET.
^ Спеціальні засоби відлагоджувача

  • Команда А (Assembler) переводить Debug у режим прийому команд ассемблера і перетворення їх у машинні коди. Наприклад,

-A 100

3002:0100 MOV AL,25

3002:0102 MOV BL,32

3002:0104 ADD AL,BL

3002:0106 RET

Після натискання без команди у рядку Debug припиняє прийом команд. Покроково виконаємо введену програму для перевірки

-T

AX=0225 BX=0032 CX=0000 DX=0000 SP=FFC0 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=3002 IP=0102 NV UP DI PL NZ NA PO NC

3002:0102 B332 MOV BL,32

-T

AX=0225 BX=0032 CX=0000 DX=0000 SP=FFC0 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=3002 IP=0104 NV UP DI PL NZ NA PO NC

3002:0104 00D8 ADD AL,BL

-T

AX=0257 BX=0032 CX=0000 DX=0000 SP=FFC0 BP=0000 SI=0000 DI=0000

DS=0040 ES=0B2B SS=0B2B CS=3002 IP=0106 NV UP DI PL NZ NA PO NC

3002:0106 C3 RET


  • Команда U (Unassembler) виводить на екран машинні коди команд ассемблера. Необхідно задати адреси першої і останньої команди, які необхідно переглянути. Перевіримо код програми, яку ввели за допомогою команд А.

-U 100,106

3002:0100 B025 MOV AL,25

3002:0102 B332 MOV BL,32

3002:0104 00D8 ADD AL,BL

3002:0106 C3 RET
^ Збереження програми із відлагоджувача

Можна використовувати Debug для збереження програм на диск. Для цього використовується команда W. Для цього необхідно виконати наступні дії:

  • присвоїти програмі ім’я: N Name.com;

  • за допомогою команди R у регістр СХ записати довжину файлу (у нашому прикладі 106 – 100 = 6 байт).

  • дати Debug команду запису файлу – W.

Для прикладу, збережемо введену раніше програмку:

-N dorensky.com

-R CX

CX 0000

:6

-W
^

Запись 00006 байт



Якщо ж програму було завантажено з диску та необхідно зберегти зроблені у ній зміни, то треба дати Debug тільки команду W. Наприклад, зробимо зміни у програмі KNTU.com і збережемо їх:

-U 100,106

0B2B:0100 B025 MOV AL,25

0B2B:0102 B332 MOV BL,32

0B2B:0104 00D8 ADD AL,BL

0B2B:0106 C3 RET

-A 102
^

0B2B:0102 MOV BL,10

0B2B:0104


-U 100,106

0B2B:0100 B025 MOV AL,25

0B2B:0102 B310 MOV BL,10

0B2B:0104 00D8 ADD AL,BL

0B2B:0106 C3 RET

-W

Запись 00006 байт
ЗАВДАННЯ

  1. Розробити блок-схему алгоритма і програму, яка виводить на екран ПК:

    1. Тип персонального комп’ютера IBM PC (див. табл. 1.2);

    2. Дату виготовлення BIOS у повному форматі прописом “число місяць рік” (наприклад, “01 лютого 2013 року”);

  2. Результати роботи програм 1.1-1.2 перевірити за допомогою дебагера (debbug.exe).
ПИТАННЯ ДЛЯ САМОКОНТРОЛЮ

  1. Поясніть суть і призначення BIOS.

  2. Що таке переривання? Які є види переривань?

  3. Що таке вектор переривань, таблиця векторів переривань? Для чого вони служать і де знаходяться?

  4. За допомогою яких стандартних функцій ТС можна звертатись до портів в/в?

  5. Чим чарунка пам’яті відрізняється від порту?

  6. Що таке дебагер? Де знаходиться дебагер у ОС Windows?

  7. Основні команди дебагера, їх формати і призначення.

  8. Що таке “сегмент” та “зміщення” і для чого вони використовуються?

  9. Якими стандартними функціями ТС можна звернутись до чарунки пам’яті (R/W)?

  10. За допомогою якої стандартної функції ТС можна згенерувати задане переривання?



ПРИКЛАД ВИКОНАННЯ ЛАБОРАТОРНОЇ РОБОТИ №1

МЕТА: Ознайомитись з основами системного програмування, навчитись програмним шля-хом одержувати інформацію про системні характеристики комп’ютера IBM PC АТ.
ЗАВДАННЯ

  1. Написати програму, яка визначає, чи даний ПК відноситься до типу IBM PC АТ.

  2. Написати програму, яка виводить на екран дату виготовлення BIOS.

  3. Перевірити результати виконання програм 1 та 2 за допомогою дебагера.


ВИКОНАННЯ

1. Як відомо, існує багато моделей ПК. Є дві можливості визначення моделі та отримання деякої інформації про конфігурацію комп’ютера: 1) Прочитати дану інформацію з чарунок ПЗП BIOS; 2) Викликати одну з функцій переривання 15h, яка повертає адресу таблиці конфігурації. У постійній пам’яті BIOS за адресою F000:FFFE міститься байт, значення якого є ідентифікацією типу комп’ютер. Прочитати цю чарунку пам’яті можна за допомогою функції ТС peekb(). Якщо її значення FCh – ПК типу АТ.



^ Блок-схема алгоритму



Лістинг програми

#include

#include
int main (void)

{

unsigned char KOD;

KOD = peekb(0xF000,0xFFFE);

if (KOD == 0xFC)

printf("Даний ПК має тип АТ.\n");

else

printf("Даний ПК не типу АТ.\n");

return 0;

}
^ Результат роботи програми:




Даний ПК має тип АТ.


2. За адресою F000:FFF5 ПЗП BIOS міститься дата виготовлення BIOS. Вона записана у коді ASCII та займає 8 байт. Її формат американський: MM/DD/YY.


^ Блок-схема алгоритму



Лістинг програми

#include

#include
int main (void)

{

unsigned char DATA;

int i;

printf("Дата виготовлення BIOS: ");

for (i=0;i<8;i++)

{

DATA = peekb(0xF000,0xFFF5+i)

printf("%c",DATA);

}

return 0;

}
^ Результат роботи програми:
Дата виготовлення BIOS: 03/28/06


3. Системну програму debug.exe для перевірки результатів роботи програм 1 та 2 можна запустити за допомогою команди debug в меню Пуск → Выполнить або запустити її з системної папки WINDOWS\system32. За допогою команди D дебагера читаємо чарунки ПЗП BIOS: F000:FFFE – тип ПК, F000:FFF5-F000:FFFD – дата виготовлення BIOS.
Результат роботи дебагера:


відпов. табл. 1.2
Код типу ІВМ РС АТ

-d f000:fffe

F000:FFF0 FC 00 ..

-d f000:fff5

F000:FFF0 30 33 2F-32 38 2F 30 36 00 FC 00 03/28/06...
^ Дата виготовлення BIOS
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Примітка: для копіювання у Word результатів роботи дебагера (як і нших консольних програм) можна використати меню Изменить → Пометить, виділити необхідну текстову інформацію, скопіювати у буфер обміну ОС за допомогою Изменить → Скопировать (або натиснути ) та втавити тест в Word (Ctrl+V, Правка → Вставить або ) – див. рисунки 1.1-1.3.



Рисунок 1.1

Текст виділено!


Рисунок 1.2


Рисунок 1.3
Вимоги до оформлення звіту з лабораторної роботи див. у файлі BИМОГИ_до_оформл_ЛР.doc


www.aeom.ho.ua




Схожі:




База даних захищена авторським правом ©lib.exdat.com
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації