Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Модульное программирование на АссемблереСтр 1 из 2Следующая ⇒
Модульное программирование на Ассемблере
Пояснительная записка по дисциплине «МАШИННО-ОРИЕНТИРОВАННЫЕ ЯЗЫКИ»
1.002.00.00 ПЗ
Курсовой проект(работа) защищен с оценкой ___________ __________________
Дата защиты _____________________ Иркутск 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. Разработка эффективных программ с использованием машинных ресурсов. Таблица внешних спецификаций
Таблица тестов
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
Протокол работы программы
Для того, чтобы убедиться в правильности написанного кода и работе программы проведем несколько прогонов по заранее подготовленной таблице тестов. Рисунок 1 – Первый прогон программы Из рисунка 1 видно, что программа работает корректно, и выводит значения, которые были запланированы в таблице тестов. Проведем более детальные прогоны программы, что бы удостовериться в том, что процедура поиска простых чисел ‘filtr’ работает корректно, а так же проверим программу на устойчивость с помощью предельных значений ОДЗ.
Рисунок 2 – Второй прогон программы Из рисунка 2 видно, что программа правильно распознает сложные числа. Проведем следующий прогон программы, в котором все числа будут простыми:
Рисунок 3 – Третий прогон программы Из рисунка 3 видно, что программа правильно распознает простые числа. Из рисунков 2, 3 можно сделать вывод, что процедура поиска простых чисел ‘filtr’ работает корректно. Проведем следующий прогон программы с предельными значениями ОДЗ:
Рисунок 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 ПЗ
Курсовой проект(работа) защищен с оценкой ___________ __________________
Дата защиты _____________________ Иркутск 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. Разработка эффективных программ с использованием машинных ресурсов. Таблица внешних спецификаций
Таблица тестов
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; Просмотров: 1348; Нарушение авторского права страницы