Похожие презентации:
Основные команды ассемблера
1. Основные команды ассемблера
Пересылки данныхАрифметические
Логические
Передачи
управления
Обработки
цепочек
Управления
работой ЦП
2. Команды пересылки данных
Общегоназначения
Работы с
адресами
Работы со
стеком
Преобразования
данных
Mov
Lea
Puch
Xlat
Xchg
Lss
Pop
Lds
Pucha
Les
Popa
Lfs
Puchf
Lgs
Popf
3.
Инструкция MOVI8,16,32
R8,16,32
R8,16,32
M8,16,32
Sr
MOV
I8,16,32
M8,16,32
R8,16,32
Sr
R16
Sr
M16
4.
Инструкция обмена даннымиR8,16,32
R8,16,32
XCHG
M8,16,32
M8,16,32
R8,16,32
5.
Инструкция обмена даннымиR8,16,32
R8,16,32
XCHG
M8,16,32
M8,16,32
R8,16,32
Инструкции загрузки адреса
LEA
R16
M8,16,32
R16
M32
LSS
LDS
LES
6. Инструкции работы со стеком
I16,32R16,32
R16,32
push
pop
M16,32
M16,32
SR
SR
7. Инструкция перекодировки xlat
Таблица перекодировки0
1
2
3
4
BX
AL
…
Tp
A
db
db
‘0123456789ABCDEF’
14
16-е число
…
12
13
14
15
8. Инструкция перекодировки xlat
Таблица перекодировкиBX
AL
Lea
Mov
bx,Tp
al,A
48
49
50
51
52
…
67
68
69
70
14
0
1
2
3
4
…
12
13
14
15
9. Инструкция перекодировки xlat
Таблица перекодировкиBX
Адрес таблицы перекодировки
AL
Xlat es:Tp
14
48
49
50
51
52
…
67
68
69
70
14
0
1
2
3
4
…
12
13
14
15
10. Инструкция перекодировки xlat
Таблица перекодировкиBX
Адрес таблицы перекодировки
AL
‘E’
48
49
50
51
52
…
67
68
69
70
14
0
1
2
3
4
…
12
13
14
15
11. Арифметические команды
Преобразованиятипов
Двоичной
арифметики
Десятичной
арифметики
Cbw
Cwd
Cwde
Cdq
Movsx
Movzx
Add Imul
Adc Mul
Inc Idiv
Sub Div
Sbb Neg
Dec
Aaa
Daa
Aas
Das
Aam
Aad
Прочие
Cmp
Setcc
12. Преобразование
Байта в словоah al
11111111 1*******
00000000 0*******
Пересылка
Слова в двойное слово
cbw
– Cwd: ax dx
– Cwde: ax eax
Двойного слова в
учетверенное
– Cdq:
eax edx
13. Преобразование
Байта в словоah al
11111111 1*******
Слова в двойное слово
cbw
00000000 0*******
– Cwd: ax dx
– Cwde: ax eax
Двойного слова в
учетверенное
– Cdq:
Пересылка
eax edx
R8
R16
M8
с учетом знака movsx
R8,16
без учета знака movzx
movsx, movzx
R32
M8,16
14. Двоичная арифметика
Inc – увеличение на 1*)Dec – уменьшение на 1*)
Neg – смена знака
*) Не
изменяет флага cf.
inc
R8,16,32
dec
neg
M8,16,32
15. Сложение, вычитание сравнение
i8,16,32Add
Adc
r8,16,32
r8,16,32
Sub
m8,16,32
Sbb
i8,16,32
m8,16,32
Cmp
r8,16,32
16. Пример
cfMov ax,128
ah
al
00000000 10000000
Add al,128
1
00000000 00000000
Adc ah,128
0
10000001 00000000
Adc ah,128
1
00000001 00000000
17. Умножение, деление
muldiv
R8,16,32
imul
M8,16,32
Второй
сомножитель
или делитель
idiv
Первый
Тип
операнда сомножитель
Результат Делимое
Результат
Частное Остаток
8
al
ax
ax
al
ah
16
ax
dx:ax
dx:ax
ax
dx
32
eax
edx:eax
edx:eax
eax
edx
Делитель 0 или частное велико – исключительная ситуация
18. Десятичная арифметика
ИмяСодержание
Для неупакованных BCD чисел в регистре al
Aaa ASCII-коррекция после сложения
Aas ASCII-коррекция после вычитания
Aam ASCII-коррекция после умножения
Aad ASCII-коррекция перед делением
Для упакованных BCD чисел в регистре al
Daa Десятичная коррекция после сложения
Das Десятичная коррекция после вычитания
19. AAA и AAS: примеры
• mov ax,8add al,5
aaa
00 08
00 05
00 0d
01 03
al > 9, af = 0
af = cf = 1
• mov ax,’18’
add al,’9’
aaa
31 38
00 39
31 71
32 07
af = 1
af = cf = 1
31 38
00 09
31 2f
30 09
af = 1
af = cf = 1
• mov ax,’18’
sub al,9
aas
20. AAM и AAD: примеры
• mov al,9mov bl,9
mul bl
aam
• mov al,99
aam
• mov ax,0703h
aad
mov bl,9
div bl
• mov ax,’99’
aad
sub al,10h
** 09
** 09
00 51
08 01
00 63
09 09
07 03
00 49
00 09
01 08
39 39
00 73
00 10
00 63
21. DAA и DAS: примеры
• mov ax,44hadd al,37h
daa
• Mov ax,57h
sub al,19h
das
• Mov ax,88h
add al,12h
daa
• Mov ax,88h
sub al,99h
das
00 44
00 37
00 7B
00 81
00 57
00 19
00 3E
00 38
00 88
00 12
00 9A
00 00
00 88
00 99
00 EF
00 89
all > 9, af=0
af = 1
af = 1
all > 9
af = cf =1
af = cf =1
af = cf =1
22.
SETccКоманда
seta/setnbe
setae/setnb
setb/setnae
setbe/set
setc
sete/setz
setg/setnle
setge/setnl
setl/setnge
Условие
cf=0 и zf=0
cf=0
cf=1
cf=1 или zf=1
cf=1
zf=1
zf=0 или sf=of
sf=of
sf≠of
R8
M8
Команда
setle/setng
setnc
setne/setnz
setno
setnp/setpo
setns
seto
setp/setpe
sets
Условие
zf=1 или sf≠of
cf=0
zf=0
of=0
pf=0
sf=0
of=1
pf=1
sf=1
23. Логические команды
ЛогическиеAnd
Or
Xor
Not
Test
Обработки бит
Bsf
Bsr
Bt
Btc
Btr
Bts
Сдвига
Sar
Sal
Shl
Shr
Shld
Shrd
Rcl
Rcr
Rol
Ror
24. Побитовые булевские операции
Notr8,16,32
m8,16,32
i8,16,32
And
r8,16,32
r8,16,32
Or
m8,16,32
Xor
i8,16,32
Test
m8,16,32
устанавливает флаг zf без
формирования результата and
r8,16,32
25. Операции с битами
R16,32Bsf / Bsr
R16,32
M16,32
R16,32
R16,32
M16,32
i8
Bt/Btc/Bts/Btr
26. Примеры
• A dw 0000hB dw 0110h
…
.386
bsf ax,A
bsf ax,B
bsr ax,B
bt b,ax
btc b,ax
btr b,4
bts b,1
zf=1
ax=4, zf=0
ax=8, zf=0
cf=1
cf=1, b=0010h
cf=1, b=0000h
cf=0, b=0002h
27. Операции сдвига
R8,16,32I3,4,5
M8,16,32
cl
sal/sar shl/shr rol/ror rcl/rcr
R16,32
shld/shrd
I4,5
R16,32
M16,32
cl
28.
sal,shlcf ****…*** 0
shr
0 ****…*** cf
sar
****…*** cf
rol
ror
rcl
rcr
cf ****…***
****…*** cf
cf ****…***
****…*** cf
29. Команды передачи управления
ВзаимодействияБезусловная
с процедурами
Jmp
Call
Ret
Int
Iret
Условные
Jl=Jnge
Jle=Jng
Jg=Jnle
Jge=Jnl
Jb=Jnae
Jbe=Jna
Ja=Jnbe
Jae=Jnb
Jc
Jp
Jz
Js
Jo
Циклы
Jnc Loop
Jnp Loope
Jnz Loopz
Jns Loopne
Jno Loopnz
Jcxz
Jecxz
«выше» - «ниже» - для чисел без знака
«больше» - «меньше» - для чисел со знаком
30. Операторы перехода по условию
Jxxcx=…
jcxz
cx ≠ 0
Loop
Short
Loopz/Loope
Loopnz/Loopne
cx ≠ 0 & zf = 1
cx ≠ 0 & zf = 0
loop
cx=0
31. Инструкции передачи управления
При передачеуправления
вперед
Short
Метка
Far ptr
Jmp
R16,32
Call
Word ptr
Идентификатор –
имя переменной,
а не метка
M16,32
Ret
i4
Dword ptr
32. Инструкции работы с прерываниями
• Int i8 – вызов процедуры обслуживанияпрерывания с номером, заданным
операндом команды:
pushf
cli
puch cs
jmp …
push ip
• Iret – возврат из программы обработки
прерывания в прерванную программу:
pop ip
popf
pop cs
jmp …
33. Команды работы с цепочками
Пересылка Сравнение СканированиеMovs
Cmps
Scas
Загрузка
Сохранение
Lods
Stos
Movsb
Cmpsb
Scasb
Lodsb
Stosb
Movsw
Cmpsw
Scasw
Lodsw
Stosw
Movsd
Cmpsd
Scasd
Lodsd
Stosd
Rep
Repz
Repe
Repnz
Repne
34.
MovsCmps
dest
Scas
dest
Lods
source
Stos
dest
source
source
dest
Источник
Приемник
Результат
Cmps
Ds:si
Es:di
Cf, zf, si,di 1
Lods
Ds:si
Eax/ax/al
Ds:[si] al, si 1
Приемник
Источник
Результат
Movs
Es:di
Ds:si
[si] [di], si,di 1
Scas
Es:di
Eax/ax/al
Zf, di 1
Stos
Es:di
Eax/ax/al
al [di], di 1
35.
.model small.stack 256
.data
a db
'1234567890','$‘
b db
'0987654321','$'
.code
main proc
assume es:@data
mov ax,@data
mov ds,ax
mov es,ax
mov ah,9
lea dx,b
int 21h
lea si,a
lea di,b
mov cx,10
rep movsb
mov ah,9
lea dx,b
int 21h
.exit 0
main endp
end main
Результат:
09876543211234567890
36. Команды управления ЦП
Флагпереноса
Флаг
направления
Флаг
прерываний
Регистр
флагов
Stc
Std
Sti
Lahf
Clc
Cld
Cli
Sahf
Cmc
37. Загрузка регистра флагов
• LAHF – в регистр AH• SAHF – из регистра AH
A H
F L A G S
A L
sf zf
af
pf
cf