Материалы сайта
Это интересно
Керiвництво программиста
Додаток А Емулятор Керівництво користувача ДП 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 вміст області пам'яті переписується в реальний відеобуфер. Повернення в багатовіконний режим здійснюється після натиску будь-який клавіші.