архітектуру прототипних варіантів CISC – ком’ютера

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  Кафедра ЕОМ КУРСОВА РОБОТА НА ТЕМУ ПРОЕКТУВАННЯ КОМП'ЮТЕРА Курс – “Архітектура комп’ютерів” Зміст Анотація………………………………………………………………………………..……..…….3 Завдання до курсової роботи…..……………………………………………………..……….….4 Теоретичні відомості……...…..….………..…………………………………………..……….….5 Архітектурні приниципи……………………………………………………………………5 Системи команд………………………………………………………………………….….6 Способи адресації………………………………….………………………………………..7 Аналітичний розділ……………………………………………………………………………..…9 Основні результати роботи……..………………………………………………………….……12 Висновки……..…………………………………………………………………………………....22 Література……..……………………………………………………………………………..……23 Додатки……..…………………………………………………………………………………...…24 Анотація Мета курсового проектування полягає в опануванні студентом знань про принципи дії та архітектуру прототипних варіантів CISC – ком’ютера. Крім того курсовий проект допоможе зрозуміти інструкції простої асемблерної мови та як транслювати програми в машинну мову. Проект складається з трьох частин. В першій частині розробляється програма, яка перетворює вхідну асемблерну програму у відповідний код на мові машинних інструкцій. В другій частини розробляється поведінковий стимулятор результуючого машинного коду. В третій частині розробляється невеличка програма на асемблер ній мові. Завдання до курсової роботи 1. Реалізація додаткових команд. Необхідно реалізувати 8 додаткових команд. Серед них 3 арифметичні, 3 логічні та 2 команди керування згідно варіанту. Команди не мають повторюватися. INC збільшити на 1; XIDIV regA regB destReg - Знакове ділення і обмін операндів місцями destReg=regA/regB; XSUB regA regB destReg - Відняти і обміняти операнди місцями destReg=regA-regB regA<=>regB; XOR regA regB destReg - Додавання по модулю 2: destReg=regA # regB; SHL regA regB destReg – Логічний зсув вліво: destReg=regA << regB; CMPLE regA regB destReg - Порівняти regA regB destReg= regA < =regB; JMB regA regB offSet - Беззнакове менше if (regA<regB) PC=PC+1+offSet; JMNE regA regB offSet - Не рівно if (regA!= regB) PC=PC+1+offSet. 2. Реалізувати додатковий спосіб адресації. Передбачити, що 3 інструкції підтримують інший вид адресації згідно варіанту. Базово-індексна (розробити IR та BR – базовий регістр). 3. Регістри стану: CF –регістр переносу. CMP regA regB – Порівняти regA regB і встановити прапорці CF SF ZF  regA< regB 1 1 0  regA= regB 0 0 1  regA> regB 0 0 0   STC regA regB – Встановити CF=1 RCR regA regB destReg - Зсунути циклічно вправо через CF destReg=regA << regB. Теоретичні відомості Архітектурні принципи В ході виконання даного курсового проекту студент має ознайомитись та опанувати архітектуру CISC – комп’ютера. Приведемо основні принципи даної архітектури, які запропонував Джон фон Нейман: 1. Інформація кодується в двійковому представленні. 2. Інформація в комп’ютері ділиться на команди і дані. 3. Різнотипні за змістом слова розрізняються за способом застосування, а не по способу кодування. 4. Слова інформації розміщаються в комірках пам’яті та ідентифікуються номерами комірок – адресами слів. 5. Пам’ять є лінійною. 6. Пам’ять має довільну адресацію. 7. Команди і дані зберігаються в одній пам’яті. 8. Алгоритми представляються у вигляді послідовності керуючих слів, як називаються командами. Команда визначається найменуванням операції та слів інформації, які в ній приймають участь. Алгоритм записаний у вигляді послідовності команд, називається програмою. 9. Весь набір виконуваних комп’ютером команд називається системою команд комп’ютера. 10. Виконання обчислень, які визначені алгоритмом, являють собою послідовне виконання команд в порядку визначеному програмою. Для виконання задачі на комп’ютері необхідно: − забезпечити вибірку команди програми із його пам’яті в заданій послідовності, організувати звернення до неї за відповідними адресами; − забезпечити розпізнавання типів виконуваних операцій; − організувати звернення до пам’яті за відповідними адресами для вибірки необхідних для виконання кожної команди даних; − організувати виконання над даними операцій відповідно до вказівок команд; − запам’ятати результат обчислень. Комп'ютер виконує кожну команду як послідовність простих операцій: 1. Вибірка чергової команди із основної пам'яті. 2. Визначення типу вибраної команди, тобто її дешифрування. 3. Визначення адрес даних, необхідних для виконання цієї команди. 4. Виконання операцій пересилання даних (зчитування даних із пам'яті в регістри процесора). 5. Виконання операції відповідно до її коду в полі коду операції команди. 6. Визначення адрес, за якими запам'ятовуються результати. 7. Запам'ятовування результатів. 8. Підготовка до виконання наступної команди, тобто обчислення її адреси. Для процесора комп'ютера із складною системою команд характерні наступні особливості: − виконання команди за багато тактів, оскільки для цього потрібно здійснити багаторазові операції звернення до основної пам'яті та до програмно-доступних регістрів процесора; − орієнтація АЛП на виконання великої кількості операцій, що пов'язано з розширеним складом системи команд; − складна система розпізнавання команди, що пов'язано з великою кількістю методів адресації та великою кількістю форматів команд різної розрядності; − програмне дешифрування команд з метою зменшення затрат обладнання; − складна організація конвеєризації виконання команд, що пов'язано, в першу чергу, з різнотипністю їх виконання; − орієнтація структури на виконання команд типу регістр-пам'ять та пам'ять-пам'ять. Основні елементи процесора - арифметико-логічний пристрій, пристрій керування і регістрова пам'ять або, як її ще називають, надоперативний запам'ятовуючий пристрій. До складу регістрової пам'яті, в свою чергу, входять наступні вузли - програмний лічильник, регістри: адреси, команди, даних, слова стану програми, а також регістровий файл, який складається з програмно доступних регістрів. Cтруктура регістрової (надоперативної) пам'яті процесора складається з регістрів спеціального та зального призначення. До регістрів спеціального призначення належать: − регістри адреси (РгА); − регістри команд (РгК); − програмний лічильник(ПЛ) − регістри даних (РгД). РгА зберігає адресу даного або команди при зверненні до основної пам'яті. РгД зберігає операнд при його запису або зчитуванні з основної пам'яті. В ролі операнда може бути дане, команда або адреса. РгК зберігає команду після її зчитування з основної пам'яті. ПЛ підраховує команди та зберігає адресу поточної команди. Комп'ютер з архітектурою Джона фон Неймана має один програмний лічильник. Більшість комп'ютерів мають в складі процесора тригери для зберігання бітів стану процесора, або, як їх іще називають, прапорців. Кожен прапорець має спеціальне призначення. Частина прапорців вказує на результати арифметичних і логічних операцій: додатній результат (Р), від'ємний результат (N), нульовий результат (Z), перенос (С), арифметичне переповнення (V), і т. д. В системі команд комп'ютера є команди, які вказують процесору коли встановити чи скинути ці тригери. Інша частина прапорців вказує режими захисту пам'яті. Існують також прапорці, які вказують пріоритети виконуваних програм. В деяких процесорах додаткові тригери служать для зберігання кодів умов, формуючи регістр кодів умов. Взяті разом описані прапорці формують слово стану програми (ССП), а відповідні тригери - регістр ССП. Регістри загального призначення (РЗП) є програмно доступними. Зазвичай 'їх називають регістровим файлом. Вони можуть використовуватись програмістом в якості регістрів для зберігання вхідних та вихідних даних, а також проміжних результатів обчислень, в якості адресних та індексних регістрів при виконанні операцій модифікації адрес. Система команд Різноманітність типів даних, форм представлення та опрацювання, необхідні дії для обробки та керування ходом виконання обчислень призводить до необхідності використання різноманітних команд – набора команд. Кожен процесор має власний набір команд, який називається системою команд процесора. Система команд характеризується трьома аспектами: − формат, − способи адресації, − система операцій. Форматом команди – є довжина команди, кількість, розмір, положення, призначення та спосіб кодування полів. Команди мають включати наступні види інформації: − тип операції, яку необхідно реалізувати в даній команді (поле команду операції - КОП) − місце в пам’яті звідки треба взяти перший операнд (А1); − місце в пам’яті звідки треба взяти другий операнд (А2); − місце в пам’яті куди треба помістити результат (А3). Кожному з цих видів інформації відповідає своя частина двійкового слова – поле. Реальна система команд зазвичай має команди декількох форматів, тип формату визначає КОП. Команда в комп'ютері зберігається в двійковій формі. Вона вказує тип операції, яка має бути виконаною, адреси операндів, над якими виконується операція, та адреси розміщення результатів виконання операції. Відповідно до цього команда складається з двох частин, коду операції та адресної частини. КОП займає k розрядів. Ним може бути закодовано до N = 2k різних операцій. Кількість двійкових розрядів, які відводяться під код операції, вибирається таким чином, щоб ними можна було закодувати всі виконувані в даному комп'ютері операції. Якщо деякий комп'ютер може виконувати Nc різних операцій, то мінімальна розрядність поля коду операції k визначається наступним чином: k = [log Nc], де вираз в дужках означає заокруглення до більшого цілого. Поле адреси (адресна частина) займає m розрядів. В ньому знаходяться адреси операндів. Кожна адреса займає mi розрядів, де і - номер адреси (і=1,2,...1), 1 - кількість адресних полів. Кожною адресою можна адресувати пам'ять ємністю 2ті слів. Розмір команди k + m повинен бути узгодженим з розміром даних, тобто бути з ним однаковим або кратним цілому числу, що спрощує організацію роботи з пам'яттю. Як правило, розмір команди рівний 8, 16, 32 біти. При написанні програми крім двійкової можуть використовуватись й інші форми представлення команд: вісімкова, шістнадцяткова, символьна (мнемонічна). Використання вісімкового і шістнадцяткового кодування дозволяє скоротити записи і спростити роботу програміста. Як відомо 3 двійкових розряди (тріада) замінюються на 1 вісімковий, а 4 двійкових розряди (тетрада) - на 1 шістнадцятковий. Приклад: (000011111111)2= (0377)8= (0FF)16; Мнемонічне кодування спрощує процес написання, читання і відлагодження програми. Основний принцип такого кодування - кожна команда представляється 3-х або 4-х буквеним символом, який показує назву команди. Деякі приклади мнемонічного кодування: ADD - додати (add), SUB - відняти (subtract), MPY - перемножити (multiply), DIV - поділити (divide), Операнди також представляються символічно. Наприклад команда ADD R Y означає додавання вмісту комірки пам'яті Y до вмісту регістра R. Зауважимо, що операція виконується над вмістом, а не над адресою комірки пам'яті та регістра. Таким чином, з'являється можливість написання машинних програм в символічній формі. Повний набір символічних назв і правила їх використання утворюють мову програмування, відому як асемблерна мова. Символічні імена називаються мнемонічними, а правила їх використання для створення команд і програм називаються синтаксисом мови. Програма, яка переводить із мнемонічного коду асемблерної мови в машинний, називається асемблером. Команди, які використовуються для переводу вихідної програми в асемблерну, називаються командами асемблера. Ці команди вказують як інтерпретувати назви, де розмістити програму в пам'яті, яка кількість комірок пам'яті необхідна для зберігання даних. Асемблерна мова є дуже далекою від мови людини і заставляє програміста думати виходячи з принципів побудови комп'ютера. Тому були створені мови високого рівня та компілятори, які переводять програми з цих мов на мову асемблера. Використання мов високого рівня має цілий ряд переваг в порівнянні з використанням асемблера. По-перше, програміст пише програми на мові, близькій до його мови спілкування. Більше того, мови високого рівня орієнтуються на класи вирішуваних задач. По-друге, скорочується час написання програм. І по-третє, мови високого рівня є незалежними від типу та архітектури комп'ютера, що дозволяє використовувати написані на цих мовах програми на всіх комп'ютерах, а програміста звільнити від знання їх структури та організації роботи. Способи адресації Варіанти інтерпретації бітів (розрядів) поля адреси з метою знаходження операнда називаються способами адресації. Коли команда вказує на операнд, він може знаходитись в самій команді, в основній або зовнішній пам'яті чи в регістровій пам'яті процесора. За роки існування комп'ютерів була створена своєрідна технологія адресації, яка передбачає реалізацію різних способів адресації, чому послужило ряд причин: − забезпечення ефективного використання розрядної сітки команди; − забезпечення ефективної апаратної підтримки роботи з масивами даних; − забезпечення задання параметрів операндів; − можливість генерації великих адрес на основі малих. Існує велика кількість способів адресації. Розглянемо п’ять основних способів адресації опрандів в командах. Пряма – в цьому випадку адресне поле зберігає адресу операнда. Її різновидом є пряма регістрова адресація, яка адресує не комірку пам’яті а номер регістру. Безпосередня – в поле адреси команди поміщається не адреса, а сам операнд. Непряма – в полі адреси команди зберігається адреса комірки пам’яті в якій знаходиться адреса операнда. Такій спосіб дозволяє оперувати з адресами як з даними. Різновид непряма-регістрова адресація, адреса адреси зберігається в регістрі загального призначення. Відносна – адреса формується, як сума з двох доданків: бази, яка зберігається в спеціальному регістрі чи в одному з регістрів спеціального призначення, та зміщення, яке задається в полі адреси команди. Різновид індексна та базова індексна. При індексній замість базового регістра є індексний, який автоматично модифікується (зазвичай збільшується на 1). Базова-індексна адресація формується адреса як сума трьох доданків: бази, індексу та зміщення. Безадресна – поле адреси в команді відсутнє. Адреса операнда, або немає змісту або є по замовчуванню(наприклад дії на спеціальним регістром - акумулятором). Безадресні команди неможливо використати для інших регістрів чи комірок пам’яті. Одним з різновидів безадресної адресації є використання стеку. Практично у всіх існуючих комп'ютерах використовується один або декілька з цих способів адресації. Тому в команду потрібно вводити спеціальні ознаки з тим, щоб пристрій керування міг розпізнати використаний спосіб. Це можуть бути додаткові розряди в команді, або для різних типів команд закріплюватись різні способи адресації. Аналітичний розділ В першій частині розробляється програма, яка перетворює вхідну асемблерну програму у відповідний код на мові машинних інструкцій. В другій частини розробляється поведінковий стимулятор результуючого машинного коду. В третій частині розробляється невеличка програма на асемблер ній мові.  Рис 1. Функціональна схема СК. В СК в пам’яті зберігаються, як дані так і інструкції. Кожна інструкція закодована числом. Це число складається з декількох полів: поле назви команди чи код операції (КОП) та полів операндів. В СК є два види пам’яті: загальна пам’ять, та регістрова пам’ять. В загальній пам’яті зберігаються інструкції програми та дані над якими оперують інструкції. В регістровий пам’яті зберігаються дані над якими виконуються інструкції. У реальних комп’ютерах регістрова пам’ять є малою за розмірами та швидкою, працює на швидкості ядра процесора, загальна пам’ять є великою за розміром, але набагато повільніша за ядро процесора. Регістрова пам’ять підтримує лише пряму адресацію, загальна пам’ять підтримує декілька типів адресації. Розглянемо детальніше інструкції згідно мого варіанту: R-типу (ADD, NAND, XIDIV,XSUB,XOR,SHL,CMPLE,RCR): біти 26-22: код операції біти 21-19: reg A біти 18-16: reg B біти 15-3: не використовуються ( =0) біти 2-0: destReg 31-27 26-22 21-19 18-16 15-3 2-0  unused opcode regA regA unused destreg   I-тип інструкцій (LW, SW, BEQ, JMB , JMNE): біти 26-22: код операції біти 21-19: reg A біти 18-16: reg B біти 15-0: зміщення (16 біт, значення від -32768 до 32767) 31-27 26-22 21-19 18-16 15-0  unused opcode regA regB offset   J-тип інструкцій (JALR, BT): біти 26-22: код операції біти 21-19: reg A біти 18-16: reg B біти 15-0: не використовуються ( =0) 31-27 26-22 21-19 18-16 15-0  unused opcode regA regB unused   O-тип інструкцій (HALT): біти 26-22: код операції біти 21-0: не використовуються ( =0) 31-27 26-22 21-0  unused opcode unused   INC, STC. Інструкції закодовуються наступним чином: Біти 26-22: код операції Біти 21-19: reg A Біти 18-0: не використовуються 31-27 26-22 21-19 18-16 15-0  unused opcode regA unused unused   Інструкції типу ІІІ. Це такі інструкції : LOAD, SAVE. Інструкції закодовуються наступним чином: Біти 26-22: код операції Біти 21-19: reg A Біти 18-16: не використовуються Біти 15-0: зміщення ( 16 біт , значення від -32768 до 32767) 31-27 26-22 21-19 18-16 15-0  unused opcode regA unused BR+offset   Перелік множини інструкцій згідно мого варінту: № пп Код інструкції 2кове СУТНІСТЬ ІНСТРУКЦІЙ МАШИНИ  Інструкції R-типу  1 INC regA 00111 Виконує збільшення regA на 1  2 XSUB regA regB destReg 01000 Віднімає вміст regA від вмісту regB, результат зберігається в destReg, після цього вміст а переходить у комірку де зберігається regB, а вміст regB переходить в комірку, де зберігався regA  3 XIDIV regA regB destReg 01001 Ділить знаковий вміст regA на знаковий вміст regB, результат зберігається в destReg, після цього вміст а переходить у комірку де зберігається regB, а вміст regB переходить в комірку, де зберігався regA  4 SHL regA regB destReg 01010 Виконує логічний зсув вліво regA на regB, результат зберігається в destReg  5 XOR regA regB 01011 Виконує додавання за модулем 2 вмісту regA з вмістом regB, результат зберігається в destReg  6 CMPLЕ regA regB destReg 01100 Виконує порівняння вмісту regA з вмістом regB, та зберігає в destReg 1, якщо вмісту regA <=regB, і 0, якщо навпаки  7 CMP regA regB destReg 10111 Виконує порівняння вмісту regA і вмісту regB , Якщо regA< regB то CF=1,SF=1,ZF=0 Якщо regA= regB то CF=0,SF=0,ZF=1 Якщо regA> regB то CF=0,SF=0,ZF=0  8 RCR regA regB destReg 11001 Виконує циклічний зсув вправо вмісту regA на к-сть розрядів вмісту regB, останній зсунутий біт записує в CF, результат зсуву в destReg  9 ADD regA regB destReg 00000 Додає вміст регістру regA до вмісту regB, результат зберігається в destReg  10 NAND regA regB destReg 00001 Викону логічне побітове І-НЕ вмісту regA з вмістом regB, результат зберігається в destReg  I-тип  11 JMB regA regB offSet 01101 Якщо regA< regB виконати PC=PC+1+offSet адресу програмний лічильник(ПЛ) + 1+зміщення, в ПЛ зберігається адреса поточної, тобто beq інструкції  12 JMNE regA regB offSet 01110 Якщо вміст регістрів regA != regB , виконується перехід на адресу програмний лічильник(ПЛ) + 1+зміщення, в ПЛ зберігається адреса поточної, тобто beq інструкції  13 LW regA regB offset 00010 Завантжує regB з пам’яті. Адреса пам’яті формується додаванням зміщення до вмісту regA.  14 SW regA regB offset 00011 Зберігає вміст регістру regB в пам’ять. Адреса пам’яті формується додаванням зміщення до вмісту regA.  15 BEQ regA regB offset 00100 Якщо вміст регістрів regA та regB однаковий, виконується перехід на адресу програмний лічильник(ПЛ) + 1+зміщення, в ПЛ зберігається адреса поточної тобто beq інструкції.  J-тип  16 JALR regA regB 00101 Спочатку зберігає ПЛ+1 в regB, в ПЛ адреса поточної (jalr) інструкції. Виконує перехід на адресу, яка зберігається в regA. Якщо в якості regA regB задано один і той самий регістр, то спочатку в цей регістр запишеться ПЛ+1, а потім виконається перехід до ПЛ+1.  O-тип  17 HALT 00110 Збільшує значення ПЛ на 1, потім припиняє виконання, стимулятор має повідомляти, що виконано зупинку.  Базово-індексна адресація  18 LOAD regA regB offset 10010 Завантжує regB з пам’яті.  19 SAVE regA regB offset 10011 Зберігає вміст регістру regB в пам’ять.  20 STC 10100 Встановлює CF=1;  21 CLCR 10101 Очищає IR=0  22 CLCB 10110 Очищає BR=0  23 INCIR 10111 Інкремент IR+=1  24 INCBR 11000 Інкремент BR+=1   Основні результати роботи За допомогою команд: assemble filename.as filename.mc simulate filename.mc> filename.txt перетворюю асемблерний код в машинний, після чого результати роботи заношу в текстовий файл. Розгляну на прикладах правильність виконання заданих інструкцій: Завдання : Виконати додавання по модулю 2 для двох чисел: A = 0F78 D32A= 0000 1111 0111 1000 1101 0011 0010 1010 = 259576618 B= 0DA9 2435= 0000 1101 1010 1001 0010 0100 0011 0101 = 229188661 Результат С= 0000 0010 1101 0001 1111 0111 0001 1111 = 47314719 1.as load 2 A завантажити в рег.2 числа за міткою A load 3 B завантажити в рег.3 числа за міткою B xor 3 2 1 побітове додавання за модулем 2 рег.3 та рег.2 save 1 C зберегти рег.1 в пам'ять halt A .fill 259576618 B .fill 229188661 C .fill 0 1.txt memory[0]=76546053 memory[1]=77070342 memory[2]=43646977 memory[3]=80216071 memory[4]=25165824 memory[5]=259576618 memory[6]=229188661 memory[7]=0 @@@ state: pc 0 memory: mem[ 0 ] 76546053 mem[ 1 ] 77070342 mem[ 2 ] 43646977 mem[ 3 ] 80216071 mem[ 4 ] 25165824 mem[ 5 ] 259576618 mem[ 6 ] 229188661 mem[ 7 ] 0 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 IREG 0 BREG 0 flags: CF 0 end state @@@ state: pc 1 memory: mem[ 0 ] 76546053 mem[ 1 ] 77070342 mem[ 2 ] 43646977 mem[ 3 ] 80216071 mem[ 4 ] 25165824 mem[ 5 ] 259576618 mem[ 6 ] 229188661 mem[ 7 ] 0 registers: reg[ 0 ] 0 reg[ 1 ] 0 reg[ 2 ] 259576618 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 IREG 0 BREG 0 flags: CF 0 end state @@@ state: pc 2 memory: mem[ 0 ] 76546053 mem[ 1 ] 77070342 mem[ 2 ] 43646977 mem[ 3 ] 80216071 mem[ 4 ] 25165824 mem[ 5 ] 259576618 mem[ 6 ] 229188661 mem[ 7 ] 0 registers: reg[ 0 ] 0 reg[ 1 ] 0 reg[ 2 ] 259576618 reg[ 3 ] 229188661 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 IREG 0 BREG 0 flags: CF 0 end state @@@ state: pc 3 memory: mem[ 0 ] 76546053 mem[ 1 ] 77070342 mem[ 2 ] 43646977 mem[ 3 ] 80216071 mem[ 4 ] 25165824 mem[ 5 ] 259576618 mem[ 6 ] 229188661 mem[ 7 ] 0 registers: reg[ 0 ] 0 reg[ 1 ] 47314719 reg[ 2 ] 259576618 reg[ 3 ] 229188661 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 IREG 0 BREG 0 flags: CF 0 end state @@@ state: pc 4 memory: mem[ 0 ] 76546053 mem[ 1 ] 77070342 mem[ 2 ] 43646977 mem[ 3 ] 80216071 mem[ 4 ] 25165824 mem[ 5 ] 259576618 mem[ 6 ] 229188661 mem[ 7 ] 47314719 registers: reg[ 0 ] 0 reg[ 1 ] 47314719 reg[ 2 ] 259576618 reg[ 3 ] 229188661 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 IREG 0 BREG 0 flags: CF 0 end state machine halted total of 5 instructions executed final state of machine: @@@ state: pc 5 memory: mem[ 0 ] 76546053 mem[ 1 ] 77070342 mem[ 2 ] 43646977 mem[ 3 ] 80216071 mem[ 4 ] 25165824 mem[ 5 ] 259576618 mem[ 6 ] 229188661 mem[ 7 ] 47314719 registers: reg[ 0 ] 0 reg[ 1 ] 47314719 reg[ 2 ] 259576618 reg[ 3 ] 229188661 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 IREG 0 BREG 0 flags: CF 0 end state Шістнадцяткове число FD74 A32D зсунути за допомогою логічного зсуву на 4 позиції вліво. Програма на даному асемблері не може містити шістнадцяткових чисел тому потрібно перевести в десяткове. FD74 A32D = 1111 1101 0111 0100 1010 0011 0010 1101 Так як число відємне інвертую і додаю 1: 0000 0010 1000 1011 0101 1100 1101 0011 = -42687699 Результат -683003184 = 1101 0111 0100 1010 0011 0010 1101 1101 0000 = D74A 32D0 2.as load 1 X завантажити в рег.1 число за міткою Х load 2 N завантажити в рег.2 число за міткою N shl 1 2 1 логічний зсув вліво регістра 1 halt X .fill -42687699 N .fill 4 2.txt memory[0]=76021764 memory[1]=76546053 memory[2]=46792705 memory[3]=25165824 memory[4]=-42687699 memory[5]=4 @@@ state: pc 0 memory: mem[ 0 ] 76021764 mem[ 1 ] 76546053 mem[ 2 ] 46792705 mem[ 3 ] 25165824 mem[ 4 ] -42687699 mem[ 5 ] 4 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 IREG 0 BREG 0 flags: CF 0 end state @@@ state: pc 1 memory: mem[ 0 ] 76021764 mem[ 1 ] 76546053 mem[ 2 ] 46792705 mem[ 3 ] 25165824 mem[ 4 ] -42687699 mem[ 5 ] 4 registers: reg[ 0 ] 0 reg[ 1 ] -42687699 reg[ 2 ] 0 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 IREG 0 BREG 0 flags: CF 0 end state @@@ state: pc 2 memory: mem[ 0 ] 76021764 mem[ 1 ] 76546053 mem[ 2 ] 46792705 mem[ 3 ] 25165824 mem[ 4 ] -42687699 mem[ 5 ] 4 registers: reg[ 0 ] 0 reg[ 1 ] -42687699 reg[ 2 ] 4 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 IREG 0 BREG 0 flags: CF 0 end state @@@ state: pc 3 memory: mem[ 0 ] 76021764 mem[ 1 ] 76546053 mem[ 2 ] 46792705 mem[ 3 ] 25165824 mem[ 4 ] -42687699 mem[ 5 ] 4 registers: reg[ 0 ] 0 reg[ 1 ] -683003184 reg[ 2 ] 4 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 IREG 0 BREG 0 flags: CF 0 end state machine halted total of 4 instructions executed final state of machine: @@@ state: pc 4 memory: mem[ 0 ] 76021764 mem[ 1 ] 76546053 mem[ 2 ] 46792705 mem[ 3 ] 25165824
Антиботан аватар за замовчуванням

14.04.2013 01:04-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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