Основные команды ассемблера
Команды пересылки данных
Инструкции работы со стеком
Инструкция перекодировки xlat
Инструкция перекодировки xlat
Инструкция перекодировки xlat
Инструкция перекодировки xlat
Арифметические команды
Преобразование
Преобразование
Двоичная арифметика
Сложение, вычитание сравнение
Пример
Умножение, деление
Десятичная арифметика
AAA и AAS: примеры
AAM и AAD: примеры
DAA и DAS: примеры
Логические команды
Побитовые булевские операции
Операции с битами
Примеры
Операции сдвига
Команды передачи управления
Операторы перехода по условию
Инструкции передачи управления
Инструкции работы с прерываниями
Команды работы с цепочками
Команды управления ЦП
Загрузка регистра флагов
463.50K
Category: programmingprogramming

Основные команды ассемблера

1. Основные команды ассемблера

Пересылки данных
Арифметические
Логические
Передачи
управления
Обработки
цепочек
Управления
работой ЦП

2. Команды пересылки данных

Общего
назначения
Работы с
адресами
Работы со
стеком
Преобразования
данных
Mov
Lea
Puch
Xlat
Xchg
Lss
Pop
Lds
Pucha
Les
Popa
Lfs
Puchf
Lgs
Popf

3.

Инструкция MOV
I8,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,32
R16,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,32
Add
Adc
r8,16,32
r8,16,32
Sub
m8,16,32
Sbb
i8,16,32
m8,16,32
Cmp
r8,16,32

16. Пример

cf
Mov 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. Умножение, деление

mul
div
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,8
add 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,9
mov 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,44h
add 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. Побитовые булевские операции

Not
r8,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,32
Bsf / Bsr
R16,32
M16,32
R16,32
R16,32
M16,32
i8
Bt/Btc/Bts/Btr

26. Примеры

• A dw 0000h
B 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,32
I3,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,shl
cf ****…*** 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. Операторы перехода по условию

Jxx
cx=…
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.

Movs
Cmps
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
English     Русский Rules