Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



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

 

Пояснительная записка
к курсовому проекту

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

«МАШИННО-ОРИЕНТИРОВАННЫЕ

ЯЗЫКИ»

 

1.002.00.00 ПЗ

 

Разработал студент группы ЭВМ-бз-12     О.В. Самсонюк
подпись   И. О. Фамилия
       
   
       
Нормоконтроль     Н.Н. Егорова
подпись   И. О. Фамилия

 

Курсовой проект(работа) защищен с оценкой ___________ __________________

 

Дата защиты _____________________

Иркутск 2016


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

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

 

Кафедра вычислительной техники

 

ЗАДАНИЕ

НА КУРСОВОЕ ПРОЕКТИРОВАНИЕ (КУРСОВУЮ РАБОТУ)

 

По курсу: Машинно-ориентированные языки

Студенту: Самсонюку О.В., гр. ЭВМ-бз-12

Тема проекта: Модульное программирование на Ассемблере.

 

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

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

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

в СХ – число элементов в массиве;

в АХ – результат вычислений.

 

 

Рекомендуемая литература

1. Методические указания по выполнению курсового проекта по курсу МОЯ. эл. док. Сервер VT: \ ПО МПС заочники \ Курсовое проектирование

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

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

Электронные образовательные ресурсы:

Ресурсы ИрГТУ, доступные в библиотеке университета и в локальной сети.

Ресурсы сети Интернет http: //lite-programming.ru/

 

 

Графическая часть на ______________ листах.

Дата выдачи задания “09” марта 2016 г.

Дата представления проекта руководителю “12” марта 2016 г.

Руководитель курсового проектирования _______________ Н.Н. Егорова

 

Содержание

1 Задание. 2

2 Содержание. 3

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

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

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

6 Блок-схема. 5

7 Листинг программы.. 7

8 Протокол работы программы.. 10

9 Заключение. 13

10 Список литературы.. 14


 

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

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

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

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

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

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

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

Имя Назначение Тип ОДЗ
X Массив целый -32768.. 32767
Y Массив целый -32768.. 32767
k Искомая переменная целый 0.. 12
X[10] Y[12] кол-во простых чисел в массиве Х кол-во простых чисел в массиве Y Назначение теста
1, 7, -11, 18, 103, -20, -7, 50, 29, 28 2, 3, 4, 5, 17, -51, 81, 10, 37, 83, 15, 9 Тестовый запуск
200, 80, 81, 124, 525, 75, 76, 77, 44, 10 4, 6, 8, 9, 12, 15, 18, 20, 24, 27, 100, 0 Нет простых чисел
1, 2, 3, 7, 11, 13, 17, 19, 23, 29 617, 461, 601, 727, 557, 983, 929, 881, 673, 509, 661, 283 Все числа простые
-32768, -32767, -32766, -32765, -32764, -32763, -32762, -32761, -32760, -32759 32767, 32766, 32765, 32764, 32763, 32762, 32761, 32760, 32759, 32758, 32757, 32756   Предельные значения ОДЗ

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

 


3 Блок-схема

 


VvodMass VivodMass

 

       
   


Filtr



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

include 'emu8086.inc'

#make_EXE#

a_data segment para

t1 db 10, 13, 'Введите элемент массива $'

t2 db 10, 13, 'Массив введен', 10, 13, '$'

t3 db 10, 13, 'Заданы два массива X[10] и Y[12], состоящих из целых чисел', 10, 13, 'Составить процедуру подсчета числа элементов массива, значения которых простые числа. Передача параметров через регистры: $'

t4 db 10, 13, 'Самсонюк Олег Вадимович', 10, 13, '$'

t5 db 10, 13, 'Массив X $'

t6 db 10, 13, 'Массив Y $'

t7 db 10, 13, 'Количество простых чисел = $'

probel db ' $'

X dw 10 dup(? )

Y dw 12 dup(? )

K dw?

R dw?

a_data ends

a_stack segment para stack

Dw 128 dup(? )

a_stack ends

a_code segment para

assume cs: a_code, ss: a_stack, ds: a_date

Begin:

mov ax, a_data

Mov ds, ax

; Автор

Lea dx, t4

Call p1

; Задание

; lea dx, t3

; call p1

; Начало ввода массива x

Lea dx, t5

Call p1

Mov cx, 10; Размер масива(Счетчик)

Mov bx, offset x; адрес начала массива x

Call VvodMass

; Начало ввода массива y

Lea dx, t6

Call p1

Mov cx, 12; Размер масива(Счетчик)

Mov bx, offset y; адрес начала массива y

Call VvodMass

; Начало вывода массива x

Lea dx, t5

Call p1

Mov cx, 10; Размер масива(Счетчик)

Mov bx, offset X; адрес начала массива x

Call VivodMass

; Фильтр x

Lea dx, t7

Call p1

Mov cx, 10; Размер масива(Счетчик)

Mov bx, offset X; адрес начала массива x

Mov k, 0

Call filtr

Mov ax, k

call print_num

; Начало вывода массива y

Lea dx, t6

Call p1

Mov cx, 12; Размер масива(Счетчик)

Mov bx, offset y; адрес начала массива y

Call VivodMass

; Фильтр y

Lea dx, t7

Call p1

Mov cx, 12; Размер масива(Счетчик)

Mov bx, offset y; адрес начала массива y

Mov k, 0

Call filtr

Mov ax, k

call print_num

; Программа все забывает

Mov ah, 4ch

Int 21h

P1 proc near

Mov ah, 9

Int 21h

Ret

P1 endp

VvodMass proc near

; bx - смешение массива

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

cikl:

Push cx; cx в стек

Lea dx, t1; Сообщение: Введите элемент массива

Call p1; Вызов процедуры p1

call scan_num; Ждем ввода числа(Запись идет в cx)

mov [bx], cx; [bx] - обращение к памяти с адресом ds: [bx]

Loop cikl

lea dx, t2; 'Массив введен $'

Call p1

Ret

VvodMass endp

VivodMass proc near

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

; bx- смещение массива

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

cikl1:

mov ax, [bx];!!!!

call print_num;!!!!!

Lea dx, probel

Call p1

Add bx, 2

Loop cikl1

Ret

VivodMass endp

Filtr proc near

Cmp ax, 0

Cmp ax, 1

je m3; если элемент массива =1 то увеличиваем K

Cmp ax, 2

je m3; если элемент массива =2 то увеличиваем K

Cmp ax, 3

je m3; если элемент массива =3 то увеличиваем K

Mov dx, 0; обнуляем dx

Mov cx, 2

Cwd

Cmp dx, 0

Cwd

Mov cx, 2

Cwd

idiv cx; делим [bx] на 2

Cmp ax, r; сравниваем

Ret

Filtr endp

a_code ends

define_scan_num

define_print_num

define_print_num_uns

End begin

 

Протокол работы программы

X[10] Y[12] кол-во простых чисел в массиве Х кол-во простых чисел в массиве Y Назначение теста
1, 7, -11, 18, 103, -20, -7, 50, 29, 28 2, 3, 4, 5, 17, -51, 81, 10, 37, 83, 15, 9 Тестовый запуск

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

Рисунок 1 – Первый прогон программы

Из рисунка 1 видно, что программа работает корректно, и выводит значения, которые были запланированы в таблице тестов. Проведем более детальные прогоны программы, что бы удостовериться в том, что процедура поиска простых чисел ‘filtr’ работает корректно, а так же проверим программу на устойчивость с помощью предельных значений ОДЗ.

 

X[10] Y[12] кол-во простых чисел в массиве Х кол-во простых чисел в массиве Y Назначение теста
200, 80, 81, 124, 525, 75, 76, 77, 44, 10 4, 6, 8, 9, 12, 15, 18, 20, 24, 27, 100, 0 Нет простых чисел

Рисунок 2 – Второй прогон программы

Из рисунка 2 видно, что программа правильно распознает сложные числа. Проведем следующий прогон программы, в котором все числа будут простыми:

X[10] Y[12] кол-во простых чисел в массиве Х кол-во простых чисел в массиве Y Назначение теста
1, 2, 3, 7, 11, 13, 17, 19, 23, 29 617, 461, 601, 727, 557, 983, 929, 881, 673, 509, 661, 283 Все числа простые

 

Рисунок 3 – Третий прогон программы

Из рисунка 3 видно, что программа правильно распознает простые числа. Из рисунков 2, 3 можно сделать вывод, что процедура поиска простых чисел ‘filtr’ работает корректно. Проведем следующий прогон программы с предельными значениями ОДЗ:

X[10] Y[12] кол-во простых чисел в массиве Х кол-во простых чисел в массиве Y Назначение теста
-32768, -32767, -32766, -32765, -32764, -32763, -32762, -32761, -32760, -32759 32767, 32766, 32765, 32764, 32763, 32762, 32761, 32760, 32759, 32758, 32757, 32749 Предельные значения ОДЗ

Рисунок 4 – Четвертый прогон программы

Из рисунка 3 видно, что программа корректно работает с большими числами, однако скорость работы с большими числами на эмуляторе достаточно низкая, поэтому стоит добавить в процедру ‘filtr’ проверку чисел на четность/нечетность:

 

mov dx, 0; обнуляем dx

mov cx, 2

cwd

idiv cx; делим элемент массива на 2

cmp dx, 0

je m4; если после деления нет отстатка, то число четное, переходим к следующему элементу

 

Теперь программа отбрасывает все четные числа, что заметно увеличивает скорость работы программы с большими числами.

 

Заключение

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


 

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

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

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

3. Бек Л. Введение в системное программирование. - М.: Мир, 1988

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

5. Пильщиков В.Н. Программирование на языке ассемблера IBM PC. – М.: «Диалог-МИФИ», 1999. – 288 с.

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

 

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

 

Пояснительная записка
к курсовому проекту

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

«МАШИННО-ОРИЕНТИРОВАННЫЕ

ЯЗЫКИ»

 

1.002.00.00 ПЗ

 

Разработал студент группы ЭВМ-бз-12     О.В. Самсонюк
подпись   И. О. Фамилия
       
   
       
Нормоконтроль     Н.Н. Егорова
подпись   И. О. Фамилия

 

Курсовой проект(работа) защищен с оценкой ___________ __________________

 

Дата защиты _____________________

Иркутск 2016


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

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

 

Кафедра вычислительной техники

 

ЗАДАНИЕ

НА КУРСОВОЕ ПРОЕКТИРОВАНИЕ (КУРСОВУЮ РАБОТУ)

 

По курсу: Машинно-ориентированные языки

Студенту: Самсонюку О.В., гр. ЭВМ-бз-12

Тема проекта: Модульное программирование на Ассемблере.

 

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

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

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

в СХ – число элементов в массиве;

в АХ – результат вычислений.

 

 

Рекомендуемая литература

1. Методические указания по выполнению курсового проекта по курсу МОЯ. эл. док. Сервер VT: \ ПО МПС заочники \ Курсовое проектирование

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

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

Электронные образовательные ресурсы:

Ресурсы ИрГТУ, доступные в библиотеке университета и в локальной сети.

Ресурсы сети Интернет http: //lite-programming.ru/

 

 

Графическая часть на ______________ листах.

Дата выдачи задания “09” марта 2016 г.

Дата представления проекта руководителю “12” марта 2016 г.

Руководитель курсового проектирования _______________ Н.Н. Егорова

 

Содержание

1 Задание. 2

2 Содержание. 3

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

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

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

6 Блок-схема. 5

7 Листинг программы.. 7

8 Протокол работы программы.. 10

9 Заключение. 13

10 Список литературы.. 14


 

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

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

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

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

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

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

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

Имя Назначение Тип ОДЗ
X Массив целый -32768.. 32767
Y Массив целый -32768.. 32767
k Искомая переменная целый 0.. 12
X[10] Y[12] кол-во простых чисел в массиве Х кол-во простых чисел в массиве Y Назначение теста
1, 7, -11, 18, 103, -20, -7, 50, 29, 28 2, 3, 4, 5, 17, -51, 81, 10, 37, 83, 15, 9 Тестовый запуск
200, 80, 81, 124, 525, 75, 76, 77, 44, 10 4, 6, 8, 9, 12, 15, 18, 20, 24, 27, 100, 0 Нет простых чисел
1, 2, 3, 7, 11, 13, 17, 19, 23, 29 617, 461, 601, 727, 557, 983, 929, 881, 673, 509, 661, 283 Все числа простые
-32768, -32767, -32766, -32765, -32764, -32763, -32762, -32761, -32760, -32759 32767, 32766, 32765, 32764, 32763, 32762, 32761, 32760, 32759, 32758, 32757, 32756   Предельные значения ОДЗ

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

 


3 Блок-схема

 


VvodMass VivodMass

 

       
   


Filtr



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

include 'emu8086.inc'

#make_EXE#

a_data segment para

t1 db 10, 13, 'Введите элемент массива $'

t2 db 10, 13, 'Массив введен', 10, 13, '$'

t3 db 10, 13, 'Заданы два массива X[10] и Y[12], состоящих из целых чисел', 10, 13, 'Составить процедуру подсчета числа элементов массива, значения которых простые числа. Передача параметров через регистры: $'

t4 db 10, 13, 'Самсонюк Олег Вадимович', 10, 13, '$'

t5 db 10, 13, 'Массив X $'

t6 db 10, 13, 'Массив Y $'

t7 db 10, 13, 'Количество простых чисел = $'

probel db ' $'

X dw 10 dup(? )

Y dw 12 dup(? )

K dw?

R dw?

a_data ends

a_stack segment para stack

Dw 128 dup(? )

a_stack ends

a_code segment para

assume cs: a_code, ss: a_stack, ds: a_date

Begin:

mov ax, a_data

Mov ds, ax

; Автор

Lea dx, t4

Call p1

; Задание

; lea dx, t3

; call p1

; Начало ввода массива x

Lea dx, t5

Call p1


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-03-17; Просмотров: 1297; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.13 с.)
Главная | Случайная страница | Обратная связь