Работа с битами. Команды сдвига. Логические команды. Адресное пространство. Способы адресации. Организация сравнения. Циклы

Содержание

Слайд 2

Команды работы с битами sal sar shr shl rcl rcr rol

Команды работы с битами

sal
sar
shr
shl
rcl
rcr
rol
ror
shrd
shld
bsf
bsr
bt
btc
btr
bts

Команды работы с битами

/28

Слайд 3

Команды сдвига , Команды работы с битами /28

Команды сдвига

,

Команды работы с битами

/28

Слайд 4

Использование команд сдвига «Логический» сдвиг shl …; cf ← op ←

Использование команд сдвига

«Логический» сдвиг
shl …; cf ← op ← 0
shr

…; 0 → op → cf
«переворот» байт
умножение/деление

Арифметические
sal …; тоже что shl
sar …;
знак → мантисса → cf

Циклические
rol …
ror …
дублирование в cf
rcl …
rcr …
замыкание через cf

Команды работы с битами

В приёмник
shld …;
shrd …;
источник → приёмник
последний бит → cf

/28

Слайд 5

and or xor not test Логические команды Поразрядные логические команды /28

and
or
xor
not
test

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

Поразрядные логические команды

/28

Слайд 6

Поразрядные логические команды Логические команды not r8,16,32 m8,16,32 , /28

Поразрядные логические команды

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

not

r8,16,32

m8,16,32

,

/28

Слайд 7

a = a xor b b = a xor b a

a = a xor b
b = a xor b
a = a

xor b

tmp = a
a = b
b = tmp

a = a + b
b = a – b
a = a – b

Использование логических команд

Сброс значения регистра
xor EAX, EAX
Перестановка 2х чисел a и b

/28

Слайд 8

Примеры использования команд Команды работы с битами Пересылка данных Логические команды /28

Примеры использования команд

Команды работы с битами

Пересылка данных

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

/28

Слайд 9

Примеры использования команд Быстрое умножение Вычисление абсолютного значения числа (если a

Примеры использования команд

Быстрое умножение
Вычисление абсолютного значения числа (если a<0, то а=-a)
Определения минимума из

двух чисел (если bВыбор из двух чисел по условию (если a<>0 то а=б, иначе а=с)

Команды работы с битами

Пересылка данных

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

/28

Слайд 10

Модель адресного пространства Способы задания операндов: неявно на микропрограммном уровне непосредственный

Модель адресного пространства

Способы задания операндов:
неявно на микропрограммном уровне
непосредственный операнд

в самой команде
указание регистра
указание памяти
указание порта ввода/вывода

/28

Слайд 11

Базово-индексная со смещением Базово-индексная Базовая со смещением Базовая Со смещением Относительная

Базово-индексная со смещением

Базово-индексная

Базовая со смещением

Базовая

Со смещением

Относительная

Абсолютная

Прямая

Способы адресации

Индексная

Косвенная

/28

Слайд 12

Прямая адресация Абсолютная mov ebx,val Относительная jmp met DS val jmp

Прямая адресация

Абсолютная mov ebx,val

Относительная jmp met

DS

val

jmp met

CS

met-$

IP

met:

/28

Слайд 13

Косвенная адресация – адресация с помощью заключенных в квадратные скобки регистров,

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

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

адрес памяти
Директива переопределения типа  ptr 
– применяется для переопределения или уточнения типа метки или переменной, определяемых выражением.
Тип может принимать одно из следующих значений: 
byte, word, dword, qword, tbyte, near, far.
mov ebx, dword ptr mem[ecx*4+eax]

/28

Слайд 14

Косвенная базовая адресация – регистровая адресация эффективный адрес операнда может находиться

Косвенная базовая адресация

– регистровая адресация
эффективный адрес операнда может находиться в

любом из регистров общего назначения, кроме esp и ebp
Пример,
mov ax,[ecx]
команда помещает в регистр ax содержимое слова по адресу из сегмента данных со смещением, хранящимся в регистре ecx.
Так как содержимое регистра легко изменить в ходе работы программы, данный способ адресации позволяет динамически назначить адрес операнда для некоторой машинной команды.
Используется для организации циклических вычислений и для работы с различными структурами данных типа таблиц или массивов. 

/28

Слайд 15

Косвенная базовая адресация со смещением – регистровая адресация со смещением является

Косвенная базовая адресация со смещением

– регистровая адресация со смещением
является дополнением

предыдущего и предназначен для доступа к данным с известным смещением относительно некоторого базового адреса
Пример
mov ax,[edx+3h]
команда помещает в регистр ax слова из области памяти по адресу: содержимое edx + 3h
mov ax,mas[dx]
команда пересылает в регистр ax слово по адресу: содержимое dx плюс значение идентификатора mas, равное смещению этого идентификатора относительно начала сегмента.
Используется для доступа к элементам структур данных, когда смещение элементов известно заранее, на стадии разработки программы, а базовый (начальный) адрес структуры должен вычисляться динамически, на стадии выполнения программы.

/28

Слайд 16

Индексная адресация похожа на косвенную базовую адресацию со смещением. Для формирования

Индексная адресация

похожа на косвенную базовую адресацию со смещением. Для формирования

эффективного адреса используется один из регистров общего назначения. Но индексная адресация связана с возможностью так называемого масштабирования содержимого индексного регистра.
Пример
mov ax,mas[si*2]
команда помещает в регистр ax слово по адресу: значение идентификатора mas плюс значение индексного регистра si масштабируемое в 2 раза.
Используется для организации циклических вычислений и для работы с массивами при условии , что размер элементов массива составляет 1, 2, 4 или 8 байт

/28

Слайд 17

Базово -индексная адресация и базово-индексная со смещением Эффективный адрес формируется как

Базово -индексная адресация и базово-индексная со смещением

Эффективный адрес формируется как сумма

трех составляющих:
cодержимого базового регистра
cодержимого индексного регистра с масштабированием
значение поля смещения в команде
Пример
mov eax,[esi][edx]
mov eax,[esi+5][edx]
add ax,array[esi*4][ebx]
Масштабирование допускается использовать для любых регистров общего назначения.

/28

Слайд 18

Инструкция XCHG Пересылка данных , /28

Инструкция XCHG

Пересылка данных

,

/28

Слайд 19

Инструкции загрузки адреса Пересылка данных , , /28

Инструкции загрузки адреса

Пересылка данных

,

,

/28

Слайд 20

Команды передачи управления Передача управления /28

Команды передачи управления

Передача
управления

/28

Слайд 21

Условные переходы Передача управления J?? ; много вариантов По результатам сравнения

Условные переходы

Передача
управления

J?? ; много вариантов
По результатам сравнения
Equal, Not Equal
Greater, Less,

Greater or Equal, Less or Equal (со знаком)
Above, Below, Above or Equal, Below or Equal (без знака)
Примеры: JL - если SF != OF, JB - если CF=1
По состоянию одного флага
[Not] flag {Z|S|C|O|P}F set to 1»
JZ, JNZ,…,JP,JNP
По состоянию счётчика
JECXZ – обход цикла для реализации «предусловия»

/28

Слайд 22

Команда сравнения CMP op1,op2 «безрезультатное» сравнение mov eаx, … mov ebx,…

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

CMP op1,op2
«безрезультатное» сравнение

mov eаx, …
mov ebx,…

L2: ; ……….

jmp L2

mov

eсx,ebx

cmp eax,ebx

L1: mov eсx,eax

Пример:
a=…;
b=…;
if (a b) c=a;
else c=b;

/28

Слайд 23

Команда сравнения CMP op1,op2 «безрезультатное» сравнение Пример: a=…; b=…; if (a

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

CMP op1,op2
«безрезультатное» сравнение

Пример:
a=…;
b=…;
if (a b) c=a;
else c=b;

>

mov eаx, …
mov

ebx,…

L2: ; ……….

jmp L2

mov eсx,ebx

cmp eax,ebx

L1: mov eсx,eax

jg L1

/28

Слайд 24

Команда сравнения CMP op1,op2 «безрезультатное» сравнение Пример: a=…; b=…; if (a

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

CMP op1,op2
«безрезультатное» сравнение

Пример:
a=…;
b=…;
if (a b) c=a;
else c=b;

<=

mov eаx, …
mov

ebx,…

L2: ; ……….

jmp L2

mov eсx,ebx

cmp eax,ebx

L1: mov eсx,eax

jle L1

/28

Слайд 25

Циклы LOOP* ; LOOP: if (! ECX)goto . счётчик цикла в

Циклы

LOOP* ;
LOOP: if (! ECX)goto <метка>.
счётчик цикла в ECX,
LOOPE/LOOPZ: Поиск

отличного
if(! ECX || ZF)goto <метка>
LOOPNE/LOOPNZ: Поиск требуемого
if(! ECX || !ZF)goto <метка>

LL: ……

loop LL

mov ecx,…

EL: ……

jecxz EL

ecx!=0

Передача
управления

/28

Слайд 26

Функции: логика работы CALL Calc Логика: PUSH EIP EIP = EIP+

Функции: логика работы

CALL Calc
Логика: PUSH EIP
EIP = EIP+ смещение к процедуре

Calc
Calc PROC
Тело_процедуры
RET
Calc ENDP
Логика: POP EIP
PUSH EBP
POP EBP

Передача
управления

/28

Слайд 27

Код команды Структура машинной команды процессора mov EBX,ECX; 89CB mov BX,CX

Код команды

Структура машинной команды процессора

mov EBX,ECX;
89CB
mov BX,CX
6689CB
mov ECX,6[EBX+EDI*4]
8B4CBB06

Примеры

кода команды

/28