Индексную базовую базово-индексную

 

индексная

При задании адреса используется один из индексных регистров esi ( si ) или edi ( di ).При таком способе адресации адрес области памяти может иметь вид:

-индексный регистр в квадратных скобках. Например, команда вида mov [esi], ’\0’

-некоторое символическое имя и индексный регистр в квадратных скобках.mov arr[esi], 10
-в квадратных скобках индексный регистр, символическое имя и константы, соединенные знаком +. mov [arr + esi], 1 mov [arr + esi+4], 2

С помощью этого метода разрешается организовывать доступ к одномерным массивам байтов. Смещение соответствует адресу начала массива. Число в регистре - индексу элемента массива, который надо считать. Eсли массив состоит из байтов, базовый регистр увеличиваем на 1, если из слов, увеличиваем на 2, если из двойных слов - на 4. Масштабирование, которое выполняется в Си при увеличении адреса можно заменить умножением базового регистр на 2, для двойных слов - на 4.

 

базовая

Если применяется базовая адресация, то при задании адреса используется один из базовых регистров: либо ЕBX(ВХ) либо BP

При таком способе адресации адрес области памяти, куда помещается информация, может быть записан:

-заключением в квадратные скобки базового регистра: MOV [ebx],10
-заключением в квадратные скобки не базового регистра, символического имени: MOV [x+ebx],10

- заключением в квадратные скобки базового регистра, символического имени и некоторого числа-смещения: MOV [x+ebx+4],10

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

 

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

это когда при задании адреса используются один из базовых регистров : ebx (bx) ebp (bp)и один из индексных регистров: esi (si)либоedi (di)

-либозаключением в квадратные скобки базового и индексного регистров, например, можно записать так : MOV[BX,SI],25
- либо заключением в квадратные скобки не только базового и индексного регистров, но и некоторого символического имени, например MOV А[ЕBX,ЕSI],2007
- либо заключением в квадратные скобки не только базового регистра и индексного регистра, некоторого символического имени, но и некоторого числа, называемого смещением. Например,

MOV [X+ЕBX+ЕSI+4],2007

mov ax,[bx+si+2]
mov ax,[bx][si]+2
mov ax,[bx+2][si] Разные способы записи одного и того же

mov ax,[bx][si+2]
mov ax,2[bx][si]

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

Это самая полная схема адресации, в которую входят все случаи, рассмотренные ранее как частные. Смещение может быть байтом или двойным словом. Если ESP или ЕВР используются в роли базового регистра, селектор сегмента операнда берется по умолчанию из регистра SS, во всех остальных случаях - из DS.

mov [ebx-4][esi*4],edx

 

 

Арифметические команды

Двоичной aрифметики Десятичной арифметики
Add Imul Aaa
Adc Mul Daa
Inc Idiv Aas
Sub Div Das
Sbb Neg Aam
Dec   Aad

 

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

add приёмник, источник– выполняет сложение приёмника и источника, результат заносится в приёмник. Источник не изменяется, меняются флаги. Команда ADD не различает числа со знаком и без знака, но, употребляя значения флагов CF (перенос при сложении чисел без знака), OF (перенос при сложении чисел со знаком) и SF (знак результата), разрешается применять ее и для тех, и для других.

adc приёмник, источник– выполняет сложение приёмника, источника и флага CF. Обычно эта команда используется для сложения чисел повышенной точности.

inc приемник (инкремент) - увеличивает приемник (регистр или переменная) на 1. Единственное отличие этой команды от add приемник,1
состоит в том, что флаг CF не затрагивается, а остальные меняются в соответствии с правилами сложения.

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

sub приёмник, источник – вычитает источник из приёмника, результат заносит в приёмник.
sbb приёмник, источник – вычитает из приёмника значение источника, затем вычитает значение CF . Её можно использовать для вычитания 64-битных слов.

dec приемник (декремент) - увеличивает приемник (регистр или переменная) на 1. Единственное отличие этой команды от sub приемник,1
состоит в том, что флаг CF не затрагивается, а остальные меняются в соответствии с правилами сложения.

 

Команды умножения

MUL источник - умножение чисел без знака
Источник умножается на al|ax|eaxв зависимости от разрядности операнда.
Результат располагается в ax|dx:ax|edx:eaxсоответственно.
Если результат поместился в младшую половину, то CF=OF=0, иначе CF=OF=1. ZF, SF, AF, PF – не определены.

Умножение со знаком:

1.IMUL источник (регистр или переменная) умножается на AL, АХ или ЕАХ (в зависимости от размера операнда), и результат располагается в АХ, DX и AX или EDX и EAX соответственно.
2.IMUL приемник, источник: источник (число, регистр или переменная) умножается на приемник (регистр), и результат заносится в приемник.
3.IMUL приемник, источник1, источник2:источник 1 (регистр или переменная) умножается на источник 2 (число), и результат заносится в приемник (регистр).

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

DIV источник – целочисленное деление без знака.
IDIV источник – целочисленное деление co знаком.
Команда DIV выполняет деление целого числа без знака , из регистра АХ (в случае деления на байт), DX и AX (в случае деления на слово) и EDX и EAX (в случае деления на двойное слово), на операнд-источник (целое число без знака). Частное заносится в AL(в случае деления на байт), AX(в случае деления на слово),EAX(в случае деления на двойное слово); остаток в AH(в случае деления на байт), DX(в случае деления на слово), EDX(в случае деления на двойное слово). Размер делимого в два раза больше размеров делителя и остатка. Флаги ZF, SF, CF, OF, AF, PF после этой команды не определены.

 

Остальные команды

Команда изменения знака NEG.
NEG приемник (регистр или переменная)
Выполняет над числом, содержащимся в приемнике (регистр или переменная), операцию дополнения до двух. Эта операция эквивалентна обращению знака операнда, если рассматривать его как число со знаком. Если приемник равен нулю, флаг CF = 0, иначе 1. Остальные флаги (OF, SF, ZF, AF, PF) назначаются в соответствии с результатом операции.

КомандаXCHG выполняет обмен двух значений. Обмен значений можно выполнять двух между регистрами или между регистрами и памятью:

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

Команда NOP - ничего не делающая команда

NOP

Эта команда не делает абсолютно ничего (пустая команда). Она только занимает пространство и время. Используется для резервирования места в сегменте кода или организации программной задержки.

 

22. Команды преобразования:

CBW Преобразование байта в слово (convert byte to word)
Команда CBW заполняет регистр AH знаковым битом содержимого регистра АL, преобразуя тем самым 8-разрядное число со знаком в 16-разрядное. Команду удобно использовать для преобразования байтового делимого в двухбайтовое (слово) при делении на 8-разрядный операнд.