Модульное программирование на Ассемблере

  • Вид работы:
    Реферат
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,61 Мб
  • Опубликовано:
    2016-01-29
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Модульное программирование на Ассемблере

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

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






Курсовая работа

ТЕМА

Модульное программирование на Ассемблере

по дисциплине

"Машинно-ориентированные языки"

.024.00.00 ПЗ









Иркутск 2015

Исходные данные


Заданы два массива X [10] и Y [12], состоящих из целых чисел со знаком в формате слова. Выполнить над массивами действия согласно индивидуальному заданию.

Программа должна иметь модульную структуру. Выделить процедуры: ввода массива с консоли, вывода массива, вывода информации об авторе и условии решенной задачи. Выполнить вывод массивов на экран до обработки и после обработки согласно варианту.

Составить процедуру, которая уменьшает в два раза элементы с четными положительными значениями и заменяет нулевые элементы на - 10. Передача параметров через регистры:

в ВХ - смещение массива;

в СХ - число элементов в массиве.

Содержание

Исходные данные

Введение

1. Цель курсового проекта

2. Математическая модель

3. Таблица внешних спецификаций

4. Таблица тестов

5. Иерархия процедур. Назначение модулей

6. Описание процедур

7. Блок схемы

8.1 Блок-схема основной программы

8.2 Блок-схема процедуры Full

8.3 Блок-схема процедуры Proc_zam

8.4 Блок-схема процедуры Write_array

8.5 Блок-схема процедуры Input_array

8. Реализация программы на Ассемблере

9. Разработка программы на Ассемблере

10. Трансляция и преобразование кода программы KP

11. Протокол тестирования программы на основе Таблицы тестов

Заключение

Список использованных источников

Введение


Модульное программирование - это такой способ программирования, при котором вся программа разбивается на группу компонентов, называемых модулями, причем каждый из них имеет свой контролируемый размер, четкое назначение и детально проработанный интерфейс с внешней средой. Единственная альтернатива модульности - монолитная программа, что, конечно, неудобно. Таким образом, наиболее интересный вопрос при изучении модульности - определение критерия разбиения на модули.

Преимуществом указанной технологии является возможность разработки программ большого объема небольшими функционально законченными частями. При этом многие процедуры можно использовать в других местах программы или других программах, не прибегая к переписыванию частей программного кода. Дополнительные возможности предоставляет применение при разработке подпрограмм, написанных на различных языках программирования, как высокого, так и низкого уровней. При этом используются преимущества языка программирования, который дает наиболее эффективную реализацию алгоритма подпрограммы. Так, включение модулей, написанных на языке ассемблера, позволяет ускорить выполнение соответствующих частей программы и/или выполнить действия, программирование которых с использованием языков высокого уровня невозможно или затруднительно. С другой стороны, существует много библиотек подпрограмм на языках высокого уровня, которые с успехом можно использовать в ассемблерных программах.

модульное программирование модуль процедура

1. Цель курсового проекта


Целью выполнения данного курсового проекта является:

·        Получение навыков разработки структурной организации ассемблерных программ.

·        Реализация модульных программ на основе аппарата процедур.

·        Изучение способов организации связи по данным.

·        Закрепление навыков программирования на машинно-ориентированном языке.

·        Разработка эффективных программ с использованием машинных ресурсов.

 


2. Математическая модель


Поэлементно работаем с массивами X и Y:

В случае если элемент X [0.10] =0, то заменяем X [0.10] на число - 10.

В случае если элемент Y [0.12] =0, то заменяем Y [0.12] на число - 10

В случае если элемент X [0.10] >0, то делим значение на два X [0.10] = X [0.10] /2

В случае если элемент Y [0.12] >0, то делим значение на два Y [0.12] = Y [0.12] /2

При целочисленном делении числа на два, остаток от деления (регистр DX) равно 0.

 


3. Таблица внешних спецификаций


Имя

 Назначение

 Тип

 ОДЗ

 1

 X

 Массив X (10)

 DW

 [-32768…32767]

 2

 Y

 Массив Y (12)

 DW

 [-32768…32767]

 


4. Таблица тестов


Вводимые данные

Результат

Комментарии

Х [10] = [5 0 5 99 0 40 0 0 7 7] Y [12] = [13 6 44 4 8 33 20 53 66 17 0 96]

Х [10] = [5 - 10 5 99 - 10 20 - 10 - 10 7 7] Y [12] = [13 3 22 2 4 33 10 53 33 17 - 10 48]

В Х четыре элемента равных 0 были заменены на - 10 В массиве Y семь положительных четных элементов были разделены на 2, один элемент равный 0 заменен на - 10

 

2

X [10] = [0 0 0 0 0 0 0 0 0 0] Y [12] = [-11 - 8 - 2 - 4 - 10 - 22 - 25 - 13 - 14 - 47 - 28 - 49]

X [10] = [-10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10] Y [12] = [-11 - 8 - 2 - 4 - 10 - 22 - 25 - 13 - 14 - 47 - 28 - 49]

В массиве Х все элементы равные 0 было заменены на число - 10 В массиве Y элементы не были изменены, т.к. они все меньше 0, либо нечетные и меньше 0

 

3

X [10] = [10 20 30 40 50 60 70 80 90 100] Y [12] = [-10 - 20 - 30 - 40 - 50 - 60 - 70 - 80 - 90 - 100 - 110 - 120]

X [10] = [5 10 15 20 25 30 35 40 45 50] Y [12] = [-10 - 20 - 30 - 40 - 50 - 60 - 70 - 80 - 90 - 100 - 110 - 120]

В массиве Х все четные положительные элементы были разделены на 2 В массиве Y четные элементы не были заменены, т.к. они все меньше 0

4

X [10] = [-3 - 5 - 7 - 9 - 11 - 13 - 15 - 177 - 1999 - 21] Y [12] = [3 5 11 23 27 25 31 47 19 13 49 21]

X [10] = [-3 - 5 - 7 - 9 - 11 - 13 - 15 - 177 - 1999 - 21] Y [12] = [3 5 11 23 27 25 31 47 19 13 49 21]

В массиве Х ни один элемент не был изменен, т.к. они все нечетные и меньше 0 В массиве Y ни один элемент не был изменен, т.к. все элементы нечетные



5. Иерархия процедур. Назначение модулей


Название

Тип

Назначение

1

Prog

Главная программа

Основной модуль программы

2

about

Процедура

Процедура вывода информации о задании и студенте

3

Full

Процедура

Процедура обработки массива

4

Write_int

Процедура

Процедура вывода числа на экран

5

Input_array

Процедура

Процедура ввода массива с клавиатуры

6

Write_array

Процедура

Процедура вывода на экран массива

7

Read_int

Процедура

Процедура ввода числа с клавиатуры

8

 Proc_zam

Процедура

Процедура уменьшает в два раза элементы с четными положительными значениями и заменяет нулевые элементы на - 10



6. Описание процедур


Процедура Full:

Процедура предназначена для сокращения основного модуля программы. Так как дано два массива и действия для них идентичны (Ввод, вывод, замена значений в массиве), то будет правильным составить для них процедуру повторяющихся действий.

Входящие данные:- размер массива (в нашем случает 10 для Х и 12 для Y)- дублирующий размер массива, для корректных повторных работ с массивами- прямой адрес массива

Процедура write_int:

Процедура вывода числа

Входные данные:

Ах - число, которое нужно вывести на экран

Процедура read_int:

Процедура ввода числа

Выходные данные:

Ах - число, которое вводится с клавиатуры

Процедура Input_array

Процедура ввода массива.

Входные данные:

Cx - количество элементов массива

Bx - адрес вводимого массива

Процедура Write_array

Вывод элементов массива на экран Входные данные:

Cx - количество элементов массива

Процедура Proc_Zam

Процедура сравнения элементов массива с поставленными условиями уменьшает в два раза элементы с четными положительными значениями и заменяет нулевые элементы на - 10. Для работы данной процедуры необходимы регистры АХ и ВХ, поэтому для сохранения их значений, перед действиями над регистрами, их значения помещаются в стек, а после завершения всех операций значения помещаются обратно.

Входные данные:- адрес начального элемента обработки

Сx - количество элементов массива

Bx - Адрес обрабатываемого массива

7. Блок схемы


8.1 Блок-схема основной программы




8.2 Блок-схема процедуры Full



8.3 Блок-схема процедуры Proc_zam



8.4 Блок-схема процедуры Write_array



8.5 Блок-схема процедуры Input_array




8. Реализация программы на Ассемблере



Рисунок 1 - Листинг программы, начало


Рисунок 2 - Листинг программы, продолжение

Рисунок 3 - Листинг программы, окончание

9. Разработка программы на Ассемблере


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

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

Разработка программы на Ассемблере состоит из следующих этапов:

) Составление алгоритма в виде блок-схемы или структурного описания,

) Ввод в ЭВМ текста исходной программы <name>. asm с помощью редактора текстов. Имя name может быть произвольным, а расширение. asm - обязательно,

) Перевод (трансляция или ассемблирование) исходной программы в машинные коды с помощью транслятора TASM. EXE. На этом этапе получается промежуточный продукт <name>. obj (объектный код). Выявленные при этом синтаксические и орфографические ошибки исправляются повтором пп.2 и 3,4) Преобразование с помощью программы TLINK. EXE объектного кода <name>. obj в исполняемый код <name>. EXE.

) Выполнение программы и ее отладка, если встретились логические ошибки.

10. Трансляция и преобразование кода программы KP


Исходный код программы пишется в текстовом редакторе, который может выводить в файл чистый текст, без управляющих символов. Файл должен иметь расширение". asm".

Трансляция исходного кода программы состоит в преобразовании предложений исходного языка в коды машинных команд и выполняется с помощью транслятора на языке ассемблера (т.е. с помощью программы ассемблера). В результате трансляции образуется объектный файл с расширением". obj". Объектные файл представляет собой блоки машинного кода и данных, с неопределёнными адресами ссылок на данные и процедуры в других объектных файлах, а также список своих процедур и данных.

Рисунок 4 - Трансляция на TASM

Рисунок 5 - Преобразование в. obj на TASM

Рисунок 6 - Запуск исполняемого файла. exe на TASM

Компоновка объектного файла выполняется с помощью программы компоновщика (редактора связей). Компоновщик собирает код и данные объектного модуля в итоговую программу. Файл с программой компоновщика корпорации Borland имеет имя "TLINK. EXE".

11. Протокол тестирования программы на основе Таблицы тестов


Рисунок 7 - Тест №1. Тестирование элементов массива X

Рисунок 8 - Тест №1. Тестирование элементов массива Y

Рисунок 9 - Тест №2. Тестирование элементов массива X

Рисунок 10 - Тест №2. Тестирование элементов массива Y

Рисунок 11 - Тест №3. Тестирование элементов массива X

Рисунок 12 - Тест №3. Тестирование элементов массива Y

Рисунок 13 - Тест №4. Тестирование элементов массива X

Рисунок 14 - Тест №4. Тестирование элементов массива Y

Заключение


Ассемблер является символическим аналогом машинного языка. По этой причине программа, написанная на ассемблере, должна отражать все особенности архитектуры микропроцессора: организацию памяти, способы адресации операндов, правила использования регистров и т.д. Из-за необходимости учета подобных особенностей ассемблер уникален для каждого типа микропроцессоров.

Курсовой проект выполнен полностью, программа отлажена и протестирована.

В процессе работы над проектом получены навыки модульного программирования на языке ассемблера, изучено различие между процедурами и макросами, использованы знание типовых алгоритмов из курса "Программирование на Языках Высокого Уровня". Составлена процедура, которая уменьшает в два раза элементы с четными положительными значениями и заменяет нулевые элементы на - 10.

Список использованных источников


1.      П. Абель Язык ассемблера для IBMPC и программирования.М. "Высшая школа", 1992, 447с.

2.      Гук Михаил Процессоры Intel: от 8086 до Pentium И: Архитектура. Интерфейс. Программирование / М. Гук. - СПб. и др.: Питер, 1998. - 220с.

.        Пирогов В. Ассемблер в примерах. - Спб: БХВ, 2005. - 416 с.

.        Пилыциков В.Н. Программирование на языке ассемблера IBMPC. - М.: "Диалог-МИФИ", 1999. - 288 с.

.        Финогенов К.Г. Основы языка Ассемблера. - М.: Радио и связь, 2000.

.        Юров В. Assembler: Спец. справ. / В. Юров. - СПб. и др.: Питер, 2000. - 489с.: ил.

.        Юров В. Assembler. Практикум. - СПб.: Питер, 2001.

.        Юров В., Хорошенко В. Assembler - Учебный курс. - СПб.: Питер, 2000.

Похожие работы на - Модульное программирование на Ассемблере

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!