Програмування розрахункових задач мовою Assembler

Створення і заповнення масиву з 15 перших додатних чисел, кратних трьом. Кодування символьної та логічної інформації, стандарт кодування символів. Емуляція і відображення роботи програмного коду. Формати, кодування і опис команд, застосованих у програмі.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 15.10.2017
Размер файла 421,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ПОЛТАВСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

ІМЕНІ ЮРІЯ КОНДРАТЮКА

кафедра комп'ютерної інженерії

Курсова робота з дисципліни

«Обчислювальна техніка та мікропроцесори»

«Програмування розрахункових задач мовою Assembler»

Полтава 2015

ЗМІСТ

ВСТУП

1. ЗАВДАННЯ

2. ТЕОРЕТИЧНЕ ПИТАННЯ КУРСОВОЇ РОБОТИ

3. АЛГОРИТМ РОЗВ'ЯЗАННЯ

4. ТЕКСТ (ЛІСТИНГ) ПРОГРАМИ МОВОЮ ASSEMBLER

5. РЕЗУЛЬТАТИ ВИКОНАННЯ

6. ФОРМАТИ, КОДУВАННЯ ТА ОПИС КОМАНД, ЩО ЗАСТОСОВУВАЛИСЯ В ПРОГРАМІ

ВИСНОВОК

ВСТУП

Мова низького рівня Assembler є основою для вивчення складніших мов програмування, так званих вищих.

Слід розрізняти поняття мови асемблеру і власне асемблери. Мовою асемблеру прийнято називати машинно-орієнтовану мову низького рівня (хоча і більш високого, ніж машинний код). Мова асемблеру має такі характерні особливості:

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

* на відміну від машинного коду, в мові асемблеру використовуються символічні позначення команд. Це робить програми, написані мовою асемблеру, придатними для сприйняття людиною, а сам процес програмування - більш простим і більш захищеним від помилок.

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

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

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

* ефективність. Компілятори з мов високого рівня не завжди генерують код, що є раціональним з точки зору швидкодії або використання пам'яті. Якщо програму зразу написати мовою асемблера, вона може стати значно більш ефективною;

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

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

Emu8086 поєднує в собі редактор вихідного коду, асемблер, дізассемблер, програмний емулятор (віртуальний ПК) з відладчиком і покрокове виконання. Ця програма компілює вихідний код і виконує його за допомогою емулятора крок за кроком. Візуальний інтерфейс дуже простий в роботі, адже можна спостерігати регістри, прапори і пам'ять під час виконання програми. Арифметико-логічний пристрій (АЛП) показує внутрішню роботу центрального процесора (CPU).

Машинний код 8086 повністю сумісний з усіма наступними за ним поколіннями мікропроцесорів Intel. Це робить код 8086 дуже привабливим, тому що він виконується як на старих, так і на сучасних комп'ютерних системах. Іншою перевагою є те, що набір команд 8086 порівняно невеликий, і тому вивчити його буде легше.

1. ЗАВДАННЯ

Варіант 8

Теоретичне питання КР:

Двійкове кодування десяткових чисел.

Скласти алгоритм і програму, яка виконує:

1. Створення та заповнення масиву з 15 перших додатних чисел, кратних трьом.

2. Обчислення та виведення на екран середнього арифметичного всіх непарних чисел - елементів цього масиву.

3. Виведення результатів на екран.

2. Двійкове кодування десяткових чисел.

кодування програма інформація код

Двійково-кодоване десяткове число - це десяткове число, кожна цифра якого представлена в двійковій формі. BCD - Binary Coded Decimal - двійково-десятковий код (інша назва - код 8421). Кожна цифра кодується 4-розрядним двійковим кодом. Коли використовується байт, старші чотири біти називають зоною, а молодші - цифрою. Зона використовується для подання знаку, який може мати одне з трьох значень.

Цифра

0

1

2

3

4

5

6

7

8

9

BCD

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

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

Зонній формат використовується в операціях введення-виведення та для виконання множення та ділення. Упакований формат використовується для виконання додавання та віднімання чисел, та для виконання логічних операцій.

З підвищенням надійності комп'ютерів важливість біта парності знизилась, тому на початку 80-х років його стали використовувати для розширення набору кодованих символів в межах від 12810 до 25510 (наприклад, для кодування математичних символів або символів інших мов).

Кодування символьної та логічної інформації. Стандарт кодування символів

Американський стандартний код інформаційного обміну ASCII

До символьної інформації відносяться букви, цифри, спеціальні знаки. Кожному символу ставиться в відповідність двійковий однобайтовий код. Він визначає коди для 32 символів керування, 10 цифр, 52 букв (великі та маленькі літери англійського алфавіту), 32 спеціальних символів, а також для символу інтервалу. Старший 8-й біт було введено для забезпечення перевірки на парність. Цій біт дозволяє виявляти однократні помилки при передачі даних.

.0

.1

.2

.3

.4

.5

.6

.7

.8

.9

.A

.B

.C

.D

.E

.F

0.

NUL

SOH

STX

ETX

EOT

ENQ

ACK

BEL

BS

TAB

LF

VT

FF

CR

SO

SI

1.

DLE

DC1

DC2

DC3

DC4

NAK

SYN

ETB

CAN

EM

SUB

ESC

FS

GS

RS

US

2.

!

"

#

$

%

&

'

(

)

*

+

,

--

.

/

3.

0

1

2

3

4

5

6

7

8

9

:

;

<

=

>

?

4.

@

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

5.

P

Q

R

S

T

U

V

W

X

Y

Z

[

\

]

^

_

6.

`

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

7.

p

q

r

s

t

u

v

w

x

y

z

{

|

}

~

DEL

Unicode

Unicode - це 16-розрядний алфавіт, сумісний з ASCII та погоджений з міжнародним алфавітом ISO/IEC 10646-1. Оскільки 16-ма розрядами можна закодувати 64К символів, цього достатньо для кодування всіх букв алфавітів народів світу.

Тип символу

Опис набору символів

Кількість символів

Шістнадцяткові значення символів

Алфавіти

Латинський, кирилиця, грецький і т.д.

8192

Від 0000 до 1FFF

Символи

Графічні мітки, математичні символи і т.д.

4096

Від 2000 до 2FFF

CJK

Китайські, японські і корейські символи

4096

Від 3000 до 3FFF

Han

Уніфіковані китайські, японські і корейські символи

40960

Від 4000 до 4FFF

Розширення чи надлишок від Han

4096

Від E000 до EFFF

Вказані користувачем

4096

Від F000 до FFFF

Символьна інформація об'єднується в рядки (символьні або текстові). Максимальна довжина рядку складає 232 байт = 4 Гбайти.

Кодування бітових полів

Бітові поля призначені для запису логічних змінних. Вони мають довжину від 1 до 32 бітів. Кожний розряд формату призначений для подання однієї логічної змінної

3. АЛГОРИТМ РОЗВ'ЯЗАННЯ

4. ТЕКСТ(ЛІСТИНГ) ПРОГРАМИ МОВОЮ ASSEMBLER

#MAKE_EXE#

include 'emu8086.inc'

.stack 256

.data

n equ 15 ;'Кількість елементів масиву'

x dw n

s dw 0 ;'Сума елементів масиву'

sa dw 0 ;'Середне арифметичне елементів масиву'

.code

MOV AX, @data

MOV DS, AX

xor BX,BX

mov CX,n ;'Завантаження лічильника'

push CX

mov DX,0

mov SI,BX ;'Обнуління індексного регістра'

Cycl: mov x[SI],DX ;'Xі=DX'

add SI,2 ;'Збільшення індексу на 2'

add DX,3

loop Cycl ;'Перехід на початок циклу'

PRINT ' - Масив Х:'

mov BL,0

xor SI,SI

mov CX,n

Cycl1: mov AX,x[SI] ;'АХ=Xі'

add SI,2 ;'Збільшення індексу на 2'

GOTOXY BL,1

add BL,3

CALL print_num

loop Cycl1

GOTOXY 1,5

PRINT ' - Сума = '

mov AX,0

xor SI,SI

mov CX,n

m1: add AX,x[SI] ;'АХ=Xі'

add SI,2 ;'Збільшення індексу на 2'

loop m1

GOTOXY 15,5

CALL print_num

GOTOXY 1,6

PRINT ' -Середне арифметичне непарних елментів масиву = '

mov AX,0

mov SI,2

mov CX,7

m2: add AX,x[SI] ;'АХ=Xі'

add SI,4 ;'Збільшення індексу на 4'

loop m2

MOV BL, 7

DIV BL

GOTOXY 55,6

CALL print_num

HLT

DEFINE_PRINT_NUM

DEFINE_PRINT_NUM_UNS

5. РЕЗУЛЬТАТИ ВИКОНАННЯ

Емуляція та відображення роботи програмного коду:

6. ФОРМАТИ, КОДУВАННЯ ТА ОПИС КОМАНД, ЩО ЗАСТОСОВУВАЛИСЯ В ПРОГРАМІ

1. MOV - пересилання даних

Дія команди

1 - й байт

2 - й байт

Hex

Binary

Binary

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Регістр/пам'ять/з регістру

1

0

0

0

1

0

d

W

Mod

reg

R/m

Дані в регістр/пам'ять

1

1

0

0

0

1

1

W

mod

000

r/m

Дані в регістр

1

0

1

1

W

Reg

Пам'ять в акумулятор

1

0

1

0

0

0

0

W

Акумулятор пам'ять

1

0

1

0

0

0

1

W

Регістр/пам'ять в сегмент.

регістр

8E

1

0

0

0

1

1

1

0

Mod

0

Re g

R/m

Сегмент. регістр в регістр/пам'ять

8C

1

0

0

0

1

1

0

0

mod

0

Re g

r/m

2. PUSH -- завантаження в стек

Дія команди

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Регістр/пам'ять

1

1

1

1

1

1

1

1

mod

1

1

0

r/m

Регістр

0

1

0

1

0

Reg

Сегментний регістр

0

0

0

Reg

1

1

0

3. ADD --додавання

1-й байт

2-й байт

Дія команди

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Регістр/пам'ять з регістром

0

0

0

0

0

0

D

w

mod

Reg

r/m

Дані з регістром/пам?ятю

1

0

0

0

0

0

S

w

mod

000

r/m

Дані з акумулятором

0

0

0

1

0

1

0

w

4. CMP --порівняння

Дія команди

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Регістр/пам'ять з регістром

0

0

1

1

1

0

d

w

mod

reg

r/m

Дані з регістром/пам?ятю

1

0

0

0

0

0

s

w

mo d

1

1

1

R/m

Дані з акумулятором

0

0

1

1

1

1

0

w

7. POP -- витяг з стека

Дія команди

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

В регістр/пам?ять

1

0

0

0

1

1

1

1

mod

1

1

0

r/m

В регістр

0

1

0

1

1

Reg

В сегментний регістр

0

0

0

Reg

1

1

1

8. LOOP - Команды для организации циклов (SHORT ADDRESS)

Дія команди

Hex

7

6

5

4

3

2

1

0

LOOP --декремент СХ и перехід, якщо СХ?0 (кінець цикла, якщо СХ=0)

E2

1

1

1

0

0

0

1

0

9. HLT - команди управління станом мікропроцесора

Дія команди

Hex

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

XOR --виключальне «АБО» (додавання за модулем 2)

Дія команди

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Регістр /пам?ять с регістром

0

0

1

1

0

0

d

w

mod

reg

r/m

Дані с регістром /пам?ятю

1

0

0

0

0

0

s

w

mod

1

1

0

R/m

Дані з акумулятором

0

0

1

1

0

1

0

w

INC --увеличение

Дія команди

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Регістр/пам?ять

1

1

1

1

1

1

1

w

mod

0

0

0

r/m

Регістр

0

1

0

0

0

Reg

SUB --віднімання

Дія команди

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Регістр/пам?ять с регістром

0

0

1

0

1

0

d

w

mo d

reg

r/m

Дані з регістром/пам?ятю

1

0

0

0

0

0

s

w

mo d

1

0

1

R/m

Дані з акумулятором

0

0

1

0

1

1

0

w

jmp - Безумовний перехід

Дія команди

He x

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

JMP NEAR Addr IP - Прямий близький

E9

1

1

1

0

1

0

0

1

JMP NEAR Reg/Mem - Косвений близький

FF

1

1

1

1

1

1

1

1

mod

1

0

0

R/m

JMP AddrCS:IP - Прямий далекий

EA

1

1

1

0

1

0

1

0

JMP FAR Mem - Косвений далекий

FF

1

1

1

1

1

1

1

1

mod

1

0

1

R/m

JMP SHORT Addr IP - Короткий

EB

1

1

1

0

1

0

1

1

TEST --установлення прапорів по логічному «І»

Дія команди

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Регістр/пам?ять з регістром

1

0

1

0

1

0

d

w

mod

reg

r/m

Дані з регістром/пам?ятю

1

1

1

1

0

1

s

w

mod

0

0

0

R/m

Дані з акумулятором

1

0

1

0

1

0

0

w

Команди умовного переходу (SHORT ADDRESS)

Дія команди

Hex

7

6

5

4

3

2

1

0

JE/JZ --перехід при [=]

74

0

1

1

1

0

1

0

0

JL/JNGE --перехід при [<]

7C

0

1

1

1

1

1

0

0

JLE/JNG --перехід при [?]

7E

0

1

1

1

1

1

1

0

JB/JNAE --перехід при [<] без знака

72

0

1

1

1

0

0

1

0

JBE/JNA --перехід при [?] без знака

76

0

1

1

1

0

1

1

0

JP/JPE --перехід при парному числі «1»

7A

0

1

1

1

1

0

1

0

JO --перехід при арифм. переповнені

70

0

1

1

1

0

0

0

0

JS --перехід при знаке [-]

78

0

1

1

1

1

0

0

0

JNE/JNZ --перехід при [?]

75

0

1

1

1

0

1

0

1

JNL/JGE --перехід при [?]

7D

0

1

1

1

1

1

0

0

JNLE/JG --перехід при [>]

7F

0

1

1

1

1

1

1

0

JNB/JAE --перехід при [?] без знака

73

0

1

1

1

0

0

1

0

JNBE/JA --перехід при [>] без знака

77

0

1

1

1

0

1

1

0

JNP/JPO -- перехід при непар. числі «1»

7B

0

1

1

1

1

0

1

0

JNO -- перехід при аріф. непереполнен.

71

0

1

1

1

0

0

0

0

JNS -- перехід при знаку [+]

79

0

1

1

1

1

0

0

0

Ret-Повернення із підпрограми

Дія команди

Hex

7

6

5

4

3

2

1

0

RETN - Близький

? близький

? закриття

C3

1

1

0

0

0

0

1

1

RETN Disp - Близкий з корекцією SP

C2

1

1

0

0

0

0

1

0

ВИСНОВОК

У даній розрахунково-графічній роботі було виконано завдання за варіантом 8 - створення масиву з 15 чисел кратних 3 та розрахунок середнього арифметичного непарних чисел за рахунок складання програми мовою Assembler. Емуляція програми та виведення результату на екран довели, що задача вирішена правильно.

В процесі роботи програми використовувалися підпрограми переривань та спостерігали, за зміною вмісту програмно видимих регістрів, станом АЛП і т.і., що дозволяє зрозуміти архітектуру мікропроцесора та особливості його системи команд.

ЛІТЕРАТУРА

1. Юров В.И. Assembler. Учебник для вузов. 2-е изд. СПб.: Питер, 2003.

2. Зубков С.В. Assembler для DOS, Windows и Unix. М.: ДМК Пресс, 2000.

3. Митницкий В.Я. Архитектура IBM PC и язык Ассемблера: Учеб. Пособие. М: МФТИ, 2000.

4. Схемотехніка електронних систем: У 3 кн. Кн. 3. Мікропроцесори та мікроконтролери: Підручник / В.І. Бойко, А.М. Гуржий, В.Я. Жуйков та ін. К.: Вища шк., 2004.

Размещено на Allbest.ru


Подобные документы

  • Значимість двійкової системи числення для кодування інформації. Способи кодування і декодування інформації в комп'ютері. Відповідність десятковій, двійковій, вісімковій і шістнадцятковій систем числення. Двійкове кодування інформації, алфавіт цифр.

    презентация [1,4 M], добавлен 30.09.2013

  • Практичне застосування систем кодування знакової та графічної інформації в електронних обчислювальних машинах. Позиційні системи числення. Представлення цілих і дійсних чисел. Машинні одиниці інформації. Основні системи кодування текстових даних.

    практическая работа [489,5 K], добавлен 21.03.2012

  • Характеристики методів стискання інформації. Дворівневе кодування, алгоритм Лемпеля-Зіва. Блок-схема алгоритму кодування. Вибір мови, середовища програмування. Опис інтерфейсу, тестування програми. Бібліотеки, які використовуються при написанні програми.

    курсовая работа [728,9 K], добавлен 17.01.2014

  • Імовірнисний підхід у теорії ощадливого кодування. Оцінка інформативності ознак та їх оптимальна градація. Застосування імовірнісних методів для підвищення ефективності ощадливого кодування відеоінформації. Ефективні алгоритми кодування інформації.

    реферат [1,6 M], добавлен 29.06.2009

  • Визначення кількості інформації в повідомленні, ентропії повідомлень в каналі зв’язку, ентропії двох джерел повідомлень. Продуктивність джерела повідомлень, швидкість передачі інформації та пропускна здатність каналу зв’язку. Кодування, стиснення даних.

    контрольная работа [590,8 K], добавлен 07.06.2012

  • Зміст і структура інформаційного забезпечення. Області застосування штрихового кодування. Послідовність розробки позиційних і комбінованих систем кодування. Технологія застосування електронного документообігу. Особливості створення автоматизованих банків.

    реферат [30,2 K], добавлен 24.01.2011

  • Суть алгоритму Лемпеля-Зива. Принцип скользящого вікна, яке представлено у вигляді буфера та організовано для запам'ятовування "сказаної" раніше інформації та надання до неї доступ. Механізм кодування збігів. Приклади кодування по алгоритмам LZ78 та LZW.

    презентация [59,3 K], добавлен 14.08.2013

  • Розробка логічної гри "Тетріс" у складі набору об’єктно-орієнтованих моделей, програмного коду з використанням об’єктно-орієнтованної мови Java. Проектування архітектури гри, аналіз вимог до неї, опис реалізації, кодування та тестування програми.

    курсовая работа [2,2 M], добавлен 24.10.2010

  • Мета і основні етапи формування курсової роботи з дисципліни "Прикладна теорія цифрових апаратів". Вимоги до змісту та основні правила оформлення даної роботи, її значення в учбовому процесі студентів. Принципи кодування інформації та перетворення кодів.

    методичка [874,3 K], добавлен 18.12.2010

  • Позначення і назва програми, забезпечення, необхідне для її функціонування. Опис логічної структури, алгоритм, структура. Типи комп'ютерів і пристроїв, що використовуються при роботі програми. Формат, описання та спосіб кодування вхідних і вихідних даних.

    курсовая работа [163,6 K], добавлен 01.04.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.