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

11569
знаков
8
таблиц
7
изображений
Министерство общего и профессионального образования РФ

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

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

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

Допускаю к защите

Руководитель Н.Н. Егорова

подпись, И.О. Фамилия

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

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

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

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

ЯЗЫКИ»

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 Цель курсового проекта

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

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

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

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

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

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

Имя

Назначение

Тип

ОДЗ

1

X

Массив

целый

-32768 .. 32767

2

Y

Массив

целый

-32768 .. 32767

4

k

Искомая переменная

целый

0 .. 12

X[10]

Y[12]

кол-во простых чисел в массиве Х

кол-во простых чисел в массиве Y

Назначение теста

1

1, 7, -11, 18, 103, -20,-7, 50, 29,28

2, 3, 4, 5,17,-51, 81, 10, 37, 83, 15, 9

4

6

Тестовый запуск

2

200,80,81,124, 525, 75,76,77, 44,10

4,6,8,9,12,15,18,20,24,27,100,0

0

0

Нет простых чисел

3

1, 2, 3, 7, 11, 13, 17, 19, 23, 29

617,461,601, 727,557,983, 929,881,673, 509,661,283

10

12

Все числа простые

4

-32768, -32767, -32766, -32765, -32764, -32763, -32762, -32761, -32760, -32759

32767, 32766, 32765, 32764, 32763, 32762, 32761, 32760, 32759, 32758, 32757, 32756

0

Предельные значения ОДЗ

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


image001.jpg3 Блок-схема


VvodMass VivodMass

image002.jpg image003.jpg

Filtr

Начало,Конец,Пе-ре-бор всех эле-мен-тов мас-сива,Проверка, является ли число про-стым    ,Увеличиваем количество простых чисел на +1


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

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]

add bx, 2 ;Прибовляем 2 к bx(Переход к следующему элементу)

pop cx ; Выталкиваем из стека

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

push cx ;cx в стек (Сначало 8)

mov r,1 ; проверочное число от 1 до [bx]/2

mov ax, [bx]; записываем в ах [bx]

cmp ax,0

jle m4 ; проверка числа отрицательное/ положительное

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

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

cmp dx, 0

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

m1: ; метка проверки простое/составное число

inc r ;увеличение на 1 проверочное число

mov ax, [bx]; записываем в ах [bx]

cwd

idiv r ;делим на проверочное число

imul r ;умножаем на проверочное число

cmp ax, [bx];сравниваем

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

mov ax, [bx]; записываем в ах [bx]

mov cx, 2

cwd

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

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

je m3 ; если равны, то переход на метку m3

jmp m1; иначе продолжаем проверку

m3: ; метка используемая, если число простое

inc k ;увеличиваем количество простых чисел

m4: ; метка используемая, для перехода к следующему числу

pop cx ; вытаскиваем проверочное число из стека

add bx, 2; переходим к следующему эллементу массива

loop filtr ;переходим к началу цикла

ret

filtr endp

a_code ends

define_scan_num

define_print_num

define_print_num_uns

end begin

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

X[10]

Y[12]

кол-во простых чисел в массиве Х

кол-во простых чисел в массиве Y

Назначение теста

1

1, 7, -11, 18, 103, -20,-7, 50, 29,28

2, 3, 4, 5,17,-51, 81, 10, 37, 83, 15, 9

4

6

Тестовый запуск

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

image005.jpg

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

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

X[10]

Y[12]

кол-во простых чисел в массиве Х

кол-во простых чисел в массиве Y

Назначение теста

2

200,80,81,124, 525, 75,76,77, 44,10

4,6,8,9,12,15,18,20,24,27,100,0

0

0

Нет простых чисел

image006.jpg

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

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

X[10]

Y[12]

кол-во простых чисел в массиве Х

кол-во простых чисел в массиве Y

Назначение теста

3

1, 2, 3, 7, 11, 13, 17, 19, 23, 29

617,461,601, 727,557,983, 929,881,673, 509,661,283

10

12

Все числа простые

image007.jpg

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

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

X[10]

Y[12]

кол-во простых чисел в массиве Х

кол-во простых чисел в массиве Y

Назначение теста

4

-32768, -32767, -32766, -32765, -32764, -32763, -32762, -32761, -32760, -32759

32767, 32766, 32765, 32764, 32763, 32762, 32761, 32760, 32759, 32758, 32757, 32749

0

1

Предельные значения ОДЗ

image008.jpg

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

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

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

mov cx,2

cwd

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

cmp dx, 0

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

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

8 Заключение

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


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

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с.: ил.


Информация о реферате «Модульное программирование на Ассемблере»
Раздел: Информатика, программирование
Количество знаков с пробелами: 11569
Количество таблиц: 8
Количество изображений: 7

Похожие материалы

Скачать
35650
0
0

... # будет тесно интегрирован с языком XML[1]. 2.2 Паскаль Паскаль [PASCAL - акроним с французского - Program Applique a la Selection et la Compilation Automatique de la Litterature] - Процедурно-ориентированный язык программирования высокого уровня, разработанный в конце 1960-х гг. Никлаусом Виртом, первоначально для обучения программированию в университетах. Назван в честь французского ...

Скачать
41510
0
0

... . Например, не существует типа матрица с операцией обращения или типа строка с операцией конкатенации. Если пользователю понадобятся подобные типы, он может определить их в самом языке. Программирование на С++ по сути сводится к определению универсальных или зависящих от области приложения типов. Хорошо продуманный пользовательский тип отличается от встроенного типа только способом определения, но ...

Скачать
61776
6
1

... мощность (заменять процессоры), расширять емкость оперативной памяти, добавлять внешние устройства. Машины имеют большие наборы команд, развитое системное программное обеспечение, включающее трансляторы языков программирования Ассемблер, ФОРТРАН, ПЛ/1, КОБОЛ, АЛГОЛ, ПАСКАЛЬ, операционные системы с различными функциональными возможностями. Основная особенность управляющих вычислительных машин ...

0 комментариев


Наверх