Кер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с.




    Р Е Ф Е Р А Т


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




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













    Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
    Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

    Поможем написать работу на аналогичную тему

    Получить выполненную работу или консультацию специалиста по вашему учебному проекту
  • Похожие рефераты: