АК_lab3

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
Архітектура комп’ютерів та комп’ютерних систем

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра ЕОМ / Лабораторна робота №3 з Архітектури комп’ютера на тему: «Робота з симулятором машини Ноймана. Дослідження виконання асемблерної програми симулятора.» Львів – 2013 Мета: опанувати роботу асемблера на симуляторі машини Ноймана, зрозуміти і дослідити принцип виконання програми машиною Ноймана. Завдання: скласти програму на асемблері, перетворити її у машинні коди, запустити симулятор, увести до нього коди машинних, проаналізувати і пояснити отримані результати, скласти звіт з виконання лабораторних досліджень та захистити його. Теоретичні відомості В ході виконання даної лабораторної роботи розглядається симулятор та асемблер 32 розрядного CISC комп’ютера. Даний комп’ютер містить 8 регістрів (0 вий регістр завжди зберігає 0) та 65536 комірок пом’яті по 32 розряди. Набір машинних інструкцій складається з 8 команд (табл. 1). Таблиця 1. Множина інструкцій № пп Код інструкції 2кове СУТНІСТЬ ІНСТРУКЦІЙ МАШИНИ  Інструкції R-типу  1 add 000 Додає вміст регістру regA до вмісту regB, та зберігає в destReg  2 nand 001 Виконує логічне побітове І-НЕ вмісту regA з вмістом regB, та зберігає в destReg  I-тип  3 lw 010 Завантажує regB з пам’яті. Адреса пам’яті формується додаванням зміщення до вмісту regA.  4 sw 011 Зберігає вміст регістру regB в пам’ять. Адреса пам’яті формується додаванням зміщення до вмісту regA.  5 beq 100 Якщо вміст регістрів regA та regB однаковий, виконується перехід на адресу програмний лічильник(ПЛ) + 1+зміщення, в ПЛ зберігається адреса поточної тобто beq інструкції.  J-тип  6 jalr 101 Спочатку зберігає ПЛ+1 в regB, в ПЛ адреса поточної (jalr) інструкції. Виконує перехід на адресу, яка зберігається в regA. Якщо в якості regA regB задано один і той самий регістр, то спочатку в цей регістр запишеться ПЛ+1, а потім виконається перехід до ПЛ+1.  O-тип  7 halt 110 Збільшує значення ПЛ на 1, потім припиняє виконання, стимулятор має повідомляти, що виконано зупинку.  8 noop 111 Нічого не виконується   Формат лінійки асемблерного коду наступний (<пробіл> означає послідовність табуляцій і/або пробілів): мітка <пробіл> інструкція<пробіл>поле№1<пробіл> поле№2<пробіл> поле№3<пробіл>коментар Крайнє ліве поле лінійки асемблерного коду – поле мітки. Коректна мітка має складатися максимуму з 6 символів, символами можуть бути літери або цифри, але починатися з букви. Поле мітки є необов’язковим, проте пробіл після даного поля є обов’язковим. Після не обов’язкової мітки іде обов’язковий пробіл. Далі іде поле назви інструкції, в якому може бути ім’я будь якої асемблерної інструкції зазначені вище в таблиці. Після пробілів ідуть відповідні поля. Всі поля можуть зберігати або десяткові значення або мітки. Кількість полів залежить від інструкції, поля які не використовуються ігноруються (подібно до коментарів). Інструкції r-типу (add, nand) потребують наявності 3 полів: поле№1 – regA, поле№2 regB поле№3 destReg. Інструкції і-типу (lw,sw,beq) вимагають 3 полів: поле№1 – regA, поле№2 regB поле№3 – числове значення зміщення чи символьна адреса. Числове значення може бути як додатнім так і відємним. Символьні адреси описані нижче. Інструкція J-типу (jalr) вимагає 2 полів: поле№1 – regA, поле№2 regB Інструкція 0-типу (noop, halt) не вимагає жодного. Символьні адреси посилаються на відповідні мітки. Для інструкцій lw та sw асемблер має згенерувати зміщення, яке дорівнює адресі мітки. Вона може використовуватися з 0 регістром, тоді буде посилання на мітку, або може використовуватися з не нульовим базовим регістром у якості індексу масиву, який починається з мітки. Для інструкції beq, асемблер має перетворити мітку в числове зміщення куди має відбуватися перехід. Після останнього поля має йти пробіл за яким може розміщуватися коментар. Коментар закінчується з кінцем лінії асемблерної програми. Крім інструкцій асемблерна програма може містити директиву - .fill (зверніть увагу на точку попереду). Директива . fill повідомляє компілятору про те, що він має зберегти число за адресою відповідно де дана інструкція знаходиться. Директива .fill використовує одне поле, в якому може бути як число так і символьна адреса. Наприклад «.fill 32» означає зберегти число 32 за адресою де дана інструкція знаходиться. (Оскільки в нас кожен рядок програми відповідає адресі починаючи з 0, то відповідно адреса буде дорівнювати номеру рядка - 1). Директива . fill з символьною адресою збереже адрессу даної мітки. В прикладі нижче ".fill start" збереже значення 2, тому що мітка start знаходиться за адресою 2. Код ассемблерної прогрма: lw 0 1 start lw 0 2 start lw 0 3 one lw 0 4 iter lw 0 6 fifty iter beq 1 6 end add 1 3 1 add 2 1 2 beq 0 0 iter end halt fifty .fill 50 start .fill 42 one .fill 1 Отриманий асемблюванням відповідний асемблерній програмі файл з вісім розрядним гексадецимальним машинним кодом цієї програми має назву ak3.mc та наступне наповнення: 8454155 8519691 8585228 8650757 8781834 17694723 720897 1114114 16842748 25165824 50 42 1 Послідовність виконання асемблювання та симуляції (за допомогою програм assemble.exe та simulate.exe): / Початок Кінець  memory[0]=8454155 memory[1]=8519691 memory[2]=8585228 memory[3]=8650757 memory[4]=8781834 memory[5]=17694723 memory[6]=720897 memory[7]=1114114 memory[8]=16842748 memory[9]=25165824 memory[10]=50 memory[11]=42 memory[12]=1 @@@ state: pc 0 memory: mem[ 0 ] 8454155 mem[ 1 ] 8519691 mem[ 2 ] 8585228 mem[ 3 ] 8650757 mem[ 4 ] 8781834 mem[ 5 ] 17694723 mem[ 6 ] 720897 mem[ 7 ] 1114114 mem[ 8 ] 16842748 mem[ 9 ] 25165824 mem[ 10 ] 50 mem[ 11 ] 42 mem[ 12 ] 1 registers: reg[ 0 ] 0 reg[ 1 ] 0 reg[ 2 ] 0 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 end state machine halted total of 39 instructions executed final state of machine: @@@ state: pc 10 memory: mem[ 0 ] 8454155 mem[ 1 ] 8519691 mem[ 2 ] 8585228 mem[ 3 ] 8650757 mem[ 4 ] 8781834 mem[ 5 ] 17694723 mem[ 6 ] 720897 mem[ 7 ] 1114114 mem[ 8 ] 16842748 mem[ 9 ] 25165824 mem[ 10 ] 50 mem[ 11 ] 42 mem[ 12 ] 1 registers: reg[ 0 ] 0 reg[ 1 ] 50 reg[ 2 ] 414 reg[ 3 ] 1 reg[ 4 ] 17694723 reg[ 5 ] 0 reg[ 6 ] 50 reg[ 7 ] 0 end state   Висновок: Під час виконання цієї лабораторної роботи я опанував роботу асемблера на симуляторі машини Ноймана, зрозуміти і дослідити принцип виконання програми машиною Ноймана.
Антиботан аватар за замовчуванням

30.12.2013 17:12-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!