Автор работы: Пользователь скрыл имя, 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 Скриншоти програми…………..……………..………….……….…………
ВИСНОВКИ………….……………….……………………………………….………
ПЕРЕЛІК ПОСИЛАНЬ………………..……………………………………………...
В силу машинної орієнтації ( «низького» рівня) мови асемблера людині складніше читати і розуміти програму на ньому у порівнянні з мовами програмування високого рівня ; програма складається з надто «дрібних» елементів - машинних команд, відповідно, ускладнюються програмування та налагодження, ростуть трудомісткість і ймовірність внесення помилок.
Потрібна підвищена кваліфікація програміста для отримання якісного коду : код, написаний середнім програмістом на мові асемблера, звичайно виявляється не краще або навіть гірше коду, породжуваного компілятором з оптимізацією для порівнянних програм, написаних мовою високого рівня.
Програма мовою високого рівня може бути перекомпілювати з автоматичною оптимізацією під особливості нової цільової платформи, програма ж мовою асемблера на новій платформі може втратити свою перевагу в швидкості без ручного переписування коду.
Як правило, менша кількість доступних бібліотек в порівнянні з сучасними індустріальними мовами програмування.
Відсутня переносимість програм на комп'ютери з іншою архітектурою і системою команд.
Історично, якщо першим поколінням мов програмування вважати машинні коди, то мова асемблера можна розглядати як друге покоління мов програмування. Недоліки мови асемблера, складність розробки на ньому великих програмних комплексів привели до появи мов третього покоління - мов програмування високого рівня (таких як Фортран, Лісп, Кобол, Паскаль, Сі та ін.) Саме мови програмування високого рівня та їх спадкоємці в основному використовуються в даний час в індустрії інформаційних технологій. Однак, мови асемблера зберігають свою нішу, обумовлену їх унікальними перевагами в частині ефективності і можливості повного використання специфічних засобів конкретної платформи.
На мові асемблера пишуть програми або їх фрагменти в тих випадках, коли критично важливі:
З використанням програмування мовою асемблера виробляються :
Оскільки вже давно на мові асемблера часто кодують тільки фрагменти програм, їх необхідно пов'язувати з іншими частинами програмної системи, написаними на інших мовах програмування. Це досягається двома основними способами:
На етапі компіляції - вставка у вихідний код програми на мові високого рівня асемблерних фрагментів ( англ. inline assembler ) за допомогою спеціальних директив мови. Спосіб зручний для нескладних перетворень даних, але повноцінного ассемблерного коду, з даними і підпрограмами, включаючи підпрограми з безліччю входів і виходів, які не підтримуються мовою високого рівня, з його допомогою зробити неможливо.
На етапі компонування при роздільній компіляції. Для взаємодії компонованих модулів достатньо, щоб імпортовані функції (визначені в одних модулях і використовувані в інших ) підтримували певний угоди виклику ( англ. calling conventions ). Написані ж окремі модулі можуть бути на будь-яких мовах, в тому числі і на мові асемблера.
Типовими командами мови асемблера є (більшість прикладів дано для Intel - синтаксису архітектури x86) :
Для мікроконтролерів і мікрокомп'ютерів характерні також команди, що виконують перевірку і перехід по умові, наприклад :
Типовий формат запису команд :
[позначка : ] мнемокод [ операнди ] [ ; коментар ]
де мнемокод - безпосередньо мнемоніка інструкції процесору. До неї можуть бути додані префікси ( повторення, зміни типу адресації та ін.)
Як операнди можуть виступати константи, адреси регістрів, адреси в оперативній пам'яті і пр. Відмінності між синтаксисом Intel і AT & T стосуються в основному порядку перерахування операндів і вказівки різних методів адресації.
Використовувані мнемоніки зазвичай однакові для всіх процесорів однієї архітектури або сімейства архітектур (серед широко відомих - мнемоніки процесорів і контролерів x86, ARM, SPARC, PowerPC, M68k ). Вони описуються в специфікації процесорів. Можливі винятки:
якщо асемблер використовує багатоплатформовий AT & T- синтаксис (оригінальні мнемоніки наводяться до синтаксису AT & T) ;
якщо спочатку існувало два стандарти запису мнемоник (система команд була успадкованою від процесора іншого виробника ).
Наприклад, процесор Zilog Z80 успадковував систему команд Intel 8080, розширив її і поміняв мнемоніки (і позначення регістрів ) на свій лад. Процесори Motorola Fireball успадковували систему команд Z80, наскільки її урізавши. Разом з тим, Motorola офіційно повернулася до мнемоников Intel і в даний момент половина ассемблеров для Fireball працює з мнемониками Intel, а половина - з мнемониками Zilog.
Програма на мові асемблера може містити директиви : інструкції, не переводяться безпосередньо в машинні команди, а керують роботою компілятора. Набір і синтаксис їх значно різняться і залежать не від апаратної платформи, а від використовуваного транслятора ( породжуючи діалекти мов в межах одного сімейства архітектур ). У якості « джентльменського набору» директив можна виділити наступні:
Приклади програми 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 провів перевірку програми.
ПЕРЕЛІК ПОСИЛАНЬ