adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
mov ax,1
jmp AddTwoToAX
AddOneToAx:
inc ax
jmp AXIsSet
AddTwoToAX:
inc ax
AXIsSet:
.
.
.
регистр AX будет содержать значение 3, а инструкции ADD и JMP,
следующие за меткой AddOneToAX, никогда выполнены не будут. Здесь
инструкция:
jmp AddTwoToAX
указывает процессору 8086, что нужно установить указатель инст-
рукций IP в значение смещения метки AddTwoToAX, поэтому следующей
выполняемой инструкцией будет инструкция:
add ax,2
Иногда совместно с инструкцией JMP используется операция
SHORT. Для указания на целевую метку инструкция JMP обычно ис-
пользует 16-битовое смещение. Операция SHORT указывает Турбо Ас-
семблеру, что нужно использовать не 16-битовое, а 8-битовое сме-
щение (что позволяет сэкономить в инструкции JMP один байт). Нап-
ример, последний фрагмент программы можно переписать так, что он
станет на два байта короче:
.
.
.
mov ax,1
jmp SHORT AddTwoToAX
AddOneToAx:
inc ax
jmp SHORT AXIsSet
AddTwoToAX:
inc ax
AXIsSet:
.
.
.
Недостаток использования операции SHORT (короткий) состоит в
том, что короткие переходы могут осуществлять передачу управления
на метки, отстоящие от инструкции JMP не далее, чем на 128 бай-
тов, поэтому в некоторых случаях Турбо Ассемблер может сообщать
вам, что метка недостижима с помощью короткого перехода. К тому
же операцию SHORT имеет смысл использовать для ссылок вперед,
поскольку для переходов назад (на предшествующие метки) Турбо Ас-
семблер автоматически использует короткие переходы, если на метку
можно перейти с помощью короткого перехода, и длинные в противном
случае.
Инструкцию JMP можно использовать для перехода в другой сег-
мент кода, загружая в одной инструкции и регистр CS, и регистр
IP. Например, в программе:
.
.
.
CSeg1 SEGMENT
ASSUME CS:Cseg1
.
.
.
FarTarget LABEL FAR
.
.
.
CSeg1 ENDS
.
.
.
CSeg2 SEGMENT
ASSUME CS:CSeg2
.
.
.
jmp FarTarget ; переход дальнего типа
.
.
.
CSeg2 ENDS
.
.
.
выполняется переход дальнего типа.
Если вы хотите, чтобы метка принудительно интерпретирова-
лась, как метка дальнего типа, можно использовать операцию FAR
PTR. Например, во фрагменте программы:
.
.
.
jmp FAR PTR NearLabel
nop
NearLabel:
.
.
.
выполняется переход дальнего типа на метку NearLabel, хотя эта
метка находится в том же сегменте кода, что и инструкция JMP.
Наконец, вы можете выполнить переход по адресу, записанному
в регистре или в переменной памяти. Например:
.
.
.
mov ax,OFFSET TestLabel
jmp ax
.
.
.
TestLabel:
.
.
.
Здесь выполняется переход на метку TestLabel, так же, как и
в следующем фрагменте:
.
.
.
.DATA
JumpTarget DW TestLabel
.
.
.
.CODE
.
.
.
jmp [JumpTarget]
.
.
.
TestLabel:
.
.
.
Условные переходы
-----------------------------------------------------------------
Описанные в предыдущем разделе инструкции переходов - это
только часть того, что вам потребуется для написания полезных
программ. В действительности необходима возможность писать такие
программы, которые могут принимать решения. Именно это можно де-
лать с помощью операций условных переходов.
Инструкция условного перехода может осуществлять или нет
переход на целевую (указанную в ней) метку, в зависимости от сос-
тояния регистра флагов. Рассмотрим следующий пример:
.
.
.
mov ah,1 ; функция DOS ввода с клавиату-
; ры
int 21h ; получить следующую нажатую
; клавишу
cmp al,'A' ; была нажата буква "A"?
je AWasTyped ; да, обработать ее
mov [TampByte], al ; нет, сохранить символ
.
.
.
AWasTyped:
push ax ; сохранить символ в стеке
.
.
.
Сначала в данной программе с помощью функции операционной
системы DOS воспринимается нажатая клавиша. Затем для сравнения
введенного символа с символом A используется инструкция CMP. Эта
инструкция аналогична инструкции SUB, только ее выполнение ни на
что не влияет, поскольку назначение данной инструкции состоит в
том, чтобы можно было сравнить два операнда, установив флаги так
же, как это делается в инструкции SUB. Поэтому в предыдущем при-
мере флаг нуля устанавливается в значение 1 только в том случае,
если регистр AL содержит символ A.
Теперь мы подошли к основному моменту. Инструкция JE предс-
тавляет инструкцию условного перехода, которая. осуществляет пе-
редачу управления только в том случае, если флаг нуля равен 1. В
противном случае выполняется инструкция, непосредственно следую-
щая за инструкцией JE (в данном случае - инструкция MOV). Флаг
|
adfun.ru
|
|
|
|