Читайте также:
|
|
Относительный адрес операнда находится в регистре BX, имя которого заключается в квадратные скобки.
MOV AL, [BX]
Индексная
Относительный адрес операнда находится в реестре SI или DI, имя которого заключается в квадратные скобки
MOV [SI], AL
Базовая со смещением
Относительный адрес операнда равен сумме базового адреса и смещения
BX -> DS
BP -> SS
ПРИМЕРЫ:
MOV AX, [BP+2]
MOV AX, MAS [BX]
Индексная со смещением
Относительный адрес операнда равен сумме индексного регистра и смещения.
MOV AL, [SI+5]
MOV DX, ES:[DI+2]
MOV BL, BUF [DI]
Базово – индексная
[BX] [SI] - ds
[BX][DI]- ds
[BP] [SI] - ss
[BP] [DI] -ss
Примеры:
Mov ax [bx][si], al
Базово – индексная со смещением
Относительный адрес равен сумме базового индексного регистра и смещения.
АРИФМЕТИЧЕСКИЕ КОМАНДА
Команда сложения
· Инкремент
INC операнд
R8, 16, 32
M8, 16, 32
Алгоритм:
Операнд:= операнд +1
Устанавливает флаги OF, SF, ZF,AF, PF. Не воздействует на флаг CF
INV AX; увеличить значение в ax на 1
· Команда сложения
ADD приемник, источник
Алгоритм:
Приемник:= приемник + источник
Устанавливает флаги OF, SF, ZF, AF, PF, CF
Если результат выходит за границы операнда приемника (возникает переполнение), то учесть эту ситуацию нужно анализируя флаг CF
Add ax, 678; сложить ax с 678 и результат записать в ax.
Сложение с учётом флага переноса CF
ADC=: приемник, источник
Алгоритм:
Приемник:= приемник + источник +CF
Masm
model small
. data
Sl1 dd 91fe544fh
Sl2 dd 0f0544cdh
ElderREZ db 0; для учёта переноса из страшего разряда результата
Ta
rez dd 0
.steck 256
. code
begin:
Mov ax, @data
Mov ds, ax
Mov ax,word ptr sl1
Add ax, word ptr sl2; сложение младших слов слагаемых
Mov word ptr rez, ax
Mov ax, word sl1+2; сложение старших слов слагаемых + CF
Ade ax, word ptr sl2+2
Mov word ptr rez+2, ax
Ade elderREZ, 0; учесть возможный перенос
Mov ax, 4c00h
Int21h
еnd begin
Вычитание чисел числе без знака
· Декремент
DEC операнд
Операнд:= операнд-1
Устанавливает флаги OF,SF,ZF,AF,PF. Не воздействует на флаг CF
DEC AL
· Команда вычитания
SUB операнд1, операнд2
Алгоритм
Операнд:=операнд1-операдн2
SUB BX,12; вычесть из bx 12 и записать 12 в bx
Вычитание с учетом заема
Sbb операнд1, операнд 2
Операнд1:= операнд 1-операнд2-CF
Устанавливает флаги OF, SF,ZF,AF,PF,CF
Применяется для выполнения вычитания старших частей значений многобайтных операндов.
Vich_1 = 1122334455667788h
Vich_2=99aabbccddeef0f0h
Masm
Model small
.data
Vich_1 dd 55667788h, 11223344h
Vich_2 dd 0deefofoh, 99aabbcch
Rez dd 2 dup (0)
.stack 256
.code
Start
Mov ax, @data
Команды умножения
Умножение числа без знака
MUL сомножитель _1
R8, 16,32
M8,16,32
Местоположение второго сомножителя и результата фиксировано, зависимо от размера первого сомножителя по таблице.
Сомножитель_1 | Сомножитель_2 | Результат |
Байт | al | 16 бит в ax^ Al – младшая часть результата Ah – старшая часть результата |
Слово | ax | 32 бит в паре dx:ax ax – младшая часть результата dx – старшая часть результата |
Двойное слово | cax | 64 бит в паре edx:eax Eax – младшая часть результата Edx – старшая часть результата |
Не воздействует на флаги SF, ZF, AF, PF
Если стршая половина результата нулевая, то флаги OF и CF = 0.
Если стршая половина результата ненулевая, то флаги OF и CF =1.
Пример: 25*15
mov al, 25
mov bl, 15
mul bl
Умножение числа со знаком
· IMUL сомножитель_1
R8, 16, 32
M8, 16,32
Аналогична команде mul. Отличается от нее тем, что формирует знак.
· IMUL множ_1, множ_2
R16, 32 R16, 32
M16, 32
18, 16,32
Алгоритм:
Множ_1:= множ_1*множ_2
Оба операнда должны быть одной размерности. Если результат не помещается в отведенный под него регистр, то флаги OF и CF = 1
Пример:
15*23
.386
MOV AX,15
IMUL AX,23
· IMUL рез-т, множ_1, множ_2
R 16, 32 R16. 32 18, 16, 32
M16, 32
Алгоритм:
Рез-т:= множ_1*множ2
Первый и второй операнд должны быть одной размерности. Если результат не помещается в отведённый под него регистр, то флаги OF и CF = 1.
Пример: 186*18
.486
MOV BX, 186
IMUL AX, BX, 18
Дата добавления: 2014-12-19; просмотров: 114 | Поможем написать вашу работу | Нарушение авторских прав |