Архитектура микропроцессора i8086

Автор работы: Пользователь скрыл имя, 18 Декабря 2013 в 20:29, практическая работа

Краткое описание

Шестнадцатіразрядное арифметико - логічний пристрій (АЛП ), що входить в апаратні засоби І Б, стежить за прапорцями стану і керуючими прапорцями ЦП, маніпулює регістрами загального призначення ( РОН ) і виконує різні дії над операндами команд. Для швидкого здійснення внутрішніх пересилань регістри ІБ і лінії даних зроблені 16 - розрядними.
Виконавчий блок не має з'єднання з системною шиною, а адресовані йому команди отримує з черги, що обслуговується БІШ. Всякий раз, коли деяка команда вимагає звернення до пам'яті або певному УВВ, виконавчий блок формує запит до БІШ на отримання або запам'ятовування даних. Хоча при цьому ІБ маніпулює тільки 16 - розрядними адресами, БІШ здатний виконувати переадресацію і забезпечувати таким чином доступ ІБ до всього мегабайтную простору адрес.

Содержание

РЕФЕРАТ…………………………………………………………………………..….
1. ТЕОРЕТИЧНА ЧАСТИНА……………………………………………………..….
1.1 АРХИТЕКТУРА МИКРОПРОЦЕССОРА i8086……………….…………..
1.2 МОВА АССЕМБЛЕРА………………………………………………………
1.2.1 Зміст мови ……………...………………………………...……………..
1.2.2 Переваги та недоліки…………………………………...………………
1.2.2.1 Переваги………………………………………...……………..…
1.2.2.2 Недоліки…………………………………………………………
1.2.3 Застосування ………………………………………..….………………
1.2.4 Зв'язування програм на різних мовах ……………….….…………….
1.2.5 Набір команд ……………………………………………...……………
1.2.6 Інструкції……………………………………….…….…...…………….
1.2.7 Директиви………………………………………...…….……………….
1.2.8 Приклад програми ……………………………...….…………………..
2. РОЗРАХУНКОВА ЧАСТИНА……….…………..…..……...….……….………...
2.1 Вхідні данні…………………………………………………………………..
2.2 Блок схема…………………………………………….…….….….…………
2.3 Лістінг програми згідно з варіантом ……..………….….……….…………
2.4 Скриншоти програми…………..……………..………….……….…………
ВИСНОВКИ………….……………….……………………………………….………
ПЕРЕЛІК ПОСИЛАНЬ………………..……………………………………………...

Прикрепленные файлы: 1 файл

RGZ.doc

— 260.50 Кб (Скачать документ)

 

В силу машинної орієнтації ( «низького» рівня) мови асемблера людині складніше  читати і розуміти програму на ньому  у порівнянні з мовами програмування  високого рівня ; програма складається  з надто «дрібних» елементів - машинних команд, відповідно, ускладнюються програмування та налагодження, ростуть трудомісткість і ймовірність внесення помилок.

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

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

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

Відсутня переносимість програм на комп'ютери з іншою архітектурою і системою команд.

 

      1. Застосування 

 

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

На мові асемблера пишуть програми або їх фрагменти в тих випадках, коли критично важливі:

  • швидкодія (драйвери, ігри) ;
  • обсяг використовуваної пам'яті ( завантажувальні сектори, вбудовуване (англ. embedded ) програмне забезпечення, програми для мікроконтролерів і процесорів з обмеженими ресурсами, віруси, програмні захисту ).

З використанням програмування  мовою асемблера виробляються :

  • Оптимізація критичних до швидкості ділянок програм у програмах на мовах високого рівня, таких як C + + або Pascal. Це особливо актуально для ігрових приставок, мають фіксовану продуктивність, і для мультимедійних кодеків, які прагнуть робити менш ресурсоємними і швидшими.
  • Створення операційних систем (ОС ) або їх компонентів. В даний час переважна більшість ОС пишуть на більш високорівневих мовах (в основному на Си - мові високого рівня, який спеціально був створений для написання однієї з перших версій UNIX). Апаратно залежні ділянки коду, такі як завантажувач ОС, рівень абстрагування від апаратного забезпечення ( hardware abstraction layer ) і ядро, часто пишуться на мові асемблера. Фактично, ассемблерного коду в ядрах Windows або Linux зовсім небагато, оскільки автори прагнуть забезпечити переносимість і надійність, але, тим не менш, він там присутня. Деякі аматорські ОС, такі як MenuetOS і KolibriOS, цілком написані на мові асемблера. При цьому MenuetOS поміщається на дискету і містить графічний інтерфейс.
  • Програмування мікроконтролерів ( МК ) і інших вбудованих процесорів. На думку професора Таненбаума, розвиток МК повторює історичний розвиток комп'ютерів новітнього часу. Зараз (2013 р.) для програмування МК вельми часто застосовують мова асемблера (хоча і в цій області широке поширення отримують мови начебто Сі ). У МК доводиться переміщати окремі байти і біти між різними осередками пам'яті. Програмування МК вельми важливо, так як, на думку Таненбаума, в автомобілі і квартирі сучасної цивілізованої людини в середньому міститься 50 мікроконтролерів.
  • Створення драйверів. Драйвери (або їх деякі програмні модулі ) програмують на мові асемблера. Хоча, в даний час, драйвери також прагнуть писати на мовах високого рівня ( на високорівневої мові багато простіше написати надійний драйвер), у зв'язку з підвищеними вимогами до надійності, і достатньою продуктивністю сучасних процесорів (швидкодія забезпечує тимчасове узгодження процесів в пристрої і процесорі ) і достатнім досконалістю компіляторів з мов високого рівня ( відсутність непотрібних пересилань даних в сгенерированном коді), переважна частина сучасних драйверів пишеться мовою асемблера. Надійність для драйверів відіграє особливу роль, оскільки в Windows NT і UNIX (у тому числі в Linux ) драйвери працюють в режимі ядра системи. Одна тонка помилка в драйвері може привести до краху всієї системи.
  • Створення антивірусів та інших захисних програм.
  • Написання трансляторів мов програмування.

 

      1. Зв'язування програм на різних мовах 

 

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

На етапі компіляції - вставка у вихідний код програми на мові високого рівня асемблерних  фрагментів ( англ. inline assembler ) за допомогою  спеціальних директив мови. Спосіб зручний для нескладних перетворень даних, але повноцінного ассемблерного коду, з даними і підпрограмами, включаючи підпрограми з безліччю входів і виходів, які не підтримуються мовою високого рівня, з його допомогою зробити неможливо.

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

 

      1. Набір команд

 

Типовими командами  мови асемблера є (більшість прикладів  дано для Intel - синтаксису архітектури x86) :

  • Команди пересилання даних ( mov та ін )
  • Арифметичні команди ( add, sub, imul та ін )
  • Логічні та побітові операції ( or, and, xor, shr та ін )
  • Команди управління ходом виконання програми ( jmp, loop, ret та ін )
  • Команди виклику переривань (іноді відносять до команд управління) : int
  • Команди введення -виведення в порти ( in, out ).

Для мікроконтролерів і  мікрокомп'ютерів характерні також команди, що виконують перевірку і перехід по умові, наприклад :

  • cjne - перейти, якщо не дорівнює
  • djnz - декрементіровать, і якщо результат ненульовий, то перейти
  • cfsneq - порівняти, і якщо не дорівнює, пропустити наступну команду

 

      1. Інструкції

 

Типовий формат запису команд :

[позначка : ] мнемокод [ операнди ] [ ; коментар ]

де мнемокод - безпосередньо  мнемоніка інструкції процесору. До неї можуть бути додані префікси ( повторення, зміни типу адресації та ін.)

Як операнди можуть виступати  константи, адреси регістрів, адреси в оперативній пам'яті і пр. Відмінності між синтаксисом Intel і AT & T стосуються в основному порядку перерахування операндів і вказівки різних методів адресації.

Використовувані мнемоніки  зазвичай однакові для всіх процесорів однієї архітектури або сімейства архітектур (серед широко відомих - мнемоніки процесорів і контролерів x86, ARM, SPARC, PowerPC, M68k ). Вони описуються в специфікації процесорів. Можливі винятки:

якщо асемблер використовує багатоплатформовий AT & T- синтаксис (оригінальні мнемоніки наводяться до синтаксису AT & T) ;

якщо спочатку існувало два стандарти запису мнемоник (система  команд була успадкованою від процесора  іншого виробника ).

Наприклад, процесор Zilog Z80 успадковував систему команд Intel 8080, розширив її і поміняв мнемоніки (і позначення регістрів ) на свій лад. Процесори Motorola Fireball успадковували систему команд Z80, наскільки її урізавши. Разом з тим, Motorola офіційно повернулася до мнемоников Intel і в даний момент половина ассемблеров для Fireball працює з мнемониками Intel, а половина - з мнемониками Zilog.

 

      1. Директиви

 

Програма на мові асемблера  може містити директиви : інструкції, не переводяться безпосередньо в  машинні команди, а керують роботою компілятора. Набір і синтаксис їх значно різняться і залежать не від апаратної платформи, а від використовуваного транслятора ( породжуючи діалекти мов в межах одного сімейства архітектур ). У якості « джентльменського набору» директив можна виділити наступні:

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

 

      1. Приклад програми

 

Приклади програми Hello, world! для міросот Windows на діалекті МАSМ

 

.386

.model flat, stdcall

option casemap:none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

includelib \masm32\lib\kernel32.lib

 

.data

        msg db "Hello, world", 13, 10

        len equ $-msg

 

.data?

        written dd ?

 

.code

start:

        push    -11

        call    GetStdHandle

       push    0

        push    OFFSET written

        push    len

        push    OFFSET msg

        push    eax

        call    WriteFile

        push    0

        call    ExitProcess

 end start

 

2. ПРАКТИЧНА ЧАСТИНА

 

 

2.1 Вхідні данні

 

Згідно з варіантом  завдання отримав математичний вираз:

А, В, С – цілі числа, з діапазоном значень [0…999]

 

2.2 Блок схема програми:

begin


 

Input A

Input B


 

Число ® код


 

Збереження у регистрі


Виконання математичного виразу




 

Збереження відповіді  у регистрі




 

Код ® число




 

Вивід відповіді у  десятеричній с.ч. на екран




 

Затримка




 

end




 

 

 

 2.3 Лістінг програми згідно з варіантом:

 

.286

.model   small

.stack 100h

.data

A dw ?

B dw ?

mess1 db "Input number A: $"

mess2 db 10,13,"Input number B: $"

mess3 db "Result : ",'$'

F   dd  ?

.code

  mov A,bx

  mov B,bx

;Функция ввода числа

input PROC

next: 

   mov ah,01h 

   int 21h 

   cmp al,2fh 

   jl output 

   sub al,30h 

   xor ah,ah 

   xchg ax,bx 

   mov dx,0Ah 

   mul dx 

   add bx,ax 

   jmp next

output: 

   ret

input ENDP 

 

 

 

start:   

   mov ax,@data 

   mov ds,ax 

   ;---------------------------------------------------------------------------  

   ; F = 5 * ( ((5*5-B) + 4 * A) + ((6*6-B) + 4 * A) + ((7*7-B) + 4 * A) + ((8*8-B) + 4 * A) + ((9*9-B) + 4 * A) + ((10*10-B) + 4 * A) )   

    ;Вывод строки mess1 на экран 

   mov ah,09 

   lea dx,mess1 

   int 21h 

   ;Ввод числа X 

   call input 

   ;Вывод строки mess2 на экран 

   mov ah,09 

   lea dx,mess2 

   int 21h 

   ;Ввод числа Y 

   call input

 

 

    ;---------------------------------------------------------------------------  

   mov dx,1 

   mov ax,2563h 

   sub ax,78  

   sbb dx,0 

       div X  

   mov cx,ax 

   mov ax,2852 

   mul Y      

       add ax,cx   

       adc dx,0 

   mov word ptr F,ax  

   mov word ptr F+2,dx 

   ;---------------------------------------------------------------------------  

   ;Вывод строки mess3 на экран 

   mov ah,09 

   lea dx,mess3 

   int 21h 

    

   ;Вывод F на экран 

   mov ah,09 

   lea dx,F 

   int 21h 

        

   mov ah,4Ch 

   int 21h

end start

 

 

 

2.4 Скриншоти програми

 

Рисунок 2.4.1 – commander

 

Рисунок 2.4.2 – стєк

Рисунок 2.4.3 – отримання .exe файла

 

Рисунок 2.4.4 – ввід деяких цілих чисел 
ВИСНОВКИ

 

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

В даному розрахунково-графічному завданні розробив програму підрахунку математичного виразу згідно з варіантом. Отримав .odj та .exe файли. У відладчику CV провів перевірку програми.

 

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

 

    1. Галісеев Г. В. Асемблер для Win 32. Самовчитель. - М. : Діалектика, 2007. - 368 с. - ISBN 978-5-8459-1197-1
    2. Зубков С. В. Асемблер для DOS, Windows і UNIX. - М. ДМК Прес ; СПб. Пітер, 2006. - 608 с. - ISBN 5-94074-259-9
    3. Кіп Ірвін. Мова асемблера для процесорів Intel = Assembly Language for Intel - Based Computers. - М. : Вільямс, 2005. - 912 с. - ISBN 0-13-091013-9
    4. Калашников О. А. Асемблер ? Це просто! Вчимося програмувати. - СПб. : БХВ -Петербург, 2007. - 384 с. - ISBN 978-5-94157-709-5
    5. Кріс Касперски. Мистецтво дизассемблирования. - СПб. : БХВ -Петербург, 2008. - 896 с. - ISBN 978-5-9775-0082-1
    6. Владислав Пирогов. Асемблер для Windows. - СПб. : БХВ -Петербург, 2007. - 896 с. - ISBN 978-5-9775-0084-5
    7. Владислав Пирогов. Асемблер і дизасемблювання. - СПб. : БХВ -Петербург, 2006. - 464 с. - ISBN 5-94157-677-3
    8. Річард Саймон. Microsoft Windows API Довідник системного програміста.
    9. Фрунзе А. В. Мікроконтролери ? Це ж просто! - Т. 1.
    10. Юров В., Хорошенко С. Assembler : навчальний курс. - СПб. : Питер, 1999. - С. 672. - ISBN 5-314-00047-4
    11. Аблязов Р. З. Програмування на асемблері на платформі х86 -64. - М. : ДМК Пресс, 2011. - С. 304. - ISBN 978-5-94074-676-8
    12. Юрич Д., Введення в reverse engineering для початківців. http://yurichev.com/writings/RE_for_beginners-ru.pdf

Информация о работе Архитектура микропроцессора i8086