Читайте также:
|
|
Рассматривая назначение команд условного перехода, следует пояснить характер их использования. Типы данных, над которыми выполняются арифметические операции и операции сравнения, определяют, какими командами пользоваться: беззнаковыми или знаковыми. Беззнаковые данные используют все биты как биты данных; характерным примером являются символьные строки: имена, адреса и натуральные числа. В знаковых данных самый левый бит представляет собой знак, причём если его значение равно нулю, то число положительное, и если равно единице, то отрицательное. Формат команд условного перехода:
Jnnn метка
Переходы для беззнаковых данных
JE/JZ переход, если равно/ноль
JNE/JNZ переход, если не равно/не ноль
JA/JNBE переход, если выше/не ниже или равно
JAE/JNB переход, если выше или равно/не ниже
JB/JNAE переход, если ниже/не выше или равно
JBE/JNA переход, если ниже или равно/не выше
Переходы для знаковых данных
JE/JZ переход, если равно/ноль
JNE/JNZ переход, если не равно/не ноль
JG/JNLE переход, если больше/не меньше или равно
JGE/JNL переход, если больше или равно/не меньше
JL/JNGE переход, если меньше/не больше или равно
JLE/JNG переход, если меньше или равно/не больше
Процедуры
Кодовый сегмент может содержать любое количество процедур, которые разделяются директивами PROC и ENDP. Основная процедура имеет операнд FAR, который информирует систему о том, что данный адрес является точкой входа для выполнения. Все остальные процедуры имеют операнд NEAR для указания того, что эти процедуры находятся в текущем кодовом сегменте. Этот операнд может быть опущен, так как по умолчанию ассемблер принимает тип NEAR. Не основные процедуры могут вызываться как в основной, так и в не основной с помощью команды:
CALL имя-процедуры
Каждая процедура имеет уникальное имя и содержит собственную директиву ENDP для указания конца процедуры. Команда RET всегда выполняет возврат в вызывающую программу.
Типичная организация много процедурной программы имеет вид:
CODEGS SEGMENT PARA
BEGIN PROC FAR
.
.
CALL имя-проц1
.
CALL имя-проц2
.
RET
BEGIN ENDP
имя-проц1 PROC NEAR
.
.
RET
имя-проц1 ENDP
имя-проц2 PROC NEAR
.
.
RET
имя-проц2 ENDP
CODESG ENDS
END BEGIN
Необходимо отметить, что команда CALL автоматически записывает в стек относительный адрес команды, следующей непосредственно за командой CALL, уменьшая при этом указатель вершины стека. Это надо учитывать при определении размера стека.
Дата добавления: 2014-12-19; просмотров: 196 | Поможем написать вашу работу | Нарушение авторских прав |