Download presentation
Presentation is loading. Please wait.
2
Основные команды ассемблера Пересылки данныхАрифметическиеЛогические Передачи управления Обработки цепочек Управления работой ЦП
3
Команды пересылки данных Общего назначения Работы с адресами Работы со стеком Преобразования данных MovLeaPuchXlat XchgLssPop LdsPucha LesPopa LfsPuchf LgsPopf
4
Инструкция MOV I8,16,32 R8,16,32 M8,16,32 Sr MOVI8,16,32 M8,16,32R8,16,32 Sr R16 Sr M16
5
Инструкция обмена данными R8,16,32 XCHGM8,16,32 R8,16,32
6
Инструкция обмена данными R8,16,32 XCHGM8,16,32 R8,16,32 Инструкции загрузки адреса LEAR16M8,16,32 LSS LDSR16M32 LES
7
Инструкции работы со стеком I16,32 R16,32 pushpopM16,32 SR
8
Инструкция перекодировки xlat 16-е число … BX AL 0 1 2 3 4 … 12 13 14 15 Таблица перекодировки Tpdb‘0123456789ABCDEF’ Adb14
9
Инструкция перекодировки xlat 14 48 49 50 51 52 … 67 BX AL 0 1 2 3 4 … 12 13 14 15 Таблица перекодировки 68 69 70 Leabx,Tp Moval,A
10
Инструкция перекодировки xlat 14 Адрес таблицы перекодировки 48 49 50 51 52 … 67 BX AL 0 1 2 3 4 … 12 13 14 15 Таблица перекодировки 68 69 70 Xlat es:Tp
11
Инструкция перекодировки xlat ‘E’ 14 Адрес таблицы перекодировки 48 49 50 51 52 … 67 BX AL 0 1 2 3 4 … 12 13 14 15 Таблица перекодировки 68 69 70
12
Арифметические команды Преобразования типов Двоичной арифметики Десятичной арифметики Прочие CbwAddImulAaaCmp CwdAdcMulDaaSetcc CwdeIncIdivAas CdqSubDivDas MovsxSbbNegAam MovzxDecAad
13
Преобразование Байта в слово ah al Слова в двойное слово –Cwd: ax dx –Cwde: ax eax Двойного слова в учетверенное –Cdq:eax edx 11111111 1******* 00000000 0******* cbw Пересылка
14
Преобразование Байта в слово ah al Слова в двойное слово –Cwd: ax dx –Cwde: ax eax Двойного слова в учетверенное –Cdq:eax edx 111111111******* 000000000******* cbw R8 R16 M8 с учетом знака movsx movsx, movzx R8,16 без учета знака movzx R32 M8,16 Пересылка
15
Двоичная арифметика Inc – увеличение на 1 *) Dec – уменьшение на 1 *) Neg – смена знака *) Не изменяет флага cf. inc dec neg R8,16,32 M8,16,32
16
Сложение, вычитание сравнение Add i8,16,32 Adc r8,16,32 Sub m8,16,32 Sbb i8,16,32 m8,16,32 Cmp r8,16,32
17
Пример cfah al Mov ax,128 0000000010000000 Add al,128 00000000 1 Adc ah,128 10000001000000000 Adc ah,128 00000001000000001
18
Умножение, деление mul div imul idiv R8,16,32 M8,16,32 Второй сомножитель или делитель Тип операнда Первый сомножитель РезультатДелимое Результат ЧастноеОстаток 8alax alah 16axdx:ax axdx 32eaxedx:eax eaxedx Делитель 0 или частное велико – исключительная ситуация
19
Десятичная арифметика ИмяСодержание Для неупакованных BCD чисел в регистре al AaaASCII-коррекция после сложения AasASCII-коррекция после вычитания AamASCII-коррекция после умножения AadASCII-коррекция перед делением Для упакованных BCD чисел в регистре al DaaДесятичная коррекция после сложения DasДесятичная коррекция после вычитания
20
AAA и AAS: примеры mov ax,8 add al,5 aaa mov ax,’18’ add al,’9’ aaa mov ax,’18’ sub al,9 aas 00 08 00 05 00 0dal > 9, af = 0 01 03af = cf = 1 31 38 00 39 31 71af = 1 32 07af = cf = 1 31 38 00 09 31 2faf = 1 30 09af = cf = 1
21
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
22
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 7Bal l > 9, af=0 00 81af = 1 00 57 00 19 00 3Eaf = 1 00 38 00 88 00 12 00 9Aal l > 9 00 00af = cf =1 00 88 00 99 00 EFaf = cf =1 00 89af = cf =1
23
КомандаУсловиеКомандаУсловие seta/setnbecf=0 и zf=0setle/setngzf=1 или sf≠of setae/setnbcf=0setnccf=0 setb/setnaecf=1setne/setnzzf=0 setbe/setcf=1 или zf=1setnoof=0 setccf=1setnp/setpopf=0 sete/setzzf=1setnssf=0 setg/setnlezf=0 или sf=ofsetoof=1 setge/setnlsf=ofsetp/setpepf=1 setl/setngesf≠ofsetssf=1 R8 M8 SETcc
24
Логические команды ЛогическиеОбработки битСдвига AndBsfSar OrBsrSal XorBtShl NotBtcShr TestBtrShld BtsShrd Rcl Rcr Rol Ror
25
Побитовые булевские операции i8,16,32 And r8,16,32 Or m8,16,32 Xor i8,16,32 Test m8,16,32 r8,16,32 устанавливает флаг zf без формирования результата and Not r8,16,32 m8,16,32
26
Операции с битами R16,32 Bsf / BsrR16,32 M16,32 R16,32 Bt/Btc/Bts/Btr M16,32i8
27
Примеры Adw0000h Bdw0110h ….386 bsfax,A bsfax,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
28
Операции сдвига R8,16,32I3,4,5 sal/sar shl/shr rol/ror rcl/rcr M8,16,32cl R16,32I4,5 shld/shrdR16,32 M16,32cl
29
sal,shlcf ****…*** 0 shr0 ****…*** cf sar****…*** cf rolcf ****…*** ror****…*** cf rclcf ****…*** rcr****…*** cf
30
Команды передачи управления Безусловная Взаимодействия с процедурами УсловныеЦиклы JmpCallJl=JngeJcJncLoop RetJle=JngJpJnpLoope Jg=JnleJzJnzLoopz IntJge=JnlJsJnsLoopne IretJb=JnaeJoJnoLoopnz Jbe=Jna Ja=JnbeJcxz Jae=JnbJecxz «выше» - «ниже» - для чисел без знака «больше» - «меньше» - для чисел со знаком
31
Операторы перехода по условию Jxx Loop Short Loopz/Loope Loopnz/Loopne cx ≠ 0 cx ≠ 0 & zf = 1 cx ≠ 0 & zf = 0 loop cx=… jcxz cx=0
32
Инструкции передачи управления Short Метка Far ptr Jmp R16,32 Call Word ptr M16,32 Dword ptr i4 Ret При передаче управления вперед Идентификатор – имя переменной, а не метка
33
Инструкции работы с прерываниями Int i8 – вызов процедуры обслуживания прерывания с номером, заданным операндом команды: pushfcli puch csjmp … push ip Iret – возврат из программы обработки прерывания в прерванную программу: pop ippopf pop csjmp …
34
Команды работы с цепочками ПересылкаСравнениеСканированиеЗагрузкаСохранение MovsCmpsScasLodsStos MovsbCmpsbScasbLodsbStosb MovswCmpswScaswLodswStosw MovsdCmpsdScasdLodsdStosd RepRepzRepe RepnzRepne
35
ИсточникПриемникРезультат CmpsDs:siEs:di Cf, zf, si,di 1 LodsDs:siEax/ax/al Ds:[si] al, si 1 ПриемникИсточникРезультат MovsEs:diDs:si [si] [di], si,di 1 ScasEs:diEax/ax/al Zf, di 1 StosEs:diEax/ax/al al [di], di 1 Movs Cmpssourcedest Scas Lods Stos dest source dest source
36
.model small.stack 256.data adb'1234567890','$‘ bdb'0987654321','$'.code mainproc 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 mainendp endmain Результат: 09876543211234567890
37
Команды управления ЦП Флаг переноса Флаг направления Флаг прерываний Регистр флагов StcStdStiLahf ClcCldCliSahf Cmc
38
Загрузка регистра флагов LAHF – в регистр AHSAHF – из регистра AH AH FLAGSsfzfafpfcf AL
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.