Виконання арифметичних дій і строкових операцій

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

АНОТАЦІЯ

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

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

У курсі "машинно-орієнтоване" програмування ми вивчили мову асемблера для процесора Intel 8086. Завершальним етапом даного курсу є написання розрахунково-графічної роботи.

Зміст

Введення

1. Завдання до розрахунково-графічної роботи

  1. Теоретична частина

2.1 Рівні мов програмування

2.2 Перевага мови асемблера

2.3 Структура програми на мові асемблера

2.4 Синтаксис мови асемблера

  1. Арифметика

3.1 Алгоритм

3.2 Текст програми

3.3 Лістинг коду бібліотеки, в якій знаходяться макроси, що викликаються в даній програмі

4.Строкі

4.1 Алгоритм

4.2 Текст програми

4.3 Лістинг коду бібліотеки, в якій знаходяться макроси, що викликаються в даній програмі

Висновок

Список літератури

ВСТУП

Курсова робота з курсу «Машинно-орієнтоване програмування» є завершальним етапом у вивченні даної дисципліни.

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

У роботі розглянуті цілочисельні арифметичні операції і операції над рядками.

1. Завдання до роботи

1. Арифметика

1.1. Написати модуль на мові Асемблера для обчислення значення виразу.

1.2. Написати на мові Асемблера програму коректного введення вихідних даних (з контролем допустимого діапазону) в таблицю і виведення отриманого результату у вигляді таблиці.

2. Рядки

2.1. Написати модуль на мові Асемблера для обробки рядків.

2.2. Написати на мові Асемблера програму коректного введення вихідних даних.

2.4. Провести тестові перевірки, зробити аналіз результатів.

Ввести 2 рядки символів. Вставити другий рядок у першу, починаючи з заданого символу.

2.Теоретичні частина

2.1 Рівні мов програмування

Будь-яка мова програмування відноситься до одного з наступних рівнів.

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

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

  • Високорівневі мови (С + + або Basic) - створені для того, щоб зосередити зусилля програмістів на вирішення прикладних завдань, не відволікаючи їх на апаратні особливості конкретних машин. Команди мов високого рівня звичайно перетворюються на складні послідовності машинних інструкцій.

2.2 Перевага мови асемблера

Знання та використання мови програмування дає наступні переваги:

  • ясний спосіб взаємодії програми з операційною системою, процесором і BIOS;

  • Є вибір способу представлення і збереження даних в операційній пам'яті і в зовнішніх накопичувачах;

  • можна бачити, як процесор отримує інструкції, як інструкції виконуються і як обробляються дані;

  • є безпосереднє управління зовнішніми пристроями;

Крім того, мова асемблера корисний завдяки наступним властивостям:

  • програма, написана на асемблері, значно компактніше і швидше виконується, ніж написана на мові програмування високого рівня;

  • асемблер дає можливість вирішувати вузькоспеціальні завдання, які важко, якщо взагалі можливо, вирішити на мові високого рівня;

  • хоча більшість програмістів розробляють нові програми з використанням мов високого рівня, програми, які легше супроводжувати та модифікувати, або частини програм, критичні у швидкості виконання, дуже часто пишуться на асемблері;

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

2.3 Структура програми на мові асемблера

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

Пропозиції на мові асемблера бувають 4 типів:

  1. Команди чи інструкції, що представляють собою символьні аналоги машинних команд. У процесі трансляції ці інструкції перетворюються у відповідні команди і системи команд мікропроцесора.

  2. Макрокоманди - оформляються певним чином пропозиції тексту програми, що заміщаються під час трансляції іншими пропозиціями.

  3. Директиви - вказівки транслятору на виконання окремих дій. У директивах немає аналогів у машинному поданні.

  4. Рядки коментарів - будь-які послідовності символів, транслятором повністю ігноруються.

2.4 Синтаксис мови асемблера

Для того, що б транслятор міг пропозиції мови, вони повинні формуватися за певними синтаксичним правилам. Для цього краще всього використовувати формальний опис мови, на зразок граматики.

Загальний формат команд на мові асемблера.


рис.1

Команда

рис.2

Ім'я мітки - ідентифікатор, значення якого є адреса 1 байта, запропонованого тексту програми, кіт. він позначає.

КОП - код операції, мнемонічне позначення машинної команди або дії.

Операнди - частини команди (дії) позначають об'єкти над якими виробляється дія.

Допустимі символи для написання тексту програм:

  • всі латинські літери (великі і малі є еквівалентними);

  • цифри 0-9;

  • символи?, _, @, $, &;

  • роздільники й знаки операцій.

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

Лексемами є:

  1. Ідентифікатори - послідовності припустимих символів, що використовуються для позначення кодів операцій, змінних, констант, міток. Ідентифікатор може складатися з 1 або декількох символів. В якості символів можуть використовуватися латинський алфавіт, цифри, символи?, _, @, $, &. Ідентифікатор не може починатися з цифри. Допустима довжина до 255 символів, при цьому транслятор сприймає лише 32 перших. Існує можливість вказувати транслятору відмінність великих і малих літер.

  2. Ланцюжки символів - це послідовність символів, укладені в одинарні або виконавчі лапки.

  3. Цілі числа - в одній з наступних систем числення: 2-ой, десятий, 16-ий.

Ототожнення чисел проводиться за такими правилами:

а) 10-е числа не вимагають зазначення будь-яких додаткових символів (25, 16);

б) 2-е числа вимагають, щоб після них стояла буква b (10011010 b)

в) 16-е числа мають більше умов при записі: по-перше - вони складаються як з цифр, так і з символів латинського алфавіту, по-друге - у транслятора можуть виникнути складності з розпізнаванням дванадцятого числа, так як число може починатися як з цифри, так і з символу. Для цього 16-е число обов'язково закінчується латинською буквою h (019 ch).

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

Операнди-це об'єкти (значення, регістри, комірки пам'яті), на які діють інструкції чи директиви або це об'єкти, які уточнюють дію інструкцій і чи директив.

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

3. Арифметика

3.1 Алгоритм програми

Блок-схема алгоритму обчислення виразу



3.2 Текст програми, що реалізує алгоритм

. Model small

.386

. Stack 100h

. Data

str1 db 09h, 0d5h ,"========", 0B8h, 0ah, 0dh

db "Enter a", 0b3h, 09h, "", 0b3h, 0ah, 0dh

db 09h, 0c3h ,"========", 0b4h, 0ah, 0dh

db "Enter b", 0b3h, 09h, "", 0b3h, 0ah, 0dh

db 09h, 0c3h ,"========", 0b4h, 0ah, 0dh

db "Result:", 0b3h, 09h, "", 0b3h, 0ah, 0dh

db 09h, 0d4h ,"========", 0beh, 0ah, 0dh, '$'

InBufa DB 7

kola DB?

a DB?,?,?,?,?,?,?

InBufb DB 7

kolb DB?

b DB?,?,?,?,?,?,?

Error DB "Input data ERROR !!!", 0dh, 0ah, '$'

DivErr DB "Dividing by Zero !!!", 0dh, 0ah, '$'

chA DW 0

chB DW 0

tabl DW 10000, 1000, 100, 10, 1

ResBin DW 0

ResBCD DB '+', '0 ',?,?,?,?, 0ah, 0dh,' $ '

kol db 3

flag db 0

. Code

include math.lib

. Startup

cls

locate 0,0

mov ax, dgroup

mov ds, ax

cikl:

mov flag, 0

mov chA, 0

mov chB, 0

mov ResBin, 0

mov bp, offset ResBCD

mov ds: [bp], '+'

mov ds: [bp +1], "0"

mov ds: [bp +2],?

mov ds: [bp +3],?

mov ds: [bp +4],?

mov ds: [bp +5],?

mov al, 3

mov ah, kol

sub al, ah

imul ax, 7

locate 0, al

push ax

; Висновок таблиці

mov dx, offset str1

mov ah, 09h

int 21h

; Введення чисел

pop ax

push ax

inc al

locate 10, al

mov dx, offset InBufa

mov ah, 0ah

int 21h

pop ax

push ax

add al, 3

locate 10, al

mov dx, offset InBufb

mov ah, 0ah

int 21h

; Перевірка на числа

prov InBufA

prov InBufB

; Перевірка на знак

znak a

znak b

; ASCII> BIN

ASCII_2_BIN kola, chA

ASCII_2_BIN kolb, chB

funtion

; Bin 2 Ascii

mov cx, 5

mov bp, offset tabl

mov si, offset ResBCD

inc si

v:

mov bx, ds: [bp]

mov dx, 0

idiv bx

cmp al, 0

je nul

mov flag, 1

add al, 30h

mov ds: [si], al

inc si

jmp nol

nul: cmp flag, 0

je nol

mov ds: [si], 30h

inc si

nol: mov ax, dx

add bp, 2

loop v

; Виход_1

pop ax

add al, 5

locate 10, al

mov dx, offset ResBCD

mov ah, 09h

int 21h

locate 0, 35

dec kol

jnz cikl

; Вихід

jmp ex

Er: cls

locate 25, 8

mov dx, offset Error

mov ah, 09h

int 21h

jmp ex

DEr: locate 25, 9

mov dx, offset DivErr

mov ah, 09h

int 21h

ex:

. Exit (0)

END

3.3. Лістинг коду бібліотеки string. Lib, в якій знаходяться макроси, що викликаються в даній програмі

IFDEF @ Model

IFIDN @ Model, <1>

TINYMODEL TYPEDEF

ENDIF

ENDIF

cls macro

push ax

push bx

push cx

push dx

mov cx, 0

mov dh, 24

mov dl, 79

mov ah, 6

mov al, 0

mov bh, 7

int 10h

pop dx

pop cx

pop bx

pop ax

endm

locate macro col, row

push dx

mov dh, row

mov dl, col

move_cursor

pop dx

endm

move_cursor macro

LOCAL ok, vs

push ax

push bx

cmp dh, 24

jna ok

sub dh, dh

ok: cmp dl, 79

jna vs

sub dl, dl

vs: mov ah, 15

int 10h

mov ah, 2

int 10h

pop bx

pop ax

endm

prov macro InBuf

local c1

mov bp, offset InBuf

inc bp

mov ch, 0

mov cl, ds: [bp]

dec cl

add bp, 2

c1: cmp byte ptr [ds: [bp]], 30h

jl Er

cmp byte ptr [ds: [bp]], 39h

ja Er

inc bp

loop c1

endm

znak macro per

local m1

cmp per, '-'

je m1

cmp per, '+'

jne Er

m1:

endm

ASCII_2_BIN macro kol, res

local p, plus

mov bp, offset kol

mov bx, offset kol

mov ax, 0

mov al, ds: [bx]

add bp, ax

mov ch, 0

mov cl, ds: [bx]

dec cl

mov bx, offset tabl

add bx, 8

mov ax, 0

mov dx, 0

p: mov ax, ds: [bx]

mov dl, ds: [bp]

sub dl, 30h

imul ax, dx

add res, ax

sub bx, 2

sub bp, 1

dec cx

jnz p

; Перевірка на знак

mov bp, offset kol

add bp, 1

cmp ds: byte ptr [bp], '-'

jne plus

neg res

plus:

endm

funtion macro

; Завдання:

; B / a - ​​1, якщо a> b;

; Y = -295, якщо a = b;

; (A - 235) / b, якщо a <b;

mov ax, chA

mov bx, chB

cmp ax, bx

jne net

cmp ax, 0

je equal

net:

mov bp, offset a

mov si, offset b

mov dl, ds: [bp]

mov dh, ds: [si]

cmp dl, dh

jl more

ja low

cmp dl, '-'

jne pl

cmp ax, bx

jg more

je equal

ja low

pl: cmp ax, bx

ja more

je equal

jl low

more: cmp al, 0

je DEr

mov ax, chB

mov bx, ax

and bx, 7FFFh

cmp ax, bx

je pluss

mov dx, 0FFFFh

jmp did

pluss: mov dx, 0

did: idiv chA

sub ax, 1

jmp www

equal: mov ax, 00h

sub ax, 295

jmp www

low: cmp bl, 0

je DEr

mov ax, chA

sub ax, 235

mov bx, ax

and bx, 7FFFh

cmp ax, bx

je plu2

mov dx, 0FFFFh

jmp mnu2

plu2: mov dx, 0

mnu2:

idiv chB

www: mov bx, ax

and bx, 7FFFh

cmp ax, bx

je OK

neg ax

mov ResBCD, '-'

OK: mov ResBin, ax

endm

4. Рядки

4.1 Блок-схема алгоритму обробки рядка



4.2 Текст програми, який реалізує даний алгоритм:

. Model small

.586

. Stack 100h

. Data

Mes1 db "Input the first string", 0ah, 0dh, '$'

Mes2 db "Input the second string", 0ah, 0dh, '$'

Mes3 db "Input the simbol, from which you want to paste the second string", 0ah, 0dh, '$'

Str1 db 255

db?

db 255 dup (0)

Str2 db 255

db?

db 255 dup (0)

Char1 db 2

db?

db 0, '$'

Res db "Result is:", 0Ah, 0Dh, '$'

Str db 255 dup (0)

. Code

include string.lib

. Startup

mov ax, dgroup

mov ds, ax

cls

locate 0,0

lea dx, Mes1

mov ah, 09h

int 21h

lea dx, Str1

mov ah, 0ah

int 21h

locate 0, 3

lea dx, Mes2

mov ah, 09h

int 21h

lea dx, Str2

mov ah, 0ah

int 21h

locate 0, 6

lea dx, Mes3

mov ah, 09h

int 21h

lea dx, Char1

mov ah, 0ah

int 21h

obrabotka

locate 0, 9

lea dx, Res

mov ah, 09h

int 21h

lea dx, Str

mov ah, 09h

int 21h

. Exit (0)

END

4.3 Лістинг коду бібліотеки math. Lib, в якій знаходяться макроси, що викликаються в даній програмі

IFDEF @ Model

IFIDN @ Model, <1>

TINYMODEL TYPEDEF

ENDIF

ENDIF

cls macro

push ax

push bx

push cx

push dx

mov cx, 0

mov dh, 24

mov dl, 79

mov ah, 6

mov al, 0

mov bh, 7

int 10h

pop dx

pop cx

pop bx

pop ax

endm

locate macro col, row

push dx

mov dh, row

mov dl, col

move_cursor

pop dx

endm

move_cursor macro

LOCAL ok, vs

push ax

push bx

cmp dh, 24

jna ok

sub dh, dh

ok: cmp dl, 79

jna vs

sub dl, dl

vs: mov ah, 15

int 10h

mov ah, 2

int 10h

pop bx

pop ax

endm

obrabotka macro

mov bp, offset Char1

add bp, 2

mov dl, ds: [bp]

mov bp, offset Str1

add bp, 1

mov cl, ds: [bp]

inc bp

mov si, offset Str2

add si, 1

mov ch, ds: [si]

inc si

mov bx, offset Str

inc bx

lp:

mov al, ds: [bp]

mov ds: [bx], al

cmp al, dl

je m1

inc bx

inc bp

dec cl

jnz lp

m1: inc bx

inc bp

lpo:

mov al, ds: [si]

mov ds: [bx], al

inc bx

inc si

dec ch

jnz lpo

lopa:

mov al, ds: [bp]

mov ds: [bx], al

inc bx

inc bp

dec cl

jnz lopa

inc bx

mov ds: [bx ],'$'

endm

ВИСНОВОК

У даній роботі були розроблені програми, спрямовані на виконання арифметичних дій і строкових операцій.

Програми були написані на мові низького рівня Borland Turbo Assembler (TASM), для процесорів сімейства Intel.

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

Були практично закріплені отримані навички роботи з TASM, знання про структуру мови та її синтаксису.

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

32

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
99.3кб. | скачати


Схожі роботи:
Особливості виконання основних арифметичних операцій в ЕОМ
Виконання арифметичних операцій над числами з фіксованою комою
Формування поняття властивостей арифметичних дій у молодших школярів
Методика вивчення арифметичних дій з програми Школа 2100
Методика вивчення арифметичних дій з програми Школа-2100
Методика роботи над простими задачами що розкривають конкретний зміст арифметичних дій
Операція над множинами як основа навчання арифметичних дій над цілими невід`ємними
Розробка програмного забезпечення для реалізації арифметичних операцій над комплексними числами
Особливості виконання рефлексивних дій студентами на початку навчання
© Усі права захищені
написати до нас