Лекция №1 Введение




НазваниеЛекция №1 Введение
страница3/6
Дата публикации03.03.2013
Размер1.23 Mb.
ТипЛекция
litcey.ru > Информатика > Лекция
1   2   3   4   5   6
^

Последовательность команд


mov BX,5

mov AL,array[BX]

загрузит в регистр AL элемент с индексом 5 – число 50. Тот же результат можно получить, загрузив в BX не индекс, а адрес массива:

mov BX,offset array

mov AL, 5[BX]

Другие варианты последней команды:

mov AL,[BX]+5

mov AL,[BX+5]

2.6. Базовый индексный. Адресуется память (байт или слово). Относительный адрес операнда определяется как сумма содержимого следующих пар регистров:

[BX][SI](подразумевается DS:[BX][SI])

[BX][DI](подразумевается DS:[BX][DI])

[BP][SI](подразумевается SS:[BP][SI])

[BP][DI](подразумевается SS:[BP][DI])

Допускается замена сегмента.

Пусть в сегменте данных определен массив из 10 слов:

words dw 0,10,20,30,40,50,60,70,80,90
^

Последовательность команд


mov BX,offset words

mov SI,10

mov AX,[BX][SI]

загрузит в регистр AX слов со смещением 10 байтов от начала массива, т. е. число 50.

^ 2.7. Базовый индексный со смещением. Адресуется память (байт или слово). Относительный адрес операнда определяется как сумма содержимого двух регистров и смещения. Обозначение этого способа адресации:

смещение [BX][SI](подразумевается DS: смещение[BX][SI])

смещение [BX][DI](подразумевается DS: смещение[BX][DI])

смещение [BP][SI](подразумевается SS: смещение[BP][SI])

смещение [BP][DI](подразумевается SS: смещение[BP][DI])

Допустимы также обозначения (со всеми регистрами) вида:

смещение [BX+SI ]

[смещение +BX+DI]

[BP][DI]+смещение

Пусть в сегменте данных определен массив из 24 байтов:

syms db ‘ЙЦУКЕНГШЩЗХЪ’

db ‘QWERTYUIOP{}’
^

Последовательность команд


mov BX,12

mov SI,6

mov DL,syms[BX][SI]

загрузит в регистр DL элемент с индексом 6 из второго ряда , т. е. код ASCII буквыU. Тот же результат можно получить, загрузив в один из регистров не индекс, а адрес массива:

mov BX,offset syms

mov SI,6

mov DL,12[BX][SI]

Лекция № 6

Команды сдвига
SAL/SHL Арифметический сдвиг влево/логический сдвиг влево

Команда SAL осуществляет сдвиг влево всех битов операнда. Старший бит операнда поступает в флаг CF. Если команда за­писана в формате

SAL операнд1

сдвиг осуществляется на 1 бит. В младший бит операнда загру­жается 0. Если команда записана в формате

SAL операнд,CL

сдвиг осуществляется на число битов, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда, пройдя через флаг CF, теряются, а младшие заполняются нулями.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение.

Каждый сдвиг влево эквивалентен умножению знакового числа на 2, поэтому команду SAL удобно использовать для возведения операнда в степень 2.

Поскольку логический сдвиг влево полностью эквивалентен арифметическому сдвигу влево, команда SHL является просто другим обозначением команды SAL.

Пример 1

mov AL,7

sal AL,1 ;AL=OEh=7*2

Пример 2

mov AX,lFFh

mov CL,2

sal AX,CL ;AX=07FCh=lFFh*4

Пример 3

mov SI,-l ;SI=FFFFh

mov CL,4

sal SI,CL ;SI=FFFOh=-l*16=-16

SAR Арифметический сдвиг вправо

Команда SAR осуществляет сдвиг вправо всех битов операн­да. Младший бит операнда поступает в флаг CF. Если команда записана в формате

SAR операнд,1

сдвиг осуществляется на 1 бит. Старший бит операнда сохраня­ет свое значение. Если команда записана в формате

SAR операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счет­чике CL, при этом в процессе последовательных сдвигов млад­шие биты операнда, пройдя через флаг CF, теряются, а стар­ший бит расширяется вправо.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непо­средственное значение.

Каждый сдвиг вправо эквивалентен делению знакового числа на 2, поэтому команду SAR удобно использовать для деления операнда на целые степени 2.

Пример 1

mov AL,7

sar AL,1 ;AL=3=7/2. Остаток потерян

Пример 2

mov AX,lFFOh

mov CL,4

sar AX,CL ;AX=01FFh=lFFOh/16

Пример 3

mov BX,-8 ;BX=FFF8h

mov CL,Z

sar BX,CL ;BX=FFFEh=-2=-8/4
SHR Логический сдвиг вправо

Команда SHR осуществляет сдвиг вправо всех бит операнда. Младший бит операнда поступает в флаг CF. Если команда за­писана в формате

SHR операнд,1

сдвиг осуществляется на 1 бит. В старший бит операнда загру­жается 0, а младший теряется. Если команда записана в фор­мате

SHR onepaнд, CL

сдвиг осуществляется на число бит, указанное в регистре-счет­чике CL, при этом в процессе последовательных сдвигов стар­шие биты операнда заполняются нулями, а младшие, пройдя через флаг CF, теряются.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непо­средственное значение.

Пример 1

mov AL,7

shr AL,1 ;AL=3

Пример 2

mov AX,lFFOh

mov CL,4

shf AX,CL ;AX=01FFh

Пример 3

mov DX,OFFFOh

mov CL,4

Shr DX,CL ;DX=OFFFh
RCL Циклический сдвиг влево через бит переноса

Команда RCL осуществляет сдвиг влево всех бит операнда. Если команда записана в формате

RCL операнд, 1

сдвиг осуществляется на 1 бит. В младший бит операнда зано­сится значение флага CF; старший бит операнда загружается в CF. Если команда записана в формате

RСL операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счет­чике CL, при этом в процессе последовательных сдвигов стар­шие биты операнда поступают сначала в CF, а оттуда - в младшие биты операнда.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непос­редственное значение.

Пример 1

clc ;Сбросим CF

mov AX,1

rc1 AX,1 ;AX=2; CF=0

Пример 2

mov DL,8

rcl DL,1 ;DL=10h, CF=0

Пример 3

mov BX,OFFFFh

rcl BX,1 ;BX=FFFEh, CF=1

Пример 4

с1с ;Сбросим CF

mov DH,3

mov CL,4 ;Счетчик сдвигов

rcl DH.CL ;DH=30h, CF=0

RCR Циклический сдвиг вправо через бит переноса

Команда RCR осуществляет сдвиг вправо всех бит операнда. Если команда записана в формате

RCR операнд,1

сдвиг осуществляется на 1 бит. В старший бит операнда зано­сится значение флага CF; младший бит операнда загружается в CF. Если команда записана в формате

RCR операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счет­чике CL, при этом в процессе последовательных сдвигов млад­шие биты операнда поступают сначала в CF, а оттуда - в старшие биты операнда.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непо­средственное значение.

Пример 1

с1с ;Сбросим флаг CF

mov AX,2

rcr АХ,1 ;АХ=1, CF=0

Пример 2

mov DL,8

rcr DL,1 ;DL=4, CF=0

Пример 3

mov BX,OFh

rcr BX,1 ;BX=7, CF=1

Пример 4

с1с ;Сбросим флаг CF

mov DH,80h

mov CL,5 ;Счетчик сдвигов

rcr DH,CL ;DH=4, CF=0
ROL Циклический сдвиг влево

Команда ROL осуществляет сдвиг влево всех бит операнда. Если команда записана в формате

ROL операнд,1

сдвиг осуществляется на 1 бит. Старший бит операнда загружа­ется в его младший разряд. Если команда записана в формате

ROL операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счет­чике CL, при этом в процессе последовательных сдвигов стар­шие биты операнда перемещаются в его младшие разряды

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непо­средственное значение.

Пример 1

mov АХ,1

rо1 АХ,1 ;AX=0002h

Пример 2

mov DL,8

rо1 DL,1 ;DL=lOh

Пример З

mov BX,OFFFEh

rо1 BX,l ;BX-FFFOh

Пример 4

mov DH,-OCOh

mov CL,2

rо1 DH,CL ;DH=3

ROR Циклический сдвиг вправо

Команда ROR осуществляет циклический сдвиг вправо всех бит операнда. Если команда записана в формате

ROR операнд,1

сдвиг осуществляется на 1 бит. Младший бит операнда записы­вается в его старший разряд. Если команда записана в форма­те

ROR операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счет­чике CL, при этом в процессе последовательных сдвигов млад­шие биты операнда перемещаются в его старшие разряды.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непо­средственное значение.

Пример 1

mov AX,2

ror АХ,1 ;АХ=1

Пример 2

Mov DL,8

Ror DL,l ;DL=4
Пример 3

Mov BX,OFh

Ror BX,l ;BX=8007h
Пример 4

mov DН,0Сh

mov CL,3

ror DH,CL ;DH=81h

Лекция № 7

Математические функции
Команды сложения

ADD Целочисленное сложение

Команда ADD осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда можно указывать ре­гистр (кроме сегментного) или ячейку памяти, в качестве вто­рого - регистр (кроме сегментного), ячейку памяти или непо­средственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.

Пример

mov BX, lFFEh

mov СХ.3

add BX,CX ;BX=2001h

ADC Целочисленное сложение с переносом

Команда ADC осуществляет сложение первого и второго опе­рандов, прибавляя к результату значение флага переноса CF. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное зна­чение, однако не допускается определять оба операнда одно­временно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда ADC обычно используется для сложения 32-разрядных чисел.

Пример 1

mov AX,1125h

adc AX,2C25h ;AX=3D4Bh, если CF был = 1

Пример 2

В полях данных:

numtow dw OFFFFh ;Младшая часть 2-го слагаемого numhigh dw 0005h ;Старшая часть 2-го слагаемого

;Число 5FFFFh=393215

В программном сегменте:

mov AX,0005h ;Младшая часть 1-го слагаемого

mov BX,0002h ;Старшая часть 1-го слагаемого

;Число 20005h=131077

add AX.numlow ;Сложение младших частей. АХ=4,CF=1

adc BX.numhigh ;Сложение старших частей с переносом.

;BX:AX=0008:0004h.

;Число 80004h=524292

INC Инкремент (увеличение на 1)

Команда INC прибавляет 1 к операнду, в качестве которого можно указывать регистр (кроме сегментного) или ячейку па­мяти размером как в байт, так и в слово. Не допускается ис­пользовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака.
Пример 1

mov AX,0563h

Inc AX ;AX=0564h

Пример 2

mov BH,15h

Inc BH ;BH=16h

Пример 3

mov AX.ASFFh

Inc AL ;AX=A500h

Inc AH ;AX=A600h

Команды вычитания

SUB Вычитание целых чисел

Команда SUB вычитает второй операнд (источник) из перво­го (приемника) и помещает результат на место первого опе­ранда. Исходное значение первого операнда (уменьшаемое) теряется. Таким образом, если команду вычитания записать в общем виде

sub операнд_1, операнд_2

то ее действие можно условно изобразить следующим образом:

операнд_1 - операнд_2 -> операнд_1

В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредствен­ное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байта­ми или словами и представлять числа со знаком или без зна­ка.

Примеры

sub CX,5 ; Выполняется действие СХ-5->СХ

sub DH,DL ; Выполняется действие DH-DL->DH

sub AX,mem ; Выполняется действие АХ-(mem)->АХ

sub byte ptr men,DL ; Выполняется действие(mem)-DL->mem

sub tab1e[BX],'O' ; Выполняется действие (table[BX])-30h

; -> table[BX]

SBB Целочисленное вычитание с займом

Команда SBB вычитает второй операнд (источник) из перво­го (приемника). Результат замещает первый операнд, предыду­щее значение которого теряется. Если установлен флаг CF, из результата вычитается еще 1. Таким образом, если команду вычитания записать в общем виде

sbb операнд_1, операнд_2

то ее действие можно условно изобразить следующим образом:

операнд_1 - операнд_2 - CF -> операнд_1

В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго -регистр (кроме сегментного), ячейку памяти или непосред­ственное значение, однако не допускается определять оба опе­ранда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда SBB обычно используется для вычитания 32-разрядных чисел.


Пример 1

mov AX,76A5h

sbb AX,76A3h ; АХ=-1, если CF был=1 ;АХ=2, если CF был=0

Пример 2

В полях данных:

numlow dw 000Ah ;Младшая часть вычитаемого

numhigh dw 000lh ;Старшая часть вычитаемого

;Число 1000Аh=65546

В программном сегменте:

mov АХ,0 ;Младшая часть уменьшаемого

mov DX,0002 ;Старшая часть уменьшаемого

;Число 20000h=131072

sub AX,num1ow ; Вычитание младших частей.

;AX=FFF6h, CF=1

sbb DX,numhigh ;Вычитание старших частей с займом.

;DX:AX=0000:FFF6h=65526

DEC Декремент (уменьшение на 1)

Команда DEC вычитает 1 из операнда, в качестве которого можно указывать регистр (кроме сегментного) или ячейку па­мяти размером как в байт, так и в слово. Не допускается ис­пользовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака.

Пример 1

mov AX.OFFFFh

dec AX ;AX=FFFEh

Пример 2

mov CX, О

dec CX ;CX=FFFFh=-l

Команда сравнения

СМР Сравнение

Команда СМР выполняет вычитание второго операнда из первого. В соответствии с результатом вычитания устанавлива­ются состояния флагов CF, PF, AF, ZF, SF и OF. Сами опе­ранды не изменяются. Таким образом, если команду сравнения записать в общем виде

cmp операнд_1, операнд_2

то ее действие можно условно изобразить следующим образом:

операнд_1 - операнд_2 -> флаги процессора

В качестве первого операнда можно указывать регистр (кро­ме сегментного) или ячейку памяти, в качестве второго - ре­гистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда од­новременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Обычно вслед за командой СМР стоит одна из команд услов­ных переходов, анализирующих состояние флагов процессора.

Пример

cmp AX,562Dh

Je equal ; Переход на метку equal, если AX=562Dh

Ja above ; Переход, на метку above, если

; содержимое АХ, рассматриваемое как

; число без знака, превышает

; беззнаковое число 562Dh
NEG Изменение знака, дополнение до 2

Команда NEG выполняет вычитание знакового целочисленного операнда из нуля, превращая положительное число в отрицательное и наоборот. В качестве операнда можно, указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение.

Примеры

mov АХ, 0001

neg AX ; AX=FFFfh=-l

mov BX, -2 ; BX=FFFgh=-2

neg BX ; BX=0002h
Команды умножения

MUL Умножение целых беззнаковых чисел

Команда MUL выполняет умножение целого беззнакового числа, находящегося в регистре AL (в случае умножения на байт) или АХ (в случае умножения на слово), на операнд-ис­точник (целое число без знака). Размер произведения в два раза больше размера сомножителей.

Для однобайтовых операций один из сомножителей помеща­ется в регистр

AL, после выполнения операции произведение записывается в регистр АХ.

Для двухбайтовых операции один из сомножителей помеща­ется в регистр АХ;

после выполнения операции произведение .записывается в регистры DX:AX (в DX - старшая часть, в АХ – младшая). В качестве операнда-сомножителя можно указывать регистр данных или ячейку памяти; не допускается умножение на не­посредственное значение.

Пример1

mov AL.5 ;Первый сомножитель

mov BL, 3 ;Второй сомножитель

mul BL ;AX=OOOFh (произведение)

Пример 2

mov AX,256 ;Первый сомножитель

mov BX,256 ;Второй сомножитель

mul BX ;DX=0001h, AX=OOOOh

;(число 65536)

Пример 3

mov AL, 251 ;AL=FBh

mov BL,3 ;BL=03h

mu1 BL ;AX=02Flh

IMUL Умножение целых знаковых чисел

Команда IMUL выполняет умножение целого знакового чис­ла, находящегося в регистре AL (в случае деления на байт) или АХ (в случае деления на слово), на операнд-источник (це­лое число со знаком). Размер произведения в два раза больше размера сомножителей.

Для однобайтовых операций один из сомножителей помеща­ется в регистр AL; после выполнения операции произведение записывается в регистр АХ.

Для двухбайтовых операций один из сомножителей помеща­ется в регистр АХ; после выполнения операции произведение записывается в регистры DX:AX (в DX - старшая часть, в АХ - младшая).

В качестве операнда-сомножителя можно указывать регистр данных или ячейку памяти; не допускается умножение на не­посредственное значение.

Пример 1

mov AL,5 ; Первый сомножитель

mov BL,3 ; Второй сомножитель

imul BL ; AX=OOOFh (произведение)

Пример 2

mov AX,256 ; Первый сомнохитель

mov BX,256 ; Второй сомнохитель

imul BX ; DX=0001h, AX=OOOOh (число 65536)

Пример 3

mov AL,-5 ; AL=FBh

mov BL,3 ; BL=03h

imul BL ; AX=FFFlh (-15)

Команды деления

DIV Деление целых беззнаковых чисел

Команда DIV выполняет деление целого числа без знака, находящегося в регистрах АХ (в случае деления на байт) или DX:AX (в случае деления на слово), на операнд-источник (це­лое число без знака). Размер делимого в два раза больше раз­меров делителя и остатка.

Для однобайтовых операций делимое помещается в регистр АХ; после

выполнения операции частное записывается в ре­гистр AL, а остаток - в регистр АН.

Для двухбайтовых операций делимое помещается в регистр DX:AX (в DX

старшая часть, в АХ - младшая); после вы­полнения операции частное записывается в регистр АХ, а оста­ток - в регистр DX.

В качестве операнда-делителя можно указывать регистр дан­ных или ячейку памяти; не допускается деление на непосредс­твенное значение. Если делитель равен 0, или если частное не помещается в назначенный регистр, возбуждается прерывание с вектором 0.

Пример 1

mov AX,506 ;Делимое

mov BL,50 ;Делитель

div BL ;AL=OAh (частное), AH=06h

;(остаток)

Пример 2

mov DX,1 ;Старшая часть делимого 65537

mov AX,1 ;Младшая часть делимого 65537

mov СХ,256 ;делитель

div СХ ;AX=0100h (частное), OX=0001h

;(остаток)

IDIV Деление целых знаковых чисел

Команда IDIV выполняет деление целого числа со знаком, находящегося в регистрах АХ (в случае деления на байт) или DX:AX (в случае деления на слово), на операнд-источник (це­лое число со знаком). Размер делимого в два раза больше раз­меров делителя и остатка. Оба результата рассматриваются как числа со знаком, причем знак остатка равен знаку делимого.

Для однобайтовых операций делимое помешается в регистр АХ; после выполнения операции частное записывается в ре­гистр AL. а остаток - в регистр АН.

Для двухбайтовых операций делимое помещается в регистры DX:AX (в DX - старшая часть, в АХ - младшая); после вы­полнения операции частное записывается в регистр АХ, а оста­ток - в регистр DX.

В качестве операнда-делителя можно указывать регистр дан­ных или ячейку памяти: не допускается деление на непосред­ственное значение. Если делитель равен 0, или если частное не помещается в назначенный регистр, возбуждается прерыва­ние через вектор 0.

Пример 1

Mov AX,506 ;Делимое

mov BL,50 ;Делитель

div ;AL=OAh (частное), AH=06h (остаток)

Пример 2

mov DX,1 ;Старшая часть делимого 65537

mov АХ,1 ;Младшая часть делимого 65537

mov CX.256 ;Делитель

div ;AX=0100h (частное), DX=0001h(остаток)

Пример 3

mov AX,-506 ;AX=FE06h, делимое

mov BL,50 ;Делитель

idiv ;AL=F6h (-10), AH=FAh (-6)


Лекция № 8

Команды управления процессом
^ 1. Команда безусловного перехода JMP

Команда безусловного перехода JMP может ис­пользоваться в 5 разновидностях. Переход может быть:

- прямым коротким (в пределах -128...+127 байтов);

- прямым ближним (в пределах текущего сегмента команд);

- прямым дальним (в другой сегмент команд);

- косвенным ближним (в пределах текущего сегмента ко­манд через ячейку с адресом перехода);

- косвенным дальним (в другой сегмент команд через ячей­ку с адресом перехода).

Рассмотрим структуру программы с переходами разного вида.

^ 1.1. Прямой короткий (short) переход.

seg segment 'code'

. . .

jmp short cont ; Koд ЕВ dd

. . .

cont:

. .

seg ends

Метка cont должна отстоять -от команды, следующей за JMP, не более, чем на 128 байтов назад или на 127 байтов вперед. Если cont стоит в программе до команды JMP, описа­тель SHORT можно опустить. В приведенном коде команды dd обозначает байт с величиной относительного смещения к точке перехода от команды, следующей за командой JMP.

^ 1.2. Прямой ближний (near), или внутрисегментный переход.

seg segment 'code'

. . .

jmp short cont ; Koд Е9 dddd

. . .

cont:

. . .

seg ends

Метка cont может находиться в любом месте сегмента ко­манд, как до, так и после команды JMP. В коде команды dddd обозначает слово с величиной относительного смещения к точке перехода от команды, следующей за командой JMP.

В некоторых случаях удобно пользоваться другой формой команды ближнего перехода:

jmp near ptr cont

в которой в явной форме указывается, что переход должен быть ближним (в том же сегменте команд).

^ 1.3. Прямой дальний (far), или межсегментный переход.

segl segment 'code'

. . .

jmp far ptr cont ;koд EA dddd ssss

. . .

segl ends

seg2 segment 'code'

. . .

cont:

. . .

seg2 ends

Метка cont находится в другом сегменте команд этой двух­сегментной программы. В коде команды ssss - сегментный адрес сегмента seg2, а dddd - относительный адрес точки пере­хода cont в сегменте команд seg2 (относительно начала этого сегмента).

^ 1.4. Косвенный ближний (внутрисегментный) переход.

seg segment 'code'

. . .

jmp DS:contadr ; Код FF 26 dddd

. . .

cont: ; Точка перехода

segl ' ends

dat segment

. . .

contadr dw cont ; Адрес перехода (слово)

. . .

dat ends

Точка перехода cont может находиться в любом месте сег­мента команд, как до, так и после команды JMP. В коде ко­манды dddd обозначает относительный адрес слова contadr в сегменте данных, содержащем эту ячейку. Такой способ пере­хода удобен тем, адрес перехода может быть вычислен про­граммно и помещен в ячейку contadr по ходу выполнения про­граммы.

В некоторых случаях удобно пользоваться другой формой команды косвенного перехода:

jmp word ptr contadr

Таким образом, и указание сегментного регистра, и описа­тель WORD PTR придают команде косвенность (переход осу­ществляется не на метку contadr, а по адресу, содержащемуся в ячейке contadr).

^ 1.5. Косвенный дальний (межсегментный) переход.

segl segment 'code'

. . .

jmp DS:contadr ; Код FF 2E dddd

. . .

segl ends

seg2 segment 'code'

. . .

cont: ; Точка перехода

. . .

seg2 ends

dat segment

. . .

contadr dd cont ; Двухсловный адрес точки перехода

. . .

dat ends

Точка перехода cont находится в другом сегменте команд этой двухсегментной программы. В коде команды dddd обозна­чает относительный адрес слова contadr в сегменте данных. Ячейка contadr объявляется директивой DD и содержит двух­словный адрес точки перехода - в первом слове смещение cont в сегменте команд seg2, во втором слове сегментный адрес seg2. Обе компоненты адреса перехода могут быть вычислены и помещены в ячейку contadr по ходу выполнения программы.

В некоторых случаях удобно пользоваться другой формой команды косвенного перехода:

jmp dword ptr contadr

Здесь описатель DWORD PTR говорит о том, что адрес хра­нится в двухсловной ячейке и, следовательно, осуществляется дальний косвенный переход (в другой сегмент).
^ 2. Команды условного перехода Jсс.
Команды, обозначаемые (в книгах, не в программах!) Jcc, осуществляют переход по указанному адресу при выполнении условия, заданного мнемоникой команды. Если заданное усло­вие не выполняется, переход не осуществляется, а выполняется команда, следующая за командой Jcc. Переход может осущест­вляться как вперед, так и назад в диапазоне +127...-128 бай­тов.

^ В составе команд процессора предусмотрены следующие ко­манды условных переходов:


Команда

Перейти, если

Условие перехода

JA

выше

CF=-0 и ZF=-0

JAE

выше или равно

CF=-0

JBE

ниже или равно

CF=1 или ZF=-1

JC

перенос

CF=1

JE

равно

ZF=1

JG

больше

ZF=0 или SF=OF

JL

меньше

SF не равно OF

JLE

меньше или равно

ZF=1 или SF не равно OF

JNAE

не выше и не равно

CF=1

JNB

не ниже

CF=0

JNC

нет переноса

CF=0

JNE

не равно

ZF=-0

JNG

не больше

ZF=1 или SF не равно OF

JNGE

не больше и не равно

SF не равно OF

JNLE

не меньше и не равно

ZF=0 и SF=OF

JN

нет переполнения

OF=0

JNS

знаковый бит равен 0

SF=0

JNZ

не нуль

ZF=0

JP

есть четность

PF=1

JS

знаковый бит равен 1

SF=1

JZ

нуль

ZF=1

Пример 1

сmр AX,0 ;АХ=0?

je equal ;Если да, перейти на метку equal

Пример 2

int 21 h ; Вызов системной функции

jc error ;Если CF=1 (ошибка), перейти на метку error

1   2   3   4   5   6

Похожие:

Лекция №1 Введение iconАнализ к ф. м н., доцент Рудой Евгений Михайлович 2013-2014 уч год
Лекция (2 часа) Введение. Нормированные пространства. Компактные множества. Теорема Хана-Банаха
Лекция №1 Введение iconЛекция введение
Материалы данного файла могут быть использованы без ограничений для написания собственных работ с целью последующей сдачи в учебных...
Лекция №1 Введение iconЛекция «Сущность и проблемы вэд, состояние вэд в России» 1 час. 2...
Лекция «Внешнеэкономические операции и сделки: виды, классификация, организация» 1 час
Лекция №1 Введение iconЛекция 1 введение
Петрофизика сформировалась к началу 60-х годов, когда появились обобщаю­щие труды по всем вопросам изучения физических свойств пород...
Лекция №1 Введение icon1. Лекция: Введение. История, предмет, структура информатики
Хотя информатика и считается достаточно молодой наукой по отношению ко многим другим отраслям знания, но предпосылки к ее зарождению...
Лекция №1 Введение iconЛекция №1. Введение в Экономикс. Основная проблема экономики и производственные...
Под материальными потребностями подразумевается желания потребителей приобрести и использовать товары и услуги, которые доставят...
Лекция №1 Введение iconЛекция №1
Лекция № Общие принципы эффективной организации учебного процесса. Физиологиче­ская цена учебных нагрузок
Лекция №1 Введение iconЛекция №1
Лекция № Общие принципы эффективной организации учебного процесса. Физиологиче­ская цена учебных нагрузок
Лекция №1 Введение iconЛекция №1
Лекция № Общие принципы эффективной организации учебного процесса. Физиологиче­ская цена учебных нагрузок
Лекция №1 Введение iconЛекция №1
Лекция № Общие принципы эффективной организации учебного процесса. Физиологиче­ская цена учебных нагрузок
Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
litcey.ru
Главная страница