Ход выполнения лабораторной работы
МИНОБРНАУКИ РОССИИ
Федеральное государственное автономное
Образовательное учреждение высшего образования
ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ
ИНСТИТУТ РАДЕОТЕХНИЧЕСКИХ СИСТЕМ И УПРАВЛЕНИЯ
КАФЕДРА СИСТЕМ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ
Отчет
к лабораторной работе №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
Вывод
При выполнении данной лабораторной работы были приобретены навыки использования команд условного и безусловного переходов, циклов при написании ассемблерных программ и были получены представления об особенностях обработки данных, команд и режимах доступа к данным при организации ветвлений и циклов.