double arrow

Цель: научиться передавать управление в программе с помощью циклов и условных и безусловных переходов, а также научиться логическим и битовым операциям на языке Ассемблер

Основные сведения

Большинство программ содержат циклы, в которых несколько команд повторяются до достижения определенного требования, и различные проверки, определяющие, какие из нескольких действий следует выполнять. Управление передается по адресу команды, которая не находится непосредственно за выполняемой в текущий момент командой. Такая передача может осуществляться вперед для выполнения новой группы команд или назад для повторения уже выполненных команд [6].

Ниже приведены четыре способа передачи управления:

Безусловный переход: JMP

Цикл: LOOP

Условный переход: Jnnn (больше, меньше, равно)

Вызов процедуры: CALL

Заметим, что имеется три типа адресов: SHORT (короткий), NEAR (близкий) и FAR (дальний). Адресация SHORT используется при циклах, условных переходах и некоторых безусловных переходах. Адресация NEAR и FAR используется для вызовов процедур (CALL) и безусловных переходов, которые не квалифицируются, как SHORT. Все три типа передачи управления воздействуют на содержимое регистра IP; тип FAR также изменяет регистр CS.

Команда JMP

Одной из команд, обычно используемых для передачи управления, является команда JMP. Эта команда выполняет безусловный переход, т.е. обеспечивает передачу управления в любом случае.

В программе 7.1 показан пример бесконечного цикла с использованием команды JMP. В регистры AX, BX, и CX загружается значение 1, и затем в цикле выполняются следующие операции: прибавить 1 к регистру AX; прибавить AX к BX; удвоить значение в регистре CX. Повторение цикла приводит к увеличению содержимого регистра AX: 1,2,3,4..., регистра BX: 1,3,6,10..., и регистра CX: 1,2,4,8... Начало цикла имеет метку, в данном случае, "A20:". В конце цикла находится команда JMP A20, которая указывает на то, что управление должно быть передано команде с меткой A20. Адресная метка в операнде команды указывается без двоеточия. Данный цикл не имеет выхода и приводит к бесконечному выполнению - такие циклы в программах для PC обычно не используются.

Пример 7.1. Использование команды JMP.

masm

model small

.code

start:

mov ax,01; инициализация ax,

mov bx,01; bx,

mov cx,01; и cx

a20:

add ax,01; ax = ax + 1

add bx,ax; bx = ax + bx

shl cx,1; удвоить cx

jmp a20; переход на a20

end start

Команда JMP для перехода в пределах -128 до +127 байт имеет тип SHORT. Более далекие безусловные переходы имеют тип NEAR. Команда JMP, превосходящая пределы одного сегмента, получает тип FAR.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: