Ход выполнения лабораторной работы

МИНОБРНАУКИ РОССИИ

Федеральное государственное автономное

Образовательное учреждение высшего образования

ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ

ИНСТИТУТ РАДЕОТЕХНИЧЕСКИХ СИСТЕМ И УПРАВЛЕНИЯ

КАФЕДРА СИСТЕМ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ

 

 

Отчет

к лабораторной работе №3

«Команды условного и безусловного переходов. Организация ветвлений и циклов в программе»

 

по курсу:

«Вычислительные машины, Системы и Сети»

 

 

Выполнил:

студент группы Ртбо 3-7

Кошкальда Я.Ю.

__________________

 

Проверил:

Асс. каф. САУ

Денисенко М.Е

 

__________________

 

«__»____________2016г.

 

 

Таганрог 2016 г.

Цель работы

1) изучение принципов функционирования памяти и микропроцессора компьютера при выполнении ветвлений и циклов;

2) приобретение навыков использования команд условного и безусловного переходов, циклов при написании ассемблерных программ;

3) получение представления об особенностях обработки данных, команд и режимах доступа к данным при организации ветвлений и циклов.

Задание на лабораторную работу

1) Написать программу на языке ассемблера, которая реализует ветвления и циклы.

1.1) В сегменте данных определить два числа в шестнадцатеричной системе счисления, размером в один байт каждое.

1.2) Также в сегменте данных описать однобайтовую ячейку для хранения наибольшего общего делителя (НОД) двух чисел с произвольным первоначальным значением.

1.3) Используя команды переходов и цикла, найти НОД двух чисел, описанных в сегменте данных.

1.4) Полученный результат поместить в соответствующую ячейку памяти.

1.5) Используя команды циклического сдвига, переходов и цикла подсчитать количество единиц в НОД.

1.6) Полученное значение поместить в регистр DL.

2) На основе исходной программы получить исполняемый файл. Выполнить программу по шагам с помощью отладчика TURBO DEBUGGER, описать изменение состояния регистров и ячеек памяти при выполнении программы. Обратить особое внимание на следующие моменты:

2.1) Как изменяется содержимое регистра IP при выполнении нелинейных переходов?

2.2) Чему равен адрес следующей команды при выполнении условия для перехода и в противном случае?

2.3) Каким образом организованы циклы в программе?

2.4) Какое значение будет находиться в регистре для НОД после подсчета количества единиц? Сколько раз нужно выполнить команду циклического сдвига, чтобы получить первоначальное значение?

 

Ход выполнения лабораторной работы

 

Рис.1 – НОД находится по алгоритму Евклида. После одной итерации данного алгоритма НОД чисел 90 и 80 равен 10

Рис. 2 – После нахождения НОД совершается прыжок в метку a1, где обнуляется bl и назначается счетчик CX, используемый для работы цикла loop

Рис. 3 – Используем циклический сдвиг влево с использование CF, после чего проверяем флаг CF, и если он равен нулю, совершаем прыжок в bit0

Рис. 4 – Использование цикла loop

Рис. 5 – CX уменьшился но нуля и цикл закончился. Результат заносим в dl

 


Листинг Программы:

.model small

.386

stack 100h

dataseg

Res dw ?

number_1 dw 5Ah

number_2 dw 50h

codeseg

start:

startupcode

algorithm:

mov Res,dx

mov dx, 0

mov ax, number_1

div number_2

cmp dx, 0

jz a1

mov bx, number_2

mov number_1, bx

mov number_2, dx

jmp algorithm

a1: xor bl,bl

mov cx,8

mov ax,Res

lp:

rcl ax,1

jnc bit0

inc bl

bit0:

loop lp

mov dl,bl

quit:

exitcode 0

 

end start

Вывод

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