1 / 23

Основни групи инструкции в асемблер

Основни групи инструкции в асемблер. Прехвърляне на данни и работа със стека Копиране на данни - mov. mov ax,10 ;AX <- 10 ; индиректно _ адресирана _ клетка <- 10 mov WORDPTR[bx] ,10 mov ax,bx ;AX <- BX

kira
Download Presentation

Основни групи инструкции в асемблер

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Основни групи инструкции в асемблер • Прехвърляне на данни и работа със стека • Копиране на данни - mov mov ax,10 ;AX <- 10 ; индиректно_адресирана_клетка<- 10 mov WORDPTR[bx],10 mov ax,bx ;AX <- BX mov ax,mem1 ;Задължителна двойка инструкцииmov mem2,ax ;за копиране от едно място на ;паметта (mem1) в друго (mem2) mov ax,ds ;Задължителна двойка инструкции mov es,ax ;за копиране от един сегментен ;регистър (DS) в друг (ES) Примери

  2. Основни групи инструкции в асемблер • Прехвърляне на данни и работа със стека • Размяна на данни - xchg xchg ax,bx ;Размяна съдържанието на два регистъра xchg mem,ax ;Размяна съдържанието на ;регистър с памет xchg mem1,mem2 ;Грешка xchg ax,ds ;Грешка – сегментен регистър не може да ;бъде операнд

  3. Основни групи инструкции в асемблер • Прехвърляне на данни и работа със стека • Операции със стек - push, pop push ax ;Стек <- AX push mem ;Стек <- клетка от паметта push WORDPTR[bx] ;Стек <- клетка, адресирана ;индиректно pop cx ;Стек -> CX pop mem ;Стек -> клетка от паметта pop DWORDPTR[si] ;Стек -> клетка, адресирана ;индиректно pusha ;Стек <- всички регистри popa ;Стек -> всички регистри

  4. Основни групи инструкции в асемблер • Аритметични операции • Операндите трябва да бъдат с еднакъв размер. • Само единият операнд може да бъде клетка от паметта. • Събиране/Изваждане – add/sub, inc/dec • Операциите променят флаговите битове: OF, SF, ZF, AF, PF, CF.

  5. Основни групи инструкции в асемблер • Аритметични операции 1.      Събиране/Изваждане – add/sub, inc/dec Примери .DATA v1 WORD 10 v2 BYTE 30 .CODE mov al,20 ;AL <- 20 add al,v2 ;AL <- 50 sub al,BYTEPTR v1 ;AL <- 40 inc al ;AL <- 41 dec v1 ;v1 <- 9

  6. Основни групи инструкции в асемблер • Аритметични операции • Умножение/Деление • mul/imul – умножение на числа без/със знак • Множимото се намира в: AL, AX или EAX • Резултатът остава в: AX, DX:AX или EDX:EAX • Ако AH, DX или EDX са с ненулев резултат в резултат на умножението, то флаговете OF и CF са в “1”. Примери v SWORD-3 mov al,20 ;AL <- множимо (20) mov bl,30 ;BL <- множител (30) mul bl ;Резултат=AL*BL,т.е. AX <- 600 ;OF и CF са “1” imul v ;Резултат=AX*v, т.е. AX <- -1800 ;и DX <- 0; OF и CF са “1”

  7. Основни групи инструкции в асемблер • Аритметични операции • Умножение/Деление • div/idiv – деление на числа без/със знак Примери mov ax,500 ;AX <- делимо (500) mov bl,100 ;BL <- делител (100) div bl ;Резултат= AX/BL, ;AL <- 5 (частно) и AH <- 0 (остатък)

  8. Основни групи инструкции в асемблер • Поразредни операции • Логически – and, or, xor, not, test • Операциите: and, or, xorменят флаговете: OF, SF, ZF. • Операцията test е както andбез да записва резултат. Примери mov ax,35h ;AX <- 0000000000110101 and ax,0FBh ;Маска = 11111011, Нулира бит 2, AX <- 31 test al,00100000 ;Ако бит 5 на AL=1, то ZF=0

  9. Основни групи инструкции в асемблер • Поразредни операции • Преместване • Аритметично в ляво: shl, sal • Аритметично в дясно: shr, sar • Ротация в ляво: rol, rcl (през CF) • Ротация в дясно: ror, rcr(през CF) операция операнд, брояч регистър или памет

  10. Основни групи инструкции в асемблер • Поразредни операции • Преместване • Операциите оказват влияние на флаговете: OF, SF, ZF, CF. • При операциите: shl, sal, shrизместеният бит от края се копира във флаг CF, а крайният (ляв или десен) се нулира. • При операцията sar най-десният се копира в CF, а най-левият запазва стойността си.

  11. Основни групи инструкции в асемблер • Управление на изпълнението на програма • Промяна на флагове • За флаг пренос – установяване/нулиране: stc/clc • За флаг посока – установяване/нулиране: std/cld • За флаг прекъсване – установяване/нулиране: sti/cli • Безусловно предаване на управлението jmpоперанд етикет или адрес

  12. Основни групи инструкции в асемблер • Управление на изпълнението на програма • Условно предаване на управлението • В зависимост от регистър СХ jxxxxетикет jcxzетикет премини към етикет, ако CX e нула

  13. Основни групи инструкции в асемблер • Управление на изпълнението на програма • Условно предаване на управлението • В зависимост от флагове

  14. Основни групи инструкции в асемблер • Управление на изпълнението на програма • Условно предаване на управлението • След сравняване на две стойности cmpoперанд1,операнд2

  15. Основни групи инструкции в асемблер Организация на разклонения • Алтернатива с празен клон Общ вид IF условиеTHENпоследователност ; Ако променлива choice < 5, то тогава: 1)var+1; 2)choice=0 cmp choice,5 jnl l1 inc var mov choice,0 l1:. . .

  16. Основни групи инструкции в асемблер Организация на разклонения • Алтернатива с два клона Общ вид IFусловиеTHENпоследователност1ElSEпоследователност2 ; Ако choice > 0 , то тогава good_choice+1, ; а в противен случай – bad_choice+1 cmp choice,0 jgl1 jmp l2 l1: inc good_choice jmp l3 l2: inc bad_choice l3: . . .

  17. Основни групи инструкции в асемблер Организация на разклонения • Многозначно разклонение (SWITCH) ; Ако choice = 1, да се извика процедура display, при ; choice = 2 да се извика get_in, а при choice = 3 – sort cmp choice,1 jel1 cmp choice,2 jel2 cmp choice,3 jel3 jmp l4 l1: call display jmp l4 l2: call get_in jmp l4 l3: call sort l4: продължение

  18. Основни групи инструкции в асемблер Организация на цикли • По подразбиране БРОЯЧЪТ на цикъл е регистъра СХ. • СХ автоматично се намалява с 1 при всяка стъпка на цикъла. loop етикет ; край на цикъл при СХ=0 loopne/loopnzетикет ; край на цикъл при ; СХ=0 или ZF=1 loope/loopzетикет ; край на цикъл при ; СХ=0 или ZF=0

  19. Основни групи инструкции в асемблер Организация на цикли ; Цикъл за събиране на 100 числа, съхранявани като думи .DATA table WORD 100DUP(?) .CODE mov ax,0 ; В регистър АХ ще се натрупва сумата mov si,0 ; SI ще следи индекса на поредното число mov cx,LENGTH table ; В СХ се зареждат брой числа l1: add ax,table[si] ; Прибавяне на поредното число add si,TYPE table ; Увеличаване на индекса с 2 loop l1 ; Преход при СХ различно от нула

  20. Основни групи инструкции в асемблер • Обработка на символни низове • Преди прилагане на инструкциите се извършва следната последователност от действия: • Установяване на флаг за посока на обработката • std (DF=1) -> За обработка на низа отдясно наляво • cld (DF=0) -> За обработка на низа отляво надясно • Зареждане на брой итерации в СХ • Зареждане на начален адрес на низ-източник в DS:SIи на низ-приемник – в ES:DI • Повторение на изпълнението на една инструкция за обработка на символен низ

  21. Основни групи инструкции в асемблер • Обработка на символни низове • Повторение на изпълнението на една инструкция за обработка на символен низ: • rep– повтаря СХ пъти • repe/repz – повтаря най-много СХ пъти докато стойностите са равни • repne/repnz – повтаря най-много СХ пъти докато стойностите не са равни

  22. Основни групи инструкции в асемблер • Обработка на символни низове • Инструкции

  23. Основни групи инструкции в асемблер Пример • Обработка на символни низове ; Копиране на низ от едно място на паметта в друго .MODEL small .DATA sour BYTE 10 DUP(‘0123456789’); Низ източник: 100 байта dest BYTE 100 DUP(?) ; Низ приемник .CODE mov ax,@data ; Зареждане на сегментен адрес mov ds,ax ; в регистър DS mov es,ax ; и в регистър ES cld ; Посока отляво надясно mov cx,LENGTHOF sour ; CX <-100 mov si,OFFSET sour ; SI <- отместване на източник mov di,OFFSET dest ; DI <- отместване на приемник rep movsb ; Копиране на 100 байта   . . .

More Related