Робота з матрицями в низькорівневій мові програмування

Мова Асемблера, її можливості та команди. Розробка алгоритму програми, його реалізація в програмі на мові Асемблера. Введення елементів матриці та обчислення cуми елементів, у яких молодший біт дорівнює нулю. Методи створення програми роботи з матрицями.

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

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

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

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

12

Зміст

  • Вступ
  • 1. Постановка завдання
  • 2. Методи і засоби рішення поставленого завдання
  • 3. Методи створення програми роботи з матрицями
  • 4. Контрольній приклад роботи програми
  • Висновки
  • Література
  • Додатки

Вступ

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

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

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

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

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

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

Програми на мові асемблера важче проектувати та налагоджувати, треба весь час пам'ятати, що конкретно знаходиться в кожному регістрі. Прийнято вважати, що розробка програми тільки на мові асемблера, деякого процесора, навіть якщо він поширений не рекомендується. Зрозуміло що будь яку програму можна написати тільки за допомогою асемблера, але для цього треба використати набагато більшу кількість команд, і час, який піде на її виконання і відладку буде набагато більшим ніж для мови високого рівня. Набагато вигідніше писати програми на мові високого рівня, а найбільш критичні частини для швидкодії, писати на мові асемблера. Наприклад на асемблері можна скласти процедури для реалізації вводу-виводу низького рівня, процедури обробки переривань та деякі інші. Дана робота присвячена створенню програми для роботи із матрицею 3 Х 3, яка обчислює суму елементів яких молодший біт дорівнює нулю.

асемблер програмування матриця програма

1. Постановка завдання

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

2. Методи і засоби рішення поставленого завдання

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

Mov - команда пересилки данних, примітка:

Данні передаються з другого операнда в перший.

Значення другого операнда не змінюється.

Лише один з операндів може бути сегментним регістром.

Операнди мають бути одного розміру.

Lea - команда занесення покажчика (указателя) на другий операнд в перший.

Add - складання двох операндів - джерело і приймач, розмірністю байт - слово або подвійне слово.

Div - виконання операції ділення двох двійкових беззнакових значень.

Cmp - порівняння двох операндів, виконати віднімання (операнд1-операнд2), залежно від результату встановити прапори (флаги), операнд1 і операнд2 не змінювати (тобто результат не запам'ятовувати).

Jb - використовується після cmp, перехід на мітку якщо другий операнд більше першого

Je - використовується після cmp, перехід на мітку якщо обидва операнди однакові.

Jne - використовується після cmp, перехід на мітку якщо операнди не однакові.

Equ-директива яка не визначає елемент даних, але визначає значення, яке може бути використане для постановки в інших командах.

Loop-команда циклу. Відбувається перехід в залежності від вмісту регістра СХ.

Принцип роботи:

1) Від регістру cx віднімається 1

2) Порівнює cx с 0

3) Якщо більше 0, тоді цикл продовжується і керування передається мітці циклу, якщо дорівнює нулю тоді вихід із циклу

Jc - виконує розгалуження за адресою, якщо прапор переносу дорівнює "1", в іншому випадку виконується наступна команда.

Shr - зрушує біти вправо певне число раз і лівий звільнившийся біт заповнює нульовим значенням.

3. Методи створення програми роботи з матрицями

Для об'явлення розмірності матриці використовуємо змінну n. Для того щоб елементи матриці були порожні використовуємо директиву dup (?).

n equ 3

mas dw n*n dup (?)

Підключення процедур для введення і виведення на консоль:

Extrn write: near

Extrn read: near

Об'явлення матриці розмірністю 3 на 3, де в регістрі si буде зберігатись індекс елементу матриці

mov cx,n*n;

mov si,0;

За допомогою процедури call read вводимо елементи матриці, цей елемент буде зберігатись в регістрі ax. В регістр ax заносимо індекс введеного елементу. Для того щоб перейти до наступного вводу елемента до регістру si додаємо 2. Командою циклу переходимо на мітку m2.

m2:

call read;

mov mas [si],ax;

add si,2;

loop m2

Цикл для проходження по елементам матриці:

В регістрі cx буде зберігатись розмірність матриці n*n. Заносимо в регістр bx нуль, в якому буде зберігатись сумма елементів матриці. В регістр si заносимо 0, в якому буде зберігатись індекс елементу матриці. В регістр ax заносимо значення елементу матриці, далі командою shr зрушуємо ax на одиницю, зрушений біт заноситься в флаг cf (кейрі-флаг). Якщо cf дорівнює одиниці, тоді за допомогою команди jc переходимо на мітку m1, якщо ні тоді рухаємось далі по коду (Заносимо в регістр bx елемент матриці).

В мітці m1 в регістр si заносимо 2, для переходу на наступний елемент і за допомогою команди циклу loop переходимо на мітку m.

mov cx,n*n

mov bx,0;

mov si,0

m: mov ax,mas [si]

shr ax,1;

jc m1

add bx,mas [si]

m1: add si,2

loop m

Виведення результату на консоль:

mov ax,bx

call write

Коректне завершення програми:

mov ah,4ch

int 21h

end start

4. Контрольній приклад роботи програми

Після запуску програми вводимо елементи масиву, програма виведе результат на консоль.

Після введення елементів матриці, матриця має вид:

1 2 3

4 5 6

7 2 1

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

Висновки

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

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

Доступ до портів введення-виведення і особливих реєстрів процесора.

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

В цій курсовій роботі було вивчено теоретичний матеріал, розроблено і реалізовано алгоритм програми за допомогою мови асемблер. У програмі виводиться сума елементів матриці 3Х3, у яких молодший біт дорівнює нулю.

Література

1. Ревич Ю.В. Изучаем Ассемблер 2011 Издательство: БХВ-Петербург

2. В.Н. Пильщиков Ассемблер 1999 год Издательство: Диалог-МИФИ

3. Юрий Магда Программирование на языке Ассемблера 2006 Издательство: Питер

Додатки

Лістинг програми

. model small

. stack

. data

n equ 3

mas dw n*n dup (?)

str1 db 'Vvedite elementu matricu$'

. code

Extrn write: near

Extrn read: near

start:

mov ax,@data

mov ds,ax

mov ah,9

lea dx,str1

int 21h

mov cx,n*n

mov si,0

m2:

call read

mov mas [si],ax

add si,2

loop m2

mov cx,n*n

mov bx,0

mov si,0

m: mov ax,mas [si]

shr ax,1

jc m1

add bx,mas [si]

m1: add si,2

loop m

mov ax,bx

call write

mov ah,4ch

int 21h

end start

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


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

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

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

  • Особливості матриць в MATLAB, їх введення з клавіатури та завантаження з інших джерел. Доступ до елементів матриці. Операції над матрицями (векторами). Поелементне перетворення матриці. Характеристика спеціальних функцій, що генерують поширені матриці.

    реферат [333,9 K], добавлен 25.11.2014

  • Стандартні розміри чисел при програмуванні на мові Асемблера. Робота з дробовими числами, використання математичного сопроцесора або його емулятора. Створення програми, яка б перетворювала ціле число в дробове і навпаки, а також функції [x], {x}, |X|.

    курсовая работа [22,0 K], добавлен 12.08.2009

  • Розробка програми-інтерпретатора функцій командного процесора DOS: TIME, DATE, DIR, CD, MD, RD на мові Асемблера. Функціональні модулі, процедури та макроси, які використовуються в програмі. Опис алгоритму розв’язання задачі, його програмна реалізація.

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

  • Використання математичного сопроцесора або його емулятора при програмуванні на мові асемблера з використанням дробових чисел. Створення програми на мові ASM-86, яка реалізує функції [x], {x}, |X|. Алгоритм перетворення цілого числа в дійсне та навпаки.

    курсовая работа [12,4 K], добавлен 08.08.2009

  • Розробка програми в візуальному середовищі С++. Визначення значення функцій в середовищі Builder мовою програмування С++. Обчислення елементів квадратної матриці згідно заданного алгоритму. Бібліотека візуальних компонентів і середовище програмування.

    курсовая работа [451,5 K], добавлен 15.01.2012

  • Основні розрахунки резисторів мікросхеми. Розробка алгоритму рішення задачі методом блок-схем. Характеристика та розробка програми на мові С++ з використанням принципів модульного і структурного програмування. План тестування і налагоджування програми.

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

  • Розробка програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування. Робота з файлами, графікою, класами, обробка числової інформації. Графічні засоби мови програмування. Алгоритм задачі та допоміжні програмні засоби.

    курсовая работа [102,5 K], добавлен 14.03.2013

  • Створення двух файлів В1 і В2 з шести двоцифрових цифр з введенням в довільному порядку цифр з клавіатури із записуванням парних цифр в файл В3, а непарних - у файл В4. Процес розробки програми за допомогою мови "Асемблер". Блок-схема алгоритму задачі.

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

  • Реалізація програми на мові асемблера для процесора i8086. Регістрова структура процесора. Використання сегментних регістрів для апаратної підтримки найпростішої моделі сегментованої пам'яті. Формування арифметичних прапорців. Система команд процесора.

    контрольная работа [240,5 K], добавлен 27.02.2013

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