Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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. Значения аргументов вводятся с клавиатуры.

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

Имя Назначение Тип ОДЗ
  a Переменная целый –32 768 до +32 767;
  D Переменная целый 1..4
  b   целый –32 768 до +32 767;
  y   целый –32 768 до +32 767;

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

№ теста Тест 1 Тест 2 Тест 3
a      
D      
b -21    
y   -/- Ошибка! -/-Ошибка!
Комм Отрицательное число Неверный КОП! Деление на 0!

 

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

a D b y Комментарий
    -21    

 


 

Рисунок 2 – Тест 1

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

Тест 2

a D b y Комментарий
      -/-  

 


 

Рисунок 3 – Тест 2

Вводим корректные данные в переменные А и B, но в D можно ввести числа только от 1 до 4. Чтобы проверить реакцию на ввод неверных данных введем 5. На рисунке 3 мы видим, что программа выдала сообщение об ошибке, как и планировалось. Следующий тест проведем для проверки реакции программы при делении на ноль.

Тест 3

a D b y Комментарий
      -/- Ошибка! Деление на 0!

 


 

Рисунок 4 – Тест 3

Как мы видим, на рисунке 4 программа, при делении на 0, выводит на экран сообщение об ошибке и прерывает дальнейшие вычисления. Если их не прервать, программа после вывода сообщения об ошибке продолжит вычисления и выведет неверный ответ.

Заключение

В процессе работы были изучены и применены команды условного перехода МП 8086. Была реализована процедура вывода текста, которая использует 21 прерывание DOS. Для правильной работы отлаживать программу не просто нужно, а необходимо.

<== предыдущая лекция | следующая лекция ==>
Анализ сети ресторанов быстрого питания « Макдональдс» на основе концепции М.Портера | Формирование группового и линейного сигналов в системах передачи с частотным разделением каналов (ЧРК).


Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных