Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скляров И. Изучаем Assembler за 7 дней (2010).pdf
Скачиваний:
1335
Добавлен:
23.02.2015
Размер:
2.11 Mб
Скачать

http://www.sklyaroff.ru

76

mov ax,2[bx][si]

Базово-индексная адресация имеет множество альтернативных форм. Так, эквивалентными формами являются:

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

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

4.3.8. Адресация по базе с индексированием и масштабированием

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

EA = База + (Индекс x Множитель) + Смещение

Схематически это показано на рис. 4.2.

 

EAX

 

EAX

 

 

 

 

 

 

 

 

 

 

 

 

 

CS :

EBX

 

EBX

 

 

 

 

 

SS :

 

 

ECX

 

1

 

 

 

ECX

 

 

 

 

 

DS :

EDX

 

EDX

*

2

 

смещение

 

ES :

EBP

4

 

 

EBP

 

 

 

FS :

 

 

 

8

 

 

 

ESP

 

ESI

 

 

 

 

GS :

EDI

 

 

 

 

 

 

 

EDI

 

 

 

 

 

 

 

 

 

 

 

 

 

ESI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.2. Полная форма адресации

4.4. Относительные операторы

Операторы сравнения сопоставляют выражение_1 и выражение_2, после чего возвращают значение – единица, если условие выполняется, или ноль – если не выполняется.

Синтаксис операторов сравнения:

выражение_1 EQ выражение_2

выражение_1 NE выражение_2

выражение_1 LT выражение_2

выражение_1 GT выражение_2

выражение_1 GE выражение_2

В табл. 4.2 перечислены операторы сравнения вместе со значениями, которые они возвращают при выполнении условия.

Пример использования:

mov al,sum lt 15 ; если sum < 15, то al=1

 

http://www.sklyaroff.ru

77

 

 

Таблица 4.2. Операторы сравнения

 

 

 

 

 

Оператор

Возвращаемое значение

 

 

 

 

 

 

EQ

ИСТИНА, если выражения равны

 

 

NE

ИСТИНА, если выражения не равны

 

 

LT

ИСТИНА, если левое выражение меньше, чем правое

 

 

LE

ИСТИНА, если левое выражение меньше либо равно правому

 

 

GT

ИСТИНА, если левое выражение больше, чем правое

 

 

GE

ИСТИНА, если левое выражение больше или равно правому

 

 

 

 

 

4.5. Логические команды

Логические команды выполняют логические операции над битами, при этом бит 1 трактуется как "истина", а бит 0 — как "ложь". В ассемблере существует четыре основные логические команды: AND (операция логического И), OR (операция логического ИЛИ), XOR (операция логического "исключающего ИЛИ") и NOT (логическое отрицание):

AND приемник,источник

OR приемник,источник

XOR приемник,источник NOT приемник

AND устанавливает бит результата в 1, если оба бита, бит источника и бит приемника установлены в 1.

OR устанавливает бит результата в 1, если один из битов, бит источника или бит приемника установлен в 1.

XOR устанавливает бит результата в 1, если бит источника установлен в 0. NOT инвертирует бит источника.

В табл. 4.3 показаны все возможные варианты выполнения логических операций.

Таблица 4.3. Логические операции

И

ИЛИ

Исключающее ИЛИ

Отрицание

 

 

 

 

0 AND 0 = 0

0 OR 0 = 0

0 XOR 0 = 0

NOT 0 = 1

0 AND 1 = 0

0 OR 1 = 1

0 XOR 1 = 1

NOT 1 = 0

1 AND 0 = 0

1 OR 0 = 1

1 XOR 0 = 1

 

1 AND 1 = 1

1 OR 1 = 1

1 XOR 1 = 0

 

 

 

 

 

Так как логические операции являются побитовыми, то для понимания их действия следует перевести числа в двоичный вид и провести операцию над каждым битом.

Примеры:

mov ax, 381h

 

; ax = 0001110000001b

mov bx, 15EBh

; bx = 1010111101011b

and ax,bx

 

; ax = 0000110000001b = 181h (результат)

mov ax, 20h

;

ax = 100000b

mov bx, 61h

;

bx = 1100001b

or ax,bx

;

ax = 1100001b = 61h (результат)

mov ax, 33h

;

ax = 110011b

mov bx, 0Ah

;

bx = 001010b

xor ax,bx

;

ax = 111001b = 39h (результат)