Протокол работы программы
ИРКУТСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Заочно-вечерний
наименование института
Кафедра вычислительной техники
наименование кафедры
Отчет по лабораторной работе №4
Вариант 5
Ассемблер МП i8086. Разветвляющийся процесс. Простой цикл.
наименование темы
По дисциплине «Машинно-ориентированные языки»
Разработал студент ЭВМбз-12-1 ____________ А.И.Помазков
шифр группы подпись И.О. Фамилия
Руководитель ___________ Н.Н.Егорова
подпись И.О. Фамилия
Иркутск 2016 г.
Содержание
1 Цель работы.. 3
2 Порядок выполнения работы.. 3
3 Постановка задачи. 3
4 Таблица внешних спецификаций. 3
5 Таблица тестов. 3
6 Блок схема. 4
7 Листинг программы.. 5
8 Протокол работы программы.. 8
9 Заключение о задание. 13
Цель работы
1. Применение команд двоичной арифметики и разных
2. способов адресации операндов
3. Знакомство с командами передачи управления.
4. Программирование разветвлений на языке Ассемблера.
5. Закрепление знаний по отладке программы.
6. Использование знаний из курса «Программирование на ЯВУ».
Порядок выполнения работы
1. Ознакомиться с теоретическими материалами по теме.
2. Разобрать лекционные примеры.
3. Ознакомиться с заданием согласно варианту.
4. Составить таблицу внешних спецификаций
5. Выполнить проектирование тестов к задачам.
6. Разработать и описать алгоритмы решения в виде блок-схемы или псевдокода.
4. Закодировать алгоритмы на языке ассемблера с необходимыми комментариями.
5. Получить исполняемый файл (.EXE)
7. Отладить и протестировать программу.
Постановка задачи
Проверить, получается ли остаток, равный одному из заданных чисел r или s, при делении натурального числа a на положительное число b.
Таблица внешних спецификаций
№
| Имя
| Назначение
| Тип
| ОДЗ
|
| a
| Переменная
| целый
| 1 до +65535;
|
| b
| Переменная
| целый
| 0 до +65535;
|
| r
| Переменная
| целый
| 0 до +65535;
|
| s
| Переменная
| целый
| 0 до +65535;
|
Таблица тестов
№ теста
| a
| b
| s
| r
| Комментарии
|
| -5
|
|
|
| Ошибка. Вами было введено не натуральное число. Попробуйте еще!
|
|
|
|
|
| Ошибка. Вами было введено не натуральное число. Попробуйте еще!
|
|
| -3
|
|
| Ошибка. Вами было введено отрицательное число, но по условию задания оно должно быть положительно. Попробуйте еще!
|
|
|
|
|
| Ошибка. Вами был введен ноль! Деление на ноль невозможно. Попробуйте еще!
|
|
|
| -3
|
| Ошибка. Остаток не может быть отрицательным. Введите положительное число
|
|
|
|
| -6
| Ошибка. Остаток не может быть отрицательным. Введите положительное число
|
|
|
|
|
| S – равен остатку от деления, а R не равен
|
|
|
|
|
| R и S равны остатку от деления
|
|
|
|
|
| S и R не равны остатку от деления
|
|
|
|
|
| 'R - равен остатку от деления, a S не равен
|
Блок схема
Листинг программы
include 'emu8086.inc'
#make_EXE#
a_data segment para
text_IFO db 10,13, 'Помазков Антон Иванович',10,13,'$'
t2 db 10,13,'Введите a= $'
t3 db 10,13,'Введите b= $'
t4 db 10,13,'Введите s= $'
t7 db 10,13,'Введите r= $'
t5 db 10,13,'Задание: Поделит натуральное число a на положительное число b,и остаток от деления сравнить с r i s$'
t6 db 10,13,'Остаток отделения равен-$'
Mes_1 db 10,13, 'R - равен остатку от деления, a S не равен$'
Mes_2 db 10,13,'S-равен остатку от деления, a R не равен$'
Mes_3 db 10,13,'S и R не равны остатку от деления$'
Mes_4 db 10,13,'R и S равны остатку от деления$'
Mes_Error_01 db 10,13,'Ошибка. Вами было введено не натуральное число. Попробуйте еще!$'
Mes_Error_02 db 10,13,'Ошибка. Вами был введен ноль! Деление на ноль не возможно. Попробуйте еще!$'
Mes_Error_03 db 10,13,'Ошибка. Вами было введено отрицательное число, но по условию задания оно должно быть положительно. Попробуйте еще!$'
Mes_Error_04 db 10,13,'Ошибка. Остаток не может быть отрицательным. Введите положительное число!$'
a dw ?
b dw ?
r dw ?
s 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, text_IFO
call print_t
lea dx, t5
call print_t
Vvod_a:
lea dx, t2
call print_t
call scan_num
cmp cx, 0
jle Error_01
mov a, cx
jmp Vvod_b
Error_01:
lea dx, Mes_Error_01
call print_t
jmp Vvod_a
Vvod_b:
lea dx, t3
call print_t
call scan_num
cmp cx,0
je Error_02
jl Error_03
mov b, cx
jmp Vvod_s
Error_02:
lea dx, Mes_Error_02
call print_t
jmp Vvod_b
Error_03:
lea dx, Mes_Error_03
call print_t
jmp Vvod_b
Error_04:
lea dx, Mes_Error_04
call print_t
jmp Vvod_s
Error_05:
lea dx, Mes_Error_04
call print_t
jmp Vvod_r
Vvod_s:
lea dx, t4
call print_t
call scan_num
cmp cx, 0
jl error_04
mov s, cx
Vvod_r:
lea dx, t7
call print_t
call scan_num
cmp cx, 0
jl error_05
mov r, cx
;delenia a/b
mov ax, a
cwd
idiv b
push dx
lea dx, t6
call print_t
pop ax
call print_num
cmp ax,r
je M1
cmp ax,s
je M2
lea dx, Mes_3
call print_t
jmp stop
M1: cmp ax,s
je M3
lea dx, Mes_1
call print_t
jmp stop
M2: lea dx, Mes_2
call print_t
jmp stop
M3: lea dx, Mes_4
call print_t
jmp stop
stop:mov ah, 4ch
int 21h
print_t proc near
mov ah,9
int 21h
ret
print_t endp
a_code ends
define_scan_num
define_print_num
define_print_num_uns
end begin
Протокол работы программы
Для того, чтобы убедиться в правильности написанного кода и работе программы проведем несколько прогонов по заранее подготовленной таблице тестов. В первом прогоне проверим ввод переменной, а, программа должна принять только натуральное число, в противном случае попросить повторить ввод.
№ теста
| a
| b
| s
| r
| Комментарии
|
| -5
|
|
|
| Ошибка. Вами было введено не натуральное число. Попробуйте еще!
|
|
|
|
|
| Ошибка. Вами было введено не натуральное число. Попробуйте еще!
|
Рисунок 1 – Первый прогон программы
Программа выдает ошибки, которые были запланированы заранее, и просит повторить ввод. После ввода натурального числа, программа выходит из цикла. Следующим прогоном проверим ввод переменной b, она должна быть положительной и не равно 0, так как деление на ноль невозможно.
№ теста
| a
| b
| s
| r
| Комментарии
|
|
| -3
|
|
| Ошибка. Вами было введено отрицательное число, но по условию задания оно должно быть положительно. Попробуйте еще!
|
|
|
|
|
| Ошибка. Вами был введен ноль! Деление на ноль невозможно. Попробуйте еще!
|
Рисунок 2 – Ввод переменной b
Из рисунка 2 видно, что условие проверки положительности b в программе выполняется правильно. Следующим шагом проверим условие проверки положительности переменных r и s.
№ теста
| a
| b
| s
| r
| Комментарии
|
|
|
| -3
|
| Ошибка. Остаток не может быть отрицательным. Введите положительное число
|
|
|
|
| -6
| Ошибка. Остаток не может быть отрицательным. Введите положительное число
|
Рисунок 3 – Проверка положительности переменных r и s
Из рисунка 3 видно, что проверка была выполнена успешно. Теперь проверим правильность выполнения главного условия.
№ теста
| a
| b
| s
| r
| Комментарии
|
|
|
|
|
| S – равен остатку от деления, а R не равен
|
Рисунок 4 – Проверка главного условия
Из рисунка 4 видно, что пока программа работает верно. Проведем второй прогон, без проверки ошибок ввода.
№ теста
| a
| b
| s
| r
| Комментарии
|
|
|
|
|
| R и S равны остатку от деления
|
Рисунок 5 – Тест 8
№ теста
| a
| b
| s
| r
| Комментарии
|
|
|
|
|
| S и R не равны остатку от деления
|
Рисунок 6 – Третий прогон программы
№ теста
| a
| b
| s
| r
| Комментарии
|
|
|
|
|
| 'R - равен остатку от деления, a S не равен
|
Рисунок 7 – Четвертый прогон программы
Исходя из увиденного на рисунках 4, 5, 6 и 7, можно сделать вывод о правильности выполнения главного условия задачи.
Заключение
В процессе работы были изучены и применены команды условного перехода МП 8086. Была реализована процедура вывода текста, которая использует 21 прерывание DOS. Был сделан цикл для повторения ввода при ошибочном символе.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|