ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Протокол работы программы. 4. Таблица внешних спецификацийОглавление 1. Цель работы.. 3 2. Порядок работы.. 3 3. Постановка задачи. 3 4. Таблица внешних спецификаций. 3 5. Таблица тестов. 3 6. Блок-схема. 4 7. Листинг программы.. 4 8. Протокол работы программы.. 7 9. Заключение. 10
Цель работы Применение команд двоичной арифметики и разных способов адресации операндов. Знакомство с командами передачи управления. Программирование разветвлений на языке Ассемблера. Закрепление знаний по отладке программы. Использование знаний из курса «Программирование на ЯВУ». Порядок работы 1. Ознакомиться с теоретическими материалами по теме. 2. Разобрать лекционные примеры. 3. Ознакомиться с заданием согласно варианту. 4. Составить таблицу внешних спецификаций 5. Выполнить проектирование тестов к задачам. 6. Разработать и описать алгоритмы решения в виде блок-схемы или псевдокода. 4. Закодировать алгоритмы на языке ассемблера с необходимыми комментариями. 5. Получить исполняемый файл (.EXE) 7. Отладить и протестировать программу. Постановка задачи Ввести два числа a и b и D- вид операции {плюс(+), минус (-), умножения(*), деления(:)}. Найти значение выражения: a D b. Значения аргументов вводятся с клавиатуры. Таблица внешних спецификаций
Таблица тестов
6. Рисунок 1 – Блок-схема алгоритма Листинг программы TITLE 8086 Code Template (for EXE file) include 'EMU8086.inc' ; AUTHOR Копылов М М ; DATE 11/03/2016 ; VERSION 1.00 ; FILE Lab4.ASM
; 8086 Code Template
; Directive to make EXE output: #MAKE_EXE#
DSEG SEGMENT 'DATA'
; TODO: add your data here!!!! a dw? D dw? b dw? y dw? SUMM db 10,13, 'Сумма А+B= $' RAZN db 10,13, 'Разность А-B=$ ' PROI db 10,13, 'Произведение А*B=$' CHAS db 10,13, 'Частное А/B=$' task1 db 'Лабораторная №4 РВП Копылов Михаил' db 'Вычислить значение выражения аDb ' db ' 1 + 2 - 3 * 4 /$' MESploxo db 10,13, 'Неверный код операции (<1 или >4)$' t1 db 10,13, 'Введите А= $' t2 db 10,13, 'Введите D от 1 до 4 D=$' t3 db 10,13, 'Введите B= $' errt db 10,13, 'Ошибка! Делитель равен $' task2 db 10,13, 'Программа завершена!$'
DSEG ENDS
SSEG SEGMENT STACK 'STACK' DW 128h DUP(?) SSEG ENDS
CSEG SEGMENT 'CODE'
;*******************************************
START PROC FAR
; Store return address to OS: PUSH DS MOV AX, 0 PUSH AX
; set segment registers: MOV AX, DSEG MOV DS, AX MOV ES, AX
; TODO: add your code here!!!! lea dx,task1; Вывод сообщения 1 call print_t; Вызов печати сообщения ; ВВОД ПЕРЕМЕННЫХ: ; ввод А lea dx,t1; Вывод сообщения t1 call print_t; Вызов печати сообщения call scan_num; Вызов счетчика номеров mov a,cx; Заносим счетчик в а ; ввод D lea dx,t2; Вывод сообщения t2 call print_t; Вызов печати сообщения call scan_num; Вызов счетчика номеров mov D,cx; Заносим счетчик в D ; ввод B lea dx,t3; Вывод сообщения t3 call print_t; Вызов печати сообщения call scan_num; Вызов счетчика номеров mov b,cx; Заносим счетчик в b
;не больше 4 и не меньше 1 cmp d,1; сравниваем 1 с d jl ploxo; если <1, число не входит в разрешенный диапазон cmp d,4;сравниваем 4 с d jg ploxo; если >4, число не входит в разрешенный диапазон ; работаем cmp d,1; сравниваем 1 с d je SUMMA; если=0, переходим к операции Сложения cmp d,2; сравниваем 2 с d je RAZNOS; если=0, переходим к операции Вычитания cmp d,3; сравниваем 3 с d je PROIZV; если=0, переходим к операции Умножения jmp CHASTN;переходим к операции Деления ploxo: lea dx,MESploxo;если число не проходит, сообщение - ошибка call print_t jmp fin;переход к концу программы ;ПРОЦЕДУРЫ: SUMMA:;процедура сложения mov ax,a; Заносим а в ах add ax,b; Прибавляем b к ах mov y,ax lea dx,summ jmp petch;переход к процедуре печати
RAZNOS:;процедура вычитания mov ax,a; Заносим а в ах sub ax,b; Вычитаем b из ах mov y,ax lea dx,razn jmp petch;переход к процедуре печати
PROIZV:;процедура умножения mov ax,a; Заносим а в ах imul b; Умножаем b на ах mov y,ax; lea dx,proi; jmp petch;переход к процедуре печати
CHASTN:;процедура деления cmp b,0; сравниваем 0 с b jnz next;переход к процедуре NEXT, если не равен 0 lea dx,errt;если дел на 0, то вывод сообщения об ошибке jmp petch; next:;Процедура перехода к следующей процедуре mov ax,a; Заносим а в ах cwd; idiv b; Делим b на ах mov y,ax; lea dx,chas; jmp petch; petch:; Процедура печати call print_t; mov ax,y; Заносим у в ах call print_num; lea dx,task2; Вывод сообщения task2 call print_t;Вызов печати сообщения
; return to operating system: fin: RET; ФИНИШ START ENDP
;******************************************* ; собственные процедуры print_t proc near mov ah,9 int 21h ret print_t endp
CSEG ENDS
define_scan_num define_print_num define_print_num_uns END START; set entry point. Протокол работы программы Для того, чтобы убедиться в правильности написанного кода и работе программы проведем несколько прогонов по заранее подготовленной таблице тестов. В первом прогоне проверим работоспособность программы и работу с отрицательными переменными. В конце работы программа должна вывести сообщение об окончании работы. Тест 1
Рисунок 2 – Тест 1 Как мы видим, на рисунке 2, произведение положительного и отрицательного чисел дало в итоге отрицательное число. Проведем следующий прогон. Проверим реакцию программы на ввод переменной, не входящей в допустимый диапазон D. Данные введем согласно таблице тестов: Тест 2
Рисунок 3 – Тест 2 Вводим корректные данные в переменные А и B, но в D можно ввести числа только от 1 до 4. Чтобы проверить реакцию на ввод неверных данных введем 5. На рисунке 3 мы видим, что программа выдала сообщение об ошибке, как и планировалось. Следующий тест проведем для проверки реакции программы при делении на ноль. Тест 3
Рисунок 4 – Тест 3 Как мы видим, на рисунке 4 программа, при делении на 0, выводит на экран сообщение об ошибке и прерывает дальнейшие вычисления. Если их не прервать, программа после вывода сообщения об ошибке продолжит вычисления и выведет неверный ответ. Заключение В процессе работы были изучены и применены команды условного перехода МП 8086. Была реализована процедура вывода текста, которая использует 21 прерывание DOS. Для правильной работы отлаживать программу не просто нужно, а необходимо.
Не нашли, что искали? Воспользуйтесь поиском:
|