Реферат: Керiвництво программиста

sel_code= $-gdt ; селектор сегменту коду

cod descr <> ; дескриптор сегменту коду

sel_data= $-gdt ; селектор сегменту даних

dat descr <> ; дескриптор сегменту даних

sel_stk= $-gdt ; селектор сегменту стека

stk descr <> ; дескриптор сегменту стека

sel_video= $-gdt ; селектор сегменту відеопам'яті

video descr <80*25*2, 8000h, 0bh, 4092h, 0> ;дескриптор сегменту відеопамяті


label dat_gdt pword ; покажчик на GDT

gdt_len dw $-gdt ; довжина

gdt_base dd 0 ; лінійна адреса


dlen dd data_len ; довжина сегменту даних

clen dd pcode_len ; довжина сегменту коду

slen dd stk_len ; довжина сегменту стека


message db 'Рабинович Абрам Исаакович', 0 ; текстовий рядок


data_len=$

ENDS


; 16-розрядний сегмент коду реального режиму

SEGMENT CODE USE16

assume cs: code, ds: data

; головна процедура

proc main

mov ax, data ; настройка DS на сегмент даних

mov ds, ax

; настройка дескриптора сегменту коду

mov eax, pcode

shl eax, 4 ; обчислення лінійної адреси

push sel_code ; селектор сегменту

push 409ah ; 32-розрядний сегмент коду,

; доступний по читанню

push [clen] ; довжина сегменту

push eax ; лінійна адреса сегменту

call make_desc ; заповнення дескриптора

add sp, 14 ; анулювання параметрів в стеке

; настройка дескриптора сегменту даних

mov eax, ds

shl eax, 4 ; обчислення лінійної адреси

push sel_data ; селектор сегменту

push 4092h ; 32-разрядный сегмент даних,

; доступний по запису, поширюється вверх

push [dlen] ; довжина сегменту

push eax ; лінійна адреса сегменту

call make_desc ; заповнення дескриптора

add sp, 14 ; анулювання параметрів в стеке

; настройка дескриптора сегменту стека

mov eax, stak

shl eax, 4 ; обчислення лінійної адреси

add eax, [slen] ; вершини стека

push sel_stk ; селектор сегменту

push 4096h ; 32-розрядний сегмент даних

; доступний по запису, поширюється вниз

push [slen] ; розмір сегменту

push eax ; лінійна адреса сегменту

call make_desc ; заповнення дескриптора

add sp, 14 ; анулювання параметрів в стеке

; настройка покажчика на GDT

mov eax, ds

shl eax, 4

add eax, offset gdt ; лінійна адреса таблиці

mov [gdt_base], eax

lgdt [dat_gdt] ; завантаження регістру GDTR

cli ; заборона апаратних переривань

mov eax, cr0 ; настанова біта режиму в регістрі CR0

inc al

mov cr0, eax

; jmp far sel_code: offset pmode ; перехід на сегмент

; захищеного режиму

dw 0ea66h

dd offset pmode

dw sel_code

endp

; процедура заповнення дескриптора

proc make_desc near

; список параметрів

ARG base: dword, ; базова адреса сегменту

len: dword, ; розмір сегмента

acs: word, ; атрибути сегменту

sel: word ; селектор сегменту (на рівні

; привілей 0 селектор дескриптора

; в таблиці GDT, є також

; зміщенням в цій таблиці)

enter 0.0 ; створення кадру стека

mov si, [sel]

add si, offset gdt ; обчислення адреси дескриптора

mov eax, [base]

mov [dword si+descr. base2], eax ; завантаження бази сегменту (біти 31-24)

mov [dword si+descr. base1], eax ; завантаження бази сегменту (біти 23-0)

mov eax, [len]

mov [si], ax ; завантаження розміру сегменту (біти 15-0)

shr eax, 8

xor al, al

or ax, [acs]

mov [si+descr. acs], ax ; завантаження атрибутів і

; розміру (біти 19-16)

leave ; анулювання кадру стека

ret ; повернення

endp

; завершення роботи програми

proc rmode

sti

mov ax, 4c00h ; функція завершення з кодом 0

int 21h ; виклик ДОС

endp


ENDS

; 32-розрядний сегмент коду захищеного режиму

SEGMENT PCODE USE32

assume cs: pcode, ds: data, ss: stak

; головна процедура

proc pmode

mov eax, sel_stk ; настройка стека

mov ss, ax

xor esp, esp ; покажчик на вершину

mov eax, sel_data ; настройка на сегмент даних

mov ds, ax

mov fs, ax

mov gs, ax

mov eax, sel_video ; настройка на відеопам'ять

mov es, ax

call print ; виклик процедури печатки

mov eax, cr0

xor eax, 1

mov cr0, eax ; скид біта режиму в регістрі CR0

jmp far code: rmode ; повернення в сегмент реального режиму

endp

; процедура печатки

proc print near

xor edi, edi ; зміщення 0 в відеопам'яті

lea esi, [message] ; адреса рядка

mov ah, 17h ; атрибути символів

; цикл виводу

@@1: mov al, [esi] ; завантаження в al чергового символу

or al, al ; перевірка на 0

jz @@2 ; якщо 0, те вихід з циклу

mov [es: edi*2], ax ; символ з атрибутом в відеопам'ять

inc esi ; наступний символ

inc edi ; наступне знакомісце

jmp @@1 ; повторення циклу

@@2:

ret ; повернення

endp


pcode_len=$

ENDS


end main ; крапка входу в програму


Створення виконавчого файлу здійснювалося слідуючим чином:

tasm. exe lab2. asm/m2

tlink. exe lab2. obj/


  1. 3міст звіту з лабораторної роботи


  2. Повна схема формування адреси при записі в відеопам'ять в відповідності з заданим варіантом.

  3. Формат що використаються селекторів і дескрипторів з реальними значеннями.

  4. Текст програми.

  5. Вміст регістрів ,що використаються і кадру стека під час пересилки рядка.


  1. Контрольні питання


  2. Який мінімальний і максимальний розмір сегменту при встановленому і скинутому біті дрібності в дескрипторі?

  3. Як зміниться покажчик 32-розрядного стека при вталківанії в нього операнда розміром:

А) слово;

Б) подвійне слово?

  1. Можна чи не використати перехід після переключення режиму і чому?


  1. Лабораторна робота N 2


Метою даної лабораторної роботи є закріплення знань про роботу механізму трансляції сторінок, а також одержання навиків в укладанні таблиць сторінок.

Лабораторна робота розрахована на 2 академічних години.


  1. Завдання до лабораторної роботи

В даній роботі студент повинен скласти програму що формує в пам'яті необхідні системні таблиці, переводить процесор в захищений режим з включеним механізмом трансляції сторінок, виводить в відеопам'ять рядок з ФІБ студента і переводить процесор в реальний режим. При цьому відеопам'ять повинна знаходитися по логічній адресі 100000h, що досягається застосуванням сторінкового механізму. Розмір сторінки пам'яті береться з таблиці варіантів.

Таблиці сторінок слідує складати тільки для першого мегабайта плюс область відеопам'яті.

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

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


  1. Приклад виконання

Складемо програму що використає сторінковий механізм з розміром сторінки 4Кб. Якщо використати вихідний текст з попередньої роботи, достатньо проголосити в сегменті даних область для каталогу і таблиць сторінок, додати в головну процедуру код для формування цих таблиць і змінити базову адресу відеобуфера.

Бо немає надоби складати таблиці для усього адресного простору, необхідно обчислити мінімальну кількість таблиць сторінок для покритті необхідного адресного простору.

<розмір сторінки>/4 < розмір сторінки >=<мінімальне покриття>

4 [Kb]/4*4 [Kb] =4096 [Kb] =4 [Mb]

Одна сторінка покриває 4 Мб адресного простору, а нам необхідно 1024Кб+4Кб=1028 Кб, що значно менш означеного обсягу. Значить достатньо заповнити тільки одну таблицю сторінок. Каталог і таблиця повинні бути вирівнені по межі 4 Кб, а сегмент ехе-файлу може бути вирівнен тільки по межі параграфу, тому усього необхідно 3 сторінки по 4 Кб.


; файл “lab2. asm”

...

SEGMENT DATA USE32

pages dd 3*1024 dup (0) ; буфер для таблиць сторінок

... ; таблиця GDT

video descr <80*25*2, 0.10 h, 4092h, 0> ; адреса сегменту 100000h

...

ENDS


SEGMENT CODE USE16

assume cs: code, ds: data


proc main

; заповнення дескрипторов сегментів

mov ebx, data ; обчислення фізичного

shl ebx, 4 ; адреси каталогу сторінок

add ebx, 1000h

and bx, 0f000h

mov cr3, ebx ; завантаження адреси каталогу в CR3

mov eax, ebx ; обчислення зміщення

shr ebx, 4 ; каталогу сторінок в

sub bx, data ; сегменті даних

shl bx, 4

add eax, 1007h ; обчислення адреси 1-й таблиці

mov [bx], eax ; завантаження в каталог

add ebx, 1000h ; зміщення таблиці

mov eax, 7 ; 1-я сторінка, адреса 0

mov cx, 256 ; 256 сторінок= 1Мб

@@1:

mov [bx], eax ; заповнення таблиці

add eax, 1000h ; наступні 4 Кб

add bx, 4 ; адреса наступного елемента

loop @@1 ; повторення циклу

; в bx адресу елемента таблиці для відеобуфера

mov [dword bx], 0b8007h ; фізична адреса відеобуфера

; завантаження GDTR

mov eax, cr0

or eax, 80000001h

mov cr0, eax ; настанова бітів PE і PG в CR0

; jmp far sel_code: offset pmode

dw 0ea66h

dd offset pmode

dw sel_code

endp

proc make_desc near ; процедура заповнення дескриптора

...

endp

proc rmode ; процедура завершення програми

...

endp


ENDS


SEGMENT PCODE USE32

proc pmode

... ; головна процедура

endp


proc print near

... ; процедура печатки

endp


pcode_len=$

ENDS


end main ; крапка входу


Створення виконавчого файлу здійснювалося слідуючим чином:

tasm. exe lab2. asm/m2

tlink. exe lab2. obj/3


Перед отладкою програми необхідно встановити заданий розмір сторінки в емуляторі. Для цього треба викликати головне меню, вибрати пункт “Настанови”, клавішами “вверх” або “вниз” встановити розмір і натиснути клавішу введення.


  1. Зміст звіту з лабораторної роботи

1. Повна схема формування адреси згідно варіанту.

  1. Текст програми.

  2. Дільниці таблиць сторінок, що використовувались програмою (в тому числі і під самою програмою).


  1. Контрольні питання


  2. Який обсяг адресного простору покриває сторінковий механізм при розмірі сторінки:

А) 2 Кб;

Б) 1 Кб;

С) 0.5 Кб?

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


5.4 Таблиця варіантів


В таблиці використані наступні позначки засобів адресації:

“бісм” - базово-індексна зі зміщенням і масштабурованням;

“бім” - базово-індексна з масштабурованням;

“ім” - індексна з масштабурованням;

“і” - індексна;

“біс” - базово-індексна зі зміщенням;

“бі” - базово-індексна;

“б” - базова.


  1. Література


  2. Гук М. “Процессоры Intel от 8086 до Pentium II”. - СПб: “ПИТЕР”,1997 - 224 с.

  3. Бродин В.Б. Шагурин И.И. “Микропроцессор i486. Архитектура, программирование, интерфейс”. - М.: “ДИАЛОГ-МИФИ”, 1993. - 240 с.

  4. Голенкова Ж.К. Заболоцкий А.В. Мархасин М.Л. “Руководство по архитектуре IBM PC AT”. - Мн.: ООО “Консул”, 1992. - 949 с.


Таблиця 5.1 Таблиця варіантів.

Варіант Засіб адресації Розрядність коду Розширення стека Розмір сторінки, Кб
1 Бісм 16 Вверх 4
2 Бім 32 Вниз 2
3 Ім 16 Вверх 1
4 І 32 Вниз 0.5
5 Біс 16 Вверх 4
6 Бі 32 Вниз 2
7 Б 16 Вверх 1
8 Бісм 32 Вниз 0.5
9 Бім 16 Вверх 4
10 Ім 32 Вниз 2
11 І 16 Вверх 1
12 Біс 32 Вниз 0.5
13 Бі 16 Вверх 4
14 Б 32 Вниз 2
15 Бісм 16 Вверх 1
16 Бім 32 Вниз 0.5
17 Ім 16 Вверх 4
18 І 32 Вниз 2
19 Біс 16 Вверх 1
20 Бі 32 Вниз 0.5
21 Б 16 Вверх 4
22 Бісм 32 Вниз 2
23 Бім 16 Вверх 1
24 Ім 32 Вниз 0.5
25 І 16 Вверх 4
26 Біс 32 Вниз 2
27 Бі 16 Вверх 1
28 Б 32 Вниз 0.5

ВИСНОВКИ


В даній роботі був вироблений огляд архітектури процесорів сімейства х86 фірми Intel і розроблений програмний емулятор процесора i486 і апаратна частина внутрисхемного емулятора.

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

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


ВСТУП


Бурхливий розвиток обчислювальної техніки дозволив їй проникнути в усі закутки людського життя. Наряду з настольними персональними системами особлива увага зараз приділяється керуючим системам. Дешевизна і багаті можливості мікропроцесорів сімейства х86 поставили їх в один ряд зі спеціалізованими процесорами і контролерами в області створення керуючих систем. Використання цих мікропроцесорів привертає ще і тим, що дозволяє використати для створення системного програмного забезпечення практично весь величезний набір інструментальних засобів для персональних систем. Однак отладка такого програмного забезпечення сопряжена з певними труднощями, що обмежують використання стандартних отладчиків. В основному це зв'язане з різноманітністю архітектурних рішень в плані створення апаратного забезпечення. Тут на допомогу можуть прийти що емулюють отладчики, що дозволять виробляти конфігурування віртуальної архітектури. Дані отладчики можуть використовуватися в настольних персональних системах, виробляючи повну емуляцію системи.

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


Додаток А


Емулятор


Керівництво користувача


ДП 7.091501-037-99.009ДА


Аркушів 9



Донецьк 1999

1 ПРИЗНАЧЕННЯ І ВИМОГА ДО КОНФІГУРАЦІЇ


Емулятор процесора i486 версії 2.0 передвизначений для отладки системного програмного забезпечення спеціалізованих ЕОМ. Він може також використовуватися в якості навчальної допомоги при підготовці фахівців в області обчислювальної техніки для виконання лабораторних робіт по дисципліні “Мікропроцесорні засоби і системи”.

Емулятор виконує програмну емуляцію роботи основних функціональних блоків процесора i486 з точки зору програмного забезпечення. При створенні програми головним критерієм виступала вірогідність роботи блоків процесора. Тому прив'язка дешифрації і виконання команд до сигналу синхронизації не вироблялася. Мінімальним кроком роботи блоків доступним користувачу є цикл виконання команди ПО, що отладжується.

Для роботи програми-емулятора достатньо мати персональний комп'ютер на базі процесора 80286+ оснащеного 4 Мб оперативної пам'яті і відеоадаптером не нижче EGA. З системного програмного забезпечення вимагається MS DOS версії 3.3+і драйвер розширеної пам'яті типу HIMEM.SYS. Будь-яких додаткових приладів або програм не вимагається.

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


2 ЗАПУСК ЕМУЛЯТОРА


Для запуску необхідно перейти в каталог, в якому міститься ісполнімий файл “i486. exe” і виробити його запуск або з командного рядка, набравши в ній ім'я файлу і натиснувши введення, або можна скористуватися інтерактивною програмною оболонкою.

Після запуску екран очищається. Внизу з'являється рядок статусу з підказкою в вигляді комбінацій клавіш. В середині екрану відкривається вікно з даними про програму. Натиск будь-який клавіші переводить емулятор в робітничий режим.


3 ГОЛОВНЕ МЕНЮ


Головне меню викликається при натиску клавіші F10. В ньому зосереджені пункти, активізація яких наводить до видавання на екран одного з діалогових вікон.

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


Пункт “Файл”.

Даний пункт передвизначений для генерації запитання на відкриття ісполнімого файлу для отладки. Після активізації цього пункту на екрані відкривається вікно з вмістом поточного каталогу. Скористувавшись клавішами зі стрілками користувач може перемістити підсвічуючий курсор на що цікавить ісполнімий файл (типу“. com” або“. exe”) і натиснути клавішу введення. Дана операція призведе до завантаженню файлу в віртуальну пам'ять емулятора для отладки. При Цьому відкриється вікно, в якому буде відображений відрізок програмного коду з асемблерною мнемоникою. Підсвічуючий курсор встановиться на першу команду програми.


Пункт “Смотреть...”.

Даний пункт дозволяє активізувати підміню зі списком вікон, що містять інформацію про стан процесора ,що емулюється і віртуальної пам'яті емулятора.

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

  • Вікно “РОНы” містить стан регістрів загального призначення;

  • Вікно “Сегментные регистры” містить стан сегментних регістрів і регістрів локальної дескрипторної таблиці і сегменту стану задачі, причому як їхн селекторних частин, так і дескрипторних;

  • Вікно “Системные регистры” містить стан системних регістрів, таких як CRx, EIP, GDTR, IDTR;

  • Вікно “Флаги” містить стан регістру EFLAGS;

  • Вікно “Память” містить стан певної дільниці віртуальної пам'яті емулятора;

  • Вікно “Стек” містить стан дільниці пам'яті, в якій розміщений поточний програмний стек.

Всі ці вікна можуть бути відкриті шляхом натиску комбінацій клавіш, означених в відповідних пунктах підміню після імені вікна.


Пункт “Установки”.

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


Пункт “Выход”.

Активізація даного пункту призведе до завершенню праці емулятора і поверненню в операційну систему. Пункт може бути активований в будь-якому стані емулятора шляхом натиску комбінації клавіш “Alt+X”.


4 ОПИС ВІКОН ЕМУЛЯТОРА

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

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

Переключення між вікнами, те є фокусировка потоку управління на потрібному вікні, виконується шляхом натиску клавіші F6. При Цьому управління одержує вікно, що було відкрите перед поточним. Якщо необхідно переключати вікна в зворотному порядку, можна скористуватися комбінацією клавіш Shift+F6.

Активне вікно має заголовок пофарбований в синій колір і підсвічуючий курсор.

При бажанні можна змінити розмір і положення деяких вікон. Для цього слідує скористуватися комбінацією клавіш Ctrl+F5. При включенні цього режиму вікно перетворюється в прямокутник з рамкою. Тепер клавішами зі стрілками можна переміщати вікно по екрану, а при натиснутой клавіші Shift - змінювати розмір. Вихід з режиму здійснюється шляхом натиску клавіші введення.


Вікно “РОНы”.

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

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

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


Вікно “Сегментные регистры”.

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

  • Ім'я регістру. При зміні вмісту регістру виводиться білим кольорем;

  • Селектор. В шістнадцятеричному вигляді подає вміст селекторної частини даного регістру;

  • База. В шістнадцятеричному вигляді подає базова лінійна адреса сегменту;

  • Межа. В шістнадцятеричному вигляді подає розмір сегменту в прийнятих елементах дрібності (байти або сторінки по 4 Кб);

  • Атрибути. В двоичному вигляді подає атрибути сегменту. В захищеному режимі відображають вміст поля прав доступу завантаженого дескриптора, а в реальній встановлюються автоматичні в відповідності з призначенням сегментного регістру.

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

Будь-яка частина сегментного регістру може бути довільно модифікована. Для цього необхідно клавішами “вверх” “вниз” подвести курсор до потрібного рядка. Після Цього клавішею “Tab” перемістити курсор до елемента ,що цікавить, а клавішами “праворуч” “ліворуч” на потрібну тетраду або атрибут. В випадку зміни атрибутів слідує скористуватися символами “1” і “0”, бо атрибути уявлені в двоїчному коді. Інші поля модифікуються шістнадцятеричними символами. Модифицирование повністю аналогічно описаному для вікна РОНів.

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


Вікно “Системные регистры”.

Вікно виробляє індикацію і дозволяє змінювати вміст системних регістрів. В даній групі містяться наступні регістри:

  • Регістр EIP. Покажчик команд;

  • Регістр CR0. Регістр стану процесора;

  • Регістр CR2. Лінійна адреса при відмові сторінки;

  • Регістр CR3. Фізична адреса каталогу сторінок;

  • Регістр GDTR. Регістр глобальної таблиці дескрипторів;

  • Регістр IDTR. Регістр таблиці переривань.

При зміні вмісту регістру, його ім'я виводиться білим кольорем. Вміст регістрів відображається в шістнадцятеричному вигляді. Модифікація здійснюється аналогічно описаним вище вікнам. Регістри таблиць і переривань перебують з двох частин: 32-разрядной бази і 16-разрядного розміру. Інші регістри мають звичайну 32-разрядную структуру.


Вікно “Флаги”.

Вікно відображає вміст регістру прапорів EFLAGS. Всі прапори є однобітными (окрім поля iopl, але і воно уявлене двома окремими бітами), що дозволило придати вмісту вікна більш зручний, з точки зору модифікації, вигляд. Якщо прапор встановлений, ліворуч від його імені в квадратних дужках буде стояти крестик. Прапор, доступний в даний момент для модифікації, помічається мигаючим курсором в квадратних дужках. Зміна поточного прапора здійснюється клавішами “вверх” “вниз”, а модифікація вмісту - клавішею пробілу. Модифікація реалізована в режимі тригера, те є, якщо прапор був встановлений, він буде скинутий і навпаки.


Вікно “Стек”.

Дане вікно відображає дільницю пам'яті, зайнятий сегментом стека. Інформація розташується двома колонками: адреса (зміщення) і вміст. Стрілка ліворуч від адреси вказує на поточну вершину стека, той є вміст регістру (E) SP. Використовуючи клавіші “вверх” “вниз” можна прокручувати в вікні весь вміст сегменту. Дане вікно передвизначене тільки для відображення і не дозволяє модифікувати осередки стека.


Вікно “Память”.

Дане вікно відображає вміст фізичної пам'яті емулятора. Інформація уявлена двома групами: лінійна адреса і вміст.

Вікно має локальне меню для управління поданням даних. Активізація меню виробляється комбінацією клавіш Alt+F10. Активізація пунктів меню виробляється шляхом підвода курсору клавішами “вверх” ”вниз” до пункту ,що цікавить і натиском клавіші введення. Многие пункти мають “гарячі клавіші” - комбінації клавіш, якими їхн можна активізувати знаходячись поза меню.

Меню має наступні пункти:

  • Пункт “Перейти”. Передвизначений для швидкого переходу до області пам'яті ,що цікавить. Після активізації відкривається діалогове вікно для завдання адреси області. Ліворуч в вікні знаходиться список джерел базової лінійної адреси (адреса області завжди задається відносно якого-або джерела). Праворуч вгорі знаходиться рядок введення. Користувач може ввести в ній в шістнадцятеричному вигляді зміщення відносно вибраного джерела базової адреси. Праворуч внизу знаходяться дві кнопки “Ok” і “Canсel”. Вони мають “гарячі” клавіші Enter і Escape відповідно. Перша кнопка завершує діалог з переходом до заданої області, а друга без переходу.

  • Пункт “Уявити як...”. Даний пункт відкриває підміню зі списком доступних форматів подання вмісту пам'яті. Нижче наводяться ці формати.

  • “Байт” (Alt+B). Вміст подається рядками по 16 осередків, що містять відповідні їм байти в шістнадцятеричному вигляді;

  • “Слово” (Alt+W). Те же, тільки рядок подає вісім 16-разрядных слів;

  • “Подвійне слово” (Alt+D). Рядок подає чотири 32-разрядных слова;

  • “Дескриптор” (Alt+E). Кожний рядок подає вміст пам'яті, як дескриптор. Виводиться база, межа і атрибути;

  • “Таблиця сторінок” (Alt+P). Вміст пам'яті подається, як таблиця сторінок. Кожний рядок містить по дві осередки, що, в свою чергу, уявлені двома елементами: базова адреса в шістнадцятеричному вигляді і атрибути сторінки в двоичном вигляді;

  • “Символи” (Alt+S). Рядок подає 32 байта пам'яті їхніми аналогами з таблиці ASCII. Непечатные символи уявлені крапками.

Невеликі переміщення по дільниці пам'яті можна виробляти шляхом використання клавиш “вверх” “вниз”


Вікно програми.

Це вікно відкривається при завантаженні в пам'ять емулятора ісполнімого файлу і має в якості заголовку ім'я цього файлу. Подсвечивающий курсор після завантаження вказує на першу команду програми користувача. Дизассемблирование здійснюється пакетами по 32 команди. При бажанні користувач може продивитись цю послідовність використовуючи клавіші “вверх” “вниз”.

Для покроковой отладки користувачу доступні декілька функцій, що викликаються натиском певних клавіш або комбінацій клавіш:

  • “Крок з заходом в підпрограми” (F7). Виробляється дешифрація наступної команди і виконання поточної. Строковые команди виконуються як група команд, кількість яких визначається лічильником. Команди виклика виконують перехід до підпрограми.

  • “Крок без захода в підпрограми” (F8). Запоминается адреса наступної команди і виконання виробляється до збігу вмісту покажчика команд з запам'ятаним значенням. Підпрограми, строкові команди і цикли “Loop” виконуються як одна команда. При виникненні помилки виконання зупиняється на команді, викликавшей цю помилку.

  • “Виконати дільницю” (F4). Користувач переміщає курсор на кінець блоку, що цікавить команд і викликає функцію. Виконання виробляється до збігу вмісту покажчика команд з адресою кінця блоку. Обробка входів в підпрограми, строкових команд і циклів аналогічної попередньої функції. При виникненні помилки виконання зупиняється.

  • “Пропустити блок” (Alt+F8). Користувач пересуває курсор в кінець блоку ,що цікавить і викликає функцію. Всі команди в блоку пропускаються. В суттєвості покажчику команд привласнюється значення адреси кінця блоку. Дану функцію слідує застосовувати якщо виконання блоку може призвести до виникненню помилки, а користувачу необхідно продовжити виконання.

Для відкриттів нового вікна з програмою користувача необхідно спочатку закрити попереднє.


Екран користувача”.

Для розширення можливостей емулятора в пам'яті передбачена область, що в реальній машині відповідає текстовому відеобуферу. Ця область розташується по фізичній адресі 000B8000h і має довжину 4 Кб, що відповідає одній текстовій сторінці в дозволі 80х25.

При старті емулятора в віртуальну пам'ять переписується вміст відеобуфера. Після натиску користувачем комбінації клавіш Alt+F5 вміст області пам'яті переписується в реальний відеобуфер. Повернення в багатовіконний режим здійснюється після натиску будь-який клавіші.


Додаток Б


Емулятор


Керівництво програміста


ДП 7.091501-037-99.010ДБ


Аркушів 6


Донецьк 1999


Дане керівництво містить опис основних модулей операційної частини програмного емулятора і інструкції по модернізації і розширенню функцій даного емулятора.

Необхідність в модернізації може виникнути, наприклад, при доповненні команд функцією підрахунку тактів виконання або при доданні нових команд, реалізованих в процесорах наступної ґенерації, або при реалізації емуляції яких-нибудь блоків процесора.

Є можливість також змінити місце дислокації оперативної пам'яті емулятора або збільшити її розмір. Изначально пам'ять ємністю один мегабайт знаходиться в розширеній пам'яті і доступна через драйвер HIMEM. SYS.

І, нарешті, можна доопрацювати емулятор, ввівши в нього периферійні прилади.


1 Опис модулей


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


  1. Модуль “STRUCTS. CPP”


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

В якості інтерфейсу з іншими модулями служить файл “command. hpp”, в якому містяться оголошення згаданих вище класів і основних типів даних. В модулі містяться глобальні змінні, що також служать для зв'язку з іншими модулями.

Глобальні змінні.

В модулі проголошені наступні глобальні змінні:

  • int identify. Идентификатор сегментного регістру. При створенні примірників об'єктів типу сегментного регістру відбувається перенесення вмісту цієї змінної в внутрішнє поле ідентифікатора регістру і збільшення змінної на одиницю. В результаті в кожному примірникові класу міститься унікальний ідентифікатор;

  • int stop. Прапор останова емулятора. При виникненні ситуації останова процесора цей прапор встановлюється в одиницю і емуляція припиняється;

  • ulong ercode. Код помилки виключення. При виникненні ситуації виключення в стек при викликові обрабника заноситься код помилки, що допомагає локалізувати джерело виключення;

  • int error. Номер виключення. В нормальній ситуації змінна містить -1. При виникненні виключення в неї заноситься номер виключення;

  • char cpl. Поточний рівень привілей програми. При межсегментної передачі керування в якості поточного рівня привілей програми виступає рівень запитання селектора;

  • int tekseg. При відкритті перед командою префіксу зміни сегменту в цю змінну записується код сегментного регістру;

  • int page. Поточний розмір сторінки пам'яті при сторінковій адресації. Використовується механізмом трансляції сторінок для перетворення лінійної адреси в фізичний;

  • int ad, od. Поточний розмір адреси і операнда. Перед дешифрацієй команди беруться з біта розрядності кодового сегменту. За наявності відповідних префіксів можуть змінюватися на протилежні;

  • ulong cr0, cr2, cr3. Системні регістри;

  • _gdt gdtr. Регістр глобальної таблиці дескрипторів;

  • _idt idtr. Регістр таблиці переривань.

  • _reg ron [8]. Файл регістрів загального призначення;

  • _seg srg [6]. Файл сегментних регістрів. Виконує роль блоку сегментації;

  • _ldt ldtr. Регістр локальної таблиці дескрипторів;

  • _tss tr. Регістр сегменту стану задачі;

  • _eflag eflag. Регістр прапорів.

Процедури і функції.

В модулі містяться наступні допоміжні процедури:

  • int mode (). Вертає поточний режим процесора, аналізуючи вміст системного регістру CR0 і регістру прапорів;

  • ulong conv_adr (_op, int). Вираховує виконавчу адресу операнда на підставі переданої складеної адреси і поточної розрядність адреси;

  • int cccc (uchar, char*). Виконує перевірку умови, код якого передається в якості параметру. Вертає результат перевірки і мнемонічну позначку умови.


  1. Модуль “CONTROL. CPP”


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

Змінні.

Ці змінні хоч і проголошені як глобальні використовуються тільки всередині модуля. Модуль містить наступні змінні:

  • _command* mas [256]. Масив команд. Містить покажчики на примірники класів дешифрацію і виконання 256 команд ,що реалізують і груп;

  • _decoder cmds [2]. Черга команд. Перед виконанням команди з індексом 0 виробляється дешифрація команди з індексом 1. Після виконання команда 1 позичає місце команди 0.

Процедури і функції.

В модулі містяться наступні процедури і функції:

  • void init (). Процедура ініціалізації масиву команд. Дана процедура викликається один раз при старті емулятора для створення примірників класів, що реалізують дешифрацію і виконання команд процесора;

  • void int_call (int). Процедура виконує виклик обрабника переривання, номер якого передається їй в якості параметру;

  • int step (_decoder*). Функція виробляє дешифрацію префіксів команди і виклик засобу deasm () класу, що реалізує цю команду. Вертає заповнену структуру команди і ознака помилки в випадку її виникнення;

  • int exec_com (). Функція виробляє виконання команди шляхом виклика засобу die () класу, що реалізує команду.


  1. Модулі “MEM. CPP”, “COM_ANDS. CPP”, “COM_MOVS. CPP”


В модулі “MEM. CPP” знаходиться реалізація засобів класу _mem, що здійснює операції обміну з пам'яттю і приладами введення-висновку.

В інших модулях знаходиться реалізація засобів deasm () і die () класів команд. В модулі “COM_ANDS. CPP” зібрані аріфметичнф, логічні команди і команди зрушень, а в модулі “COM_MOVS. CPP” зібрані команди пересилки і керування.


2 Інструкції по модернізації і розширенню функцій емулятора


Додання нових команд.

Для введення в емулятор нової команди необхідно створити клас, що реалізує цю команду. Клас повинен спадкуватися від базового класу _command і мати свої реалізації засобу deasm () для дешифрацфї і засобу die () для виконання команди. Оголошення класу слідує помістити в файл “command. h”.

Коли засіб deasm () одержує керування, всі префікси вже дешифровані і проведені необхідні корегування полий структури команди, що передається в якості параметру. Для необхідності дешифрації пост-байтів треба викликати засіб mod () при цьому локальний покажчик зміщення відносно почала команди повинен вказувати на пост-байт. В якості параметру засобу необхідно передати номер операнда, що заповнюється. В поле strcom структури необхідно занести мнемонику команди без операндів, а покажчик зміщення встановити за останній байт команди. Для читання безпосередніх операндів необхідно використати відповідні засоби структури. В поле *p необхідно занести покажчик на об'єкт типу класу команди. В якості параметру слідує повернути ознаку помилки в випадку її виникнення.

Засіб die () викликається для безпосереднього виконання команди. В якості параметру в нього передається покажчик на структуру команди, що була попередно дешифрована засобом deasm (). Для одержання операндів з пам'яті або запису їхн в пам'ять слідує використати відповідні засоби класу _seg.

Реалізацію засобів бажано розмістити в файлі “COM_ANDS. CPP” або “COM_MOVS. CPP”.

Зміна реалізації пам'яті емулятора.

Якщо виникне необхідність в зміні реалізації пам'яті емулятора, наприклад, реалізувати її в вигляді файлу на диску, слідує переписати або внести зміни в реалізацію засобів класу _mem, що знаходиться в модулі “MEM. CPP”.


Додання емуляції периферійних приладів.

Емулятор периферійного влаштування слідує розмістити в додатковому модулі і створити необхідний інтерфейс з іншими модулями. Також слідує доопрацювати клас _mem, доповнивши його засобами звертання до портів, і використати ці засоби в реалізації команд звертання до портів.


ПЕРЕЛІК ПОСИЛАНЬ


  1. Гук М. “Процессоры Intel от 8086 до Pentium II”. - СПб: “ПИТЕР”,1997 - 224 с.

  2. Бродин В.Б. Шагурин И.И. “Микропроцессор i486. Архитектура, программирование, интерфейс”. - М.: “ДИАЛОГ-МИФИ”, 1993. - 240 с.

  3. Голенкова Ж.К. Заболоцкий А.В. Мархасин М.Л. “Руководство по архитектуре IBM PC AT”. - Мн.: ООО “Консул”, 1992. - 949 с.

  4. Бердышев Е. “Технология ММХ. Новые возможности процессоров Р5 и Р6”. - М.: “ДИАЛОГ-МИФИ”, 1998. - 234с.




Р Е Ф Е Р А Т


Аркушів ____ Рисунків ____ Таблиць ____ Додатків ____ Посилань ____




ПРОЦЕСОР, ЗОВНІШНІЙ ІНТЕРФЕЙС, СТОРІНКОВА АДРЕСАЦІЯ, ВІРТУАЛЬНІ ПЕРЕРИВАННЯ, ПРОГРАМНИЙ ЕМУЛЯТОР, ЗАХИЩЕНИЙ РЕЖИМ













Мікропроцесорна техніка
ЗМІСТ ЦІЛІ І ЗАВДАННЯ 1 Відповіді на питання по охороні праці при роботі з ПК та УНМС-2 2 Відповіді на контрольні питання з устрою ти принципу роботи ...
Інтерфейс між периферійним мікроконтролером і системною шиною даних реалізований на основі двох зустрічно включених регістрів КР1533ИР22, що мають однакову системну адресу FFF4h.
При відсутності помилок користувачеві представляється лістінг компіляції (дамп програми) із вказівкою адрес розміщення в пам'яті МК-системы й кодів машинного подання всіх команд і ...
Раздел: Рефераты по информатике, программированию
Тип: отчет по практике
Динамічна пам'ять, принципи її організації і роботи
Курсова робота на тему "Динамічна пам'ять, принципи її організації і роботи" ЗАВДАННЯ ДО КУРОСОВОЇ РОБОТИ Варіант 3 Згідно з номером свого варіанта ...
4. Якщо в КП є копія даних адресованої комірки основної пам"яті ЗП, то вона виробляє сигнал Hit (співпадіння "1") і видає дані на загальну шину.
3. В елементах пам"яті, виготовлюваних у вигляді напівпровідникових ВІС, а також в процесорах підвищеної надійності використовується оперативний апаратний контроль за допомогою ...
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа
Створення мікропроцесорної системи обробки інформації
... 2. Розробка І опис принципової схеми системи 2.1 Розробка мікропроцесорного блоку 2.2 Розробка блоку пам"яті (ОЗП і ПЗП) 2.3 Інтервальний таймер ...
Багатофункціональні схеми призначені для реалізації простих арифметичних і логічних дій над двійковими числами, що знаходяться в регістрах процесора, і пересилок даних як усередині ...
8-розрядний двунаправлений порт А вводу/виводу з третім станом, при роботі з зовнішньою пам"яттю являється суміщеною шиною адреси даних (адрес необхідно по сигналу ALE занести в ...
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа
Сутність та принципи роботи ЕОМ
Курсова робота ЕОМ - електро-обчислювальнi машини 1. Загальнi положення функцiонування ЕОМ Електроннi обчислювальнi машини (ЕОМ) з кожним роком ...
Пiдтримує асинхронну 64-розрядну шину пам"ятi з частотами роботи 66/100/133 МГц, типи пам"ятi РС100, РС133 SDRAM, VCM (Virtual Channel Memory) SDRAM (VCM133) - до 1,5 Гбайт (при ...
Для виконання iнших (зовнiшнiх) команд користувача командний процесор шукає на дисках програму з вiдповiдним iм'ям i якщо знаходить її, то завантажує в пам'ять i передає їй ...
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа
Шини (Industrial Standard Architecture)
Шини (Industrial Standard Architecture) Шина, як відомо, представляє із себе, власне, набір проводів (ліній), що з'єднує різні компоненти комп'ютера ...
Крім того, шина не підтримувала додаткових bus masters, і єдиними пристроями, що керують шиною, минулого процесор і контролер DMA на материнській платі.
Наприклад, процесор працює собі з кешем або системною пам'яттю, а в цей час по мережі на вінчестер пишеться інформація.
Раздел: Рефераты по информатике, программированию
Тип: доклад