Сделай Сам Свою Работу на 5

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





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

 

Заочно-вечерний

наименование института

 

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

наименование кафедры

 

 

Отчет по лабораторной работе №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 Все материалы защищены законодательством РФ.