
- •Федеральное агентство по образованию
- •Лабораторная работа №1 Исследование внутренней структуры логических элементов
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Расположение операндов и результатов при умножении
- •Расположение операндов и результатов при делении
- •Лабораторная работа №4 Изучение команд управления программой
Лабораторная работа №4 Изучение команд управления программой
4.1. Цель работы
Ознакомление с работой команд условных и безусловных переходов, использование строковых команд, работа с процедурами.
4.2. Теоретические сведения
В большинстве современных микропроцессоров адрес очередной исполняемой команды формируется путем прибавления к содержимому счетчика команд длины текущей исполняемой команды. Это позволяет экономить число разрядов, отводимых по машинную команду. Однако, основное преимущество МП заключается в возможности изменения последовательного хода исполнения программы в зависимости от полученных в процессе расчетов результатов. Для этого в системе команд любого МП имеются команды, позволяющие нарушить естественный ход выполнения программы и передать управление в иную точку программы. Переход в этом случае будет осуществляться путем загрузки в счетчик команд содержимого адресной части этих команд. Среди команд управления потоком команд можно выделить три разновидности:
команды безусловного перехода;
команды условных переходов;
команды вызова и возврата из подпрограмм.
Команды безусловного перехода позволяют передать управление без
проверки каких-либо условий. Команды условных переходов передают управления в зависимости от выполнения какого-либо условия. Если условие выполняется, то управление, как правило, передается, на адрес, указанный в команде условного перехода. Если же условие не выполняется, то будет исполняться следующая за командой условного перехода операция. Единственным реальным условием, на основании которого осуществляется переход, является состояние определенных флагов регистра флагов МП. Процедуру можно вызвать из любой точки программы. Для МП это означает, что на данной команде надо сформировать адрес первой команды процедуры, сохранить адрес возврата и, выполнив процедуру, обеспечить передачу управления основной программе (или процедуре), из которой произошел вызов. Адрес возврата обычно сохраняется в стеке.
В таблице 4.1 представлены команды переходов 8086, которые позволяют в программе изменять адрес, следующей выполняемой программы.
Безусловный переход изменяет адрес следующей исполняемой команды, после его выполнения будет исполняться команда, на которую указывает этот переход. При безусловных переходах в регистр счетчика команд ip, а в некоторых случаях также в регистр кодового сегмента cs загружаются значения новых адресов. Вместе cs:ip определяют адрес, следующей исполняемой команды. Изменение содержимого одного или обоих регистров приводит к изменению адреса следующей исполняемой команды, нарушая обычный ход исполнения программы сверху вниз.
Таблица 4.1
Команды переходов i8086
Мнемокод/ Операнды |
Описание |
|||||
Команды безусловного перехода |
||||||
сall адрес jmp адрес ret значение retn значение retf значение |
Вызов процедуры Безусловный переход Возврат из процедуры Возврат из близлежащей процедуры Возврат из дальней процедуры |
|||||
Команды условного перехода |
||||||
Переход по команде сравнения cmp оп_1,оп_2 |
||||||
Типы операндов |
Мнемокод |
Критерий условного перехода |
Значение флага для осуществления перехода |
|||
Любые Любые Со знаком Со знаком Со знаком Со знаком Без знака Без знака Без знака Без знака
|
je jne jl/jnge jle/jng jg/jnle jge/jnl jb/jnae jbe/jna ja/jnbe jae/jnb |
оп_1=оп_2 оп_1оп_2 оп_1<оп_2 оп_1оп_2 оп_1>оп_2 оп_1оп_2 оп_1<оп_2 оп_1оп_2 оп_1>оп_2 оп_1оп_2 |
zf=1 zf=0 sfof sfof or zf=1 sf=of and zf=0 sf=of cf=1 cf=1 or zf=1 cf=0 and zf=0 cf=0 |
|||
Переход по значению флагов |
||||||
Название флага |
Команда условного перехода |
Значение флага для осуществления перехода |
||||
Флаг переноса cf Флаг четности pf Флаг нуля zf Флаг знака sf Флаг переполнения of Флаг переноса cf Флаг четности pf Флаг нуля zf Флаг знака sf Флаг переполнения of |
Jc jp jz js jo jnc jnp jnz jns jno |
cf=1 pf=1 zf=1 sf=1 of=1 cf=0 pf=0 jz=0 js=0 jo=0 |
||||
Команды цикла |
||||||
jcxz короткий адрес loop короткий адрес loope/loopz короткий адрес loopne/loopnz короткий адрес |
Переход, если сх равно нулю Цикл пока сх<>0 Цикл, если равно или нуль Цикл, если не равно/ не нуль |
|||||
Команды прерывания |
||||||
int тип прерывания into iret |
Прерывания/вызов прерывания Прерывание по переполнению Возврат из обработки прерывания. |
При создании процедур используется блок следующего вида:
SubName PROC [NEAR]
;Команды подпрограммы
ret
ENDP [SubName]
Слово NEAR используется при внутрисегментном вызове подпрограммы (подпрограмма находится в том же сегменте, что и команда call). При внесегментном вызове подпрограммы вместо слово NEAR следует использовать FAR. Для передачи данных в подпрограмму может осуществляться следующими способами:
через регистры процессора;
через запись данных в глобальные переменные;
3) через передачу данных через стек.
Условные переходы требуют целевого адреса – метки, обозначающей место в программе, с которого она продолжит исполняться в случае выполнения заданного условия. Условные переходы выше-ниже, такие как ja и jbe используются для беззнаковых значений, переходы меньше-больше (jle, jg и др.) используются для значения со знаком. Все условные переходы могут предавать управление – до 128 байт назад (в нижние адреса) или до 127 байт вперед (в верхние адреса). Так как целевой адрес выражается через смещение (расстояние до целевой точки условного перехода), то условные переходы будут выполняться одинаково в любом месте памяти. Для перехода более чем на 127 байт необходимо комбинировать условные и безусловные переходы.
Для работы со строками, используются команды представленные в таблице 4.2. Строки в языке ассемблера являются последовательностью байт, которые могут представлять, либо не представлять ASCII-символы. Строковые команды делятся на три группы:
команды пересылки строк;
команды проверки строк;
команды префикса повторения.
Команды пересылки строк пересылают байты или слова из памяти в регистр, из регистра в память или непосредственно из памяти в память. Команды проверки строк позволяют сравнивать либо находить байты или слова. Команды префикса повторения могут присоединиться к другим строковым командам, создавая команды, которые повторяют строковую операцию определенное число раз до выполнения заданного условия. Префиксные команды позволяют быстро заполнять значениями тысячи байтов, копировать строки из одного места памяти в другое и искать необходимые значения в больших блоках памяти. Строковые команды используют для выполнения своих функций комбинации регистров – ds:si и es:di – с индексными регистрами строки источника и строки назначения, которые определяют смещения в данных и сегментах. При операциях с байтами (словами) происходит вычитание или добавление 1 (2) к регистру si или di (или обоим). Флаг направления df определяет, должна ли строковая команда приводить к увеличению или уменьшению si и di. Если df=1, индексы уменьшаются в сторону меньших адресов, при df=0 увеличиваются. Команда cld приводит к сбросу флага df, команда std к установке флага df.
Таблица 4.2
Команды для работы со строками
-
Мнемокод/ Операнды
Описание
Команды пересылки строк
Lods источник
lodsb
lodsw
movs назначение, источник
movsb
movsw
stos назначение
stosb
stows
Загрузка строки байтов или строки слов
Загрузка строки байтов
Загрузка строки слов
Пересылка строки байтов или строки слов
Пересылка строки байтов
Пересылка строки слов
Запись строки байтов или строки слов
Запись байта в строку
Запись слова в строку
Команды проверки строк
cmps назначение, источник
cmpsb
cmpsw
scas назначение
scasb
scasw
Сравнение строк по байтам или словам
Сравнение строк по байтам
Сравнение строк по словам
Поиск байта или слова в строке
Поиск байта в строке
Поиск слова в строке
Команды префикса повторения
Rep
repe/repz
repne/repnz
Повтор
Повтор, пока равно 0
Повтор, пока не равно 0
. Программа работы
Составить программу, которая бы обеспечивала выполнение задания из пункта 3.3.4 предыдущей лабораторной работы, а после проверки установки бит в единицу выполняла бы следующие действия (в зависимости от номера варианта):
1) Дан массив A из 10 однобайтных чисел. Переписать из массива A в массив B все числа, большие 05h и меньшие 20h.
2) Дан массив A из 10 однобайтовых чисел. Найти в нем минимальный элемент массива.
3) Дан массив A из 10 однобайтовых чисел. Переписать его в массив B со сдвигом на один разряд влево только числа, содержащие четное количество единиц.
4) Дан массив A из 10 однобайтовых чисел. Переписать его в массив B со сдвигом на один разряд вправо только числа, содержащие нечетное количество единиц.
5) Дан массив A из 10 однобайтовых чисел. Проверить есть ли в нем число 10h, если оно есть, выполнить сложение всех чисел массива А.
6
)
Дан массив A
из 10 однобайтовых чисел, содержащий
число AAh.
Выполнить операцию И над всеми числами
до первого числа AAh
и операцию ИЛИ над всеми числами после
него.
7) Написать программу вычисления логической функции Y=X1(X2X3X4), где X1, X2, X3, X4 –логические переменные, хранимые в разрядах D0-D3 ячеки памяти ds:0300.
8) Дан массив A из 10 однобайтовых чисел. Переписать в массив В все числа большие 20h и подсчитать число таких чисел.
9) Дан массив из 10-и двухбайтовых кодов. Определить содержит ли он код FFFFh. Если да, то установить флаги C=1 и Z=0.
10) Заполнить сегмент данных последовательностью чисел 0,1,2,…,255, 0,1,2…255, 0,1..
11) Отыскать в сегменте данных ASCII-КОД пробела. Подсчитать число таких кодов и вывести их на экран.
12) Дан массив А из 10 двухбайтовых кодов. Определить сколько раз в нем повторяется код ABBA и подсчитать число таких кодов.
13) Дан массив A из 10 однобайтовых чисел. Определить число четное или нечетное число единиц содержится в этом массиве.
14) Заполнить память последовательностью чисел Фибоначчи 1,1,2,3,5,8,13,21… . Заполнение прекратить, когда числа выйдут за пределы разрядной сетки.
15) Заполнить память последовательностью квадратов натуральных чисел. Заполнение прекратить, когда числа выйдут за пределы разрядной сетки.
Содержание отчета
Титульный лист. Мнемоники программ с комментариями. Выводы по каждому пункту работы.
Библиографический список
Быстров, Ю. А. Электроника: Справочная книга/ Ю. А. Быстров, Я. М. Великсон, В. Д. Вогман и др.; Под ред. Ю. А. Быстрова. – СПб.: Энергоатомиздат. Санкт-Петербургское отделение, 1996. – 544 с., ил.
Шустов, М.А. Практическая схемотехника. Источники питания и стабилизаторы/ М.А.Шустов – М.: ООО «Альтекс-А», 2002. – 190 с., ил.
Опадчий, Ю.Ф. Аналоговая и цифровая электроника (Полный курс): Учеб. для вузов / Ю.Ф.Опадчий, О.П.Глудкин, А.И.Гуров; Под ред. О.П.Глудкина. – М.: Горячая Линия – Телеком, 2002. – 768с., ил.
Лачин, В.И. Электроника: Учебное пособие/ В.И.Лачин, Н.С.Савёлов. – Ростов н/Д: Издательство «Феникс», 2001. – 448 с., ил.
Прянишников, В. А. Электроника: Полный курс лекций/ В. А. Прянишников – 4-е изд.- СПб.: КОРОНА принт, 2004. – 416 с., ил.
Бакалов, В. П. Основы биотелеметрии/ В. П. Бакалов. – М.: Радио и связь, 2001. – 352 с., ил.
Попечителев, Е. П. Электрофизиологическая и фотометрическая медицинская техника: Учебное пособие/ Е. П. Попечителев, Н. А. Корнелевский; Под ред. Е. П. Попечителева. –М.: Высшая школа, 2002. – 470 с., ил.
Водовозов, А. М. Микроконтроллеры для систем автоматики: Учебное пособие/ А. М. Водовозов. – Вологда: ВоГТУ, 2002. – 131 с.
Корнеев, В. В. Современные микопроцессоры. – 3-е изд., перераб. и доп./ В. В. Корнеев, А. В. Киселев. – СПб: БХВ-Птербург, 2003. – 448 с., ил.