04 - Instrukcijski Set Mikroprocesora

download 04 - Instrukcijski Set Mikroprocesora

of 64

Transcript of 04 - Instrukcijski Set Mikroprocesora

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    1/64

    ARHITEKTURA RA ČUNARA Glava 4Instrukcijski set mikroprocesora

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    2/64

    4. Instrukcijski set uP

    Instrukcije Intelove familije μP mogu se podijeliti u sljedeće grupe:

    Instrukcije za prenos podataka,Instrukcije za manipulaciju nizovima,

    Aritmetičke instrukcije,

    Logičke instrukcije, Instrukcije za upravljački prenos, Instrukcije za upravljanje procesorom.

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    3/64

    4.1.1. Instrukcije za prenos podataka

    Mogu se podijeliti u 3 grupe:

    Instrukcije opšte namjene, Akumulatorsko specifične, Adresno objektne.

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    4/64

    4.1.1. Instrukcije za prenos podataka

    Instrukcije opšte namjene

    Tu se ubrajaju: MOV, XCHG, PUSH, POP

    MOV Objašnjena kod načina adresiranja

    XCHG Vrši razmjenu sadržaja operanada

    XCHG odrediste, izvorXCHG AX, BXXCHG CX, [broj16]

    Bar jedan od operanada mora biti registar!

    Segmentni registri ne mogu biti operandi!

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    5/64

    4.1.1. Instrukcije za prenos podatakaPUSH Stavlja podatke na stek

    Dva bajta (8086-80286)

    Dva ili četiri bajta Osam bajtova (64-bitni procesori)

    Oblici:

    PUSH Na stek ostavlja sadržaj registara,podatke iz memorije i neposredne podatke

    PUSH AXPUSH WORD [broj16]PUSH 1234h

    PUSHA Na stek ostavlja sadržaj seta internih registara (ne postoji u 64-bitnom na činu rada): AX, CX, DX, BX, SP, BP, SI, DI

    PUSHAD Na stek ostavlja sadržaj 32 -bitnog seta internih registara (ne postoji u 64-bitnom na činu rada):EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI

    PUSHF Na stek ostavlja sadržaj FLAGS registra

    PUSHFD Na stek ostavlja sadržaj EFLAGS registra

    PUSHFQ Na stek ostavlja sadr žaj RFLAGS registra

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    6/64

    4.1.1. Instrukcije za prenos podatakaPOP Uzima podatke sa steka

    Dva bajta (8086-80286)

    Dva ili četiri bajta Osam bajtova (64-bitni procesori)

    Oblici:

    POP Uzima podatke sa steka i puni odgovarajući registar ili memorijsku lokaciju

    POP AXPOP WORD [broj16]

    POPA Uzima podatke sa steka i puni set internih registara (ne postoji u 64-bitnom na činu rada):DI, SI, BP, SP, BX, DX, CX, AX

    POPAD Uzima podatke sa steka i puni set 32-bitnih internih registara (ne postoji u 64-bitnom na činurada):EDI, ESI, EBP, ESP, EBX, EDX, ECX, EAX

    POPF Uzima podatak sa steka i njime puni sadržak FLAGS registra

    POPFD Uzima podatak sa steka i njime puni sadržak EFLAGS registra

    POPFQ Uzima podatak sa steka i njime puni sadržaj RFLAGS registra

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    7/64

    4.2. Instrukcije za manipulaciju nizovima

    Pod nizom se podrazumijeva skup podataka tipa bajt, riječ, dvostruka riječ itd, koji se nalazeu sukcesivnim memorijskim lokacijama

    Za izvođenje ovih instrukcija poseban značaj imajuD flag te registri ESI i EDI.

    D (Direction) flag

    D definiše automatsko inkrementiranje (D=0 ) odnosno dekrementiranje ( D=1 ) indeksnihregistara (SI i DI) prilikom izvođenja instrukcija za manipulaciju nizovima

    CLD instrukcija briše D flag (D=0)

    STD instrukcija postavlja D flag (D=1)

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    8/64

    4.2. Instrukcije za manipulaciju nizovima

    LODS (LODSB, LODSW, LODSD , LODSQ )

    Puni akumulator podacima iz data segmenta čiji je offset sadržan u ESI registru (učitava elementizvornog niza).Kod 32-bitnih segmenata svi segmentni registri upućuju na isti segment, pa je bitna samovrijednost ESI registra.Kod 64-bitnog adresiranja, vrijednosti segmentnih registara su 0, pa se offseti mogu posmatrati kaoapsolutne adrese podataka.

    Nakon učitavanja elementa niza vrši se ažuriranje indeksa (inkrementovanje / dekrementovanje) zaodgovarajuću vrijednost (1, 2, 4 ili 8)

    Primjeri:

    Instrukcija Operacija Dužina

    LODSB AL = DS:[ESI]; ESI = ESI ± 1 bajt

    LODSW AX = DS:[ESI]; ESI = ESI ± 2 riječ LODSD EAX = DS:[ESI]; ESI = ESI ± 4 dvostruka riječ LODSQ RAX = DS:[RSI]; RSI = RSI ± 8 četvorostruka riječ

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    9/64

    4.2. Instrukcije za manipulaciju nizovima

    Primjer

    LODSW

    08089040h

    ...

    0808904bh21h43h

    ...

    ...0808904ahESI: 0808904ah AX: 4321h

    Memorija

    ESI: 0808904ch

    AX: xxxx

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    10/64

    4.2. Instrukcije za manipulaciju nizovima

    STOS (STOSB, STOSW, STOSD, STOSQ )

    S adržaj akumulatora stavlja u ekstra segment na lokaciju čiji je offset sadržan u EDI registru(upisuje podatak u odredišni niz). Kod 32- bitnih segmenata i DS i ES upućuju na isti segment, pa je bitna samo vrijednost EDIregistra.Kod 64-bitnog adresiranja, vrijednosti segmentnih registara su 0, pa se offseti mogu posmatrati kaoapsolutne adrese podataka.Nakon upisi vanja elementa niza vrši se ažuriranje indeksa (inkrementovanje/dekrementovanje) zaodgovarajuću vrijednost (1, 2, 4 ili 8).

    Primjeri:

    Instrukcija Operacija Dužina

    STOSB ES:[EDI] = AL; EDI = EDI ± 1 bajt

    STOSW ES:[EDI] = AX; EDI = EDI±2 riječ STOSD ES:[EDI] = EAX; EDI = EDI±4 dvostruka riječ STOSQ ES:[RDI] = RAX; RDI = RDI±8 četvorostruka riječ

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    11/64

    4.2. Instrukcije za manipulaciju nizovima

    Primjer

    STOSW

    080809a0h

    ...

    080809a5h

    34h

    12h

    ...

    ...080809a4hEDI: 080809a4h

    AX: 1234h

    Memorija

    EDI: 080809a6h

    AX: 1234h

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    12/64

    4.2. Instrukcije za manipulaciju nizovima

    ...CLD ; postavi inkrementovanjeMOV EAX, prom ; definiši odredišninizMOV EDI, EAX ; s početkom na lokaciji na koju pokazuje prom

    MOV CX, 100 ; 100 ponavljanjaMOV AX, 0 ; upisujemo nule u prvih 100 lokacija niza

    REP STOSW ; ponavljaj sve dok je CX>0; CX se svaki put dekrementuje za 1

    STOS se često koristi u kombinaciji saREP prefiksom, koji omogućava ponavljanje sve dok je CX0

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    13/64

    4.2. Instrukcije za manipulaciju nizovima

    MOVS (MOVSB, MOVSW, MOVSD, MOVSQ )

    Kopira elemente izvornog niza u odredišni niz.

    Jedina instrukcija koja kopira sadržaj jedne mem. lokacije u drugu mem. lokaciju.

    Kopiraju se podaci iz data segmenta iz lokacije sa offsetom datim u ESI u ekstra segment na lokaciju s offsetomdatim u EDI.Kod 32-bitnih segmenata svi segmentni registri upućuju na isti segment, pa su bitne samo vrijednost EDI i ESIregistra, koje sadrže 32 -bitne offsete podataka.Kod 64-bitnog adresiranja, vrijednosti segmentnih registara su 0, pa se offseti mogu posmatrati kao apsolutneadrese podataka.

    Nakon kopiranja vrši se ažuriranje ESI i EDI (inkrementovanje/dekrementovanje ) za odgovarajuću vrijednost (1,2, 4 ili 8)

    PrimjeriInstrukcija Operacija Dužina

    MOVSB ES:[EDI] = DS:[ESI]; EDI = EDI ± 1; ESI = ESI ± 1 bajt

    MOVSW ES:[EDI] = DS:[ESI]; EDI = EDI ± 2; ESI = ESI ± 2 r iječ MOVSD ES:[EDI] = DS:[ESI]; EDI = EDI ± 4; ESI = ESI ± 4 dvostruka riječ

    MOVSQ ES:[RDI] = DS:[RSI]; RDI = RDI ± 8; RSI = RSI ± 8 četvorostruka riječ

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    14/64

    4.2. Instrukcije za manipulaciju nizovima...CLD ; postavi inkrementovanje

    MOV EDI, odrediste ; postavi adresu odredisnog niza; (lokacija na koju pokazuje promjenljiva; odrediste )

    MOV ESI, izvor ; postavi adresu pocetnog niza; (lokacija na koju pokazuje promjenljiva; izvor )

    MOV CX, 100 ; duzina niza (zavisi od instrukcije)

    REP MOVSW ; ponavljaj sve dok je CX>0; CX se svaki put dekrementuje za 1

    MOVS se skoro uvijek koristi uz REP prefiks

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    15/64

    4.2. Instrukcije za manipulaciju nizovima

    SCAS (SCASB, SCASW, SCASD, SCASQ )

    Poredi sadržaj akumulatora s elementima niza ( ES:[EDI] ) i pri tome ne mijenja njihovsadržaj (oduzima sadržaj memorijske lokacije od sadržaja akumulatora)

    Adresiranje podataka funkcioniše na sličan način kao kod LODS, STOS i MOVS instrukcija.

    Efikasno se koristi u kombinaciji sa prefiksima

    REPE - Ponavljaj sve dok je jednako (WHILE)REPNE - Ponavljaj sve dok nije jednako (REPEAT .. UNTIL)

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    16/64

    4.2. Instrukcije za manipulaciju nizovimaSECTION .data

    niz db ‘ffffefffff'

    SECTION .textglobal _start

    _start:

    mov cx, 10 ; du žina niza mov ax, 'f'

    mov edi, nizrepe scasb

    SECTION .dataniz db 'fffffgffff'

    SECTION .textglobal _start

    _start:

    mov cx, 10 ; dužina niza mov ax, 'f'

    mov edi, nizrepe scasb

    ZF = 0CX = 5CF = 0

    ZF = 0CX = 4CF = 1

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    17/64

    4.2. Instrukcije za manipulaciju nizovima

    CMPS (CMPSB, CMPSW, CMPSD, CMPSQ )

    Poredi elemente dvaju nizova (izvornog DS:[ESI] i odredišnog ES:[EDI] ) Adresiranje podataka funkcioniše na sličan način kao kod LODS, STOS i MOVS instrukcija.

    Efikasno se koristi u kombinaciji sa prefiksima

    REPE - Ponavljaj sve dok je jednakoREPNE - Ponavljaj sve dok nije jednakoREPZ - Ponavljaj sve dok je nulaREPNZ - Ponavljaj sve dok je različito od nule

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    18/64

    4.2. Instrukcije za manipulaciju nizovimaSECTION .data

    niz1 db 'fffffgffff'niz2 db 'ffffffffff'

    SECTION .textglobal _start

    _start:

    mov cx, 10 ; duzina

    mov esi, niz1mov edi, niz2repz cmpsb

    SECTION .dataniz1 db 'fffffffffe'niz2 db 'ffffffffff'

    SECTION .textglobal _start

    _start:

    mov cx, 10 ; duzina

    mov esi, niz1mov edi, niz2repz cmpsb

    ZF = 0CX = 4CF = 0

    ZF = 0CX = 0CF = 1

    SECTION .dataniz1 db 'ffffffffff'niz2 db 'ffffffffff'

    SECTION .textglobal _start

    _start:

    mov cx, 10 ; duzina

    mov esi, niz1mov edi, niz2repz cmpsb

    ZF = 1CX = 0CF = 0

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    19/64

    4.3. Aritmetičke instrukcije

    Mogu se podijeliti u nekoliko grupa:

    sabiranje,oduzimanje,množenje idijeljenje.

    Mogu se primjenjivati na binarne podatke (označene i neoznačene) i na BCD podatke(pakovane i nepakovane).

    Izvršavanje aritmetičkih instrukcija praćeno je postavljanjem odgovarajućih markera(flegova): C, A, Z, S, P, O .

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    20/64

    4.3. Aritmetičke instrukcije

    ADD (ADD dest , src )

    Postoje tri tipa sabiranjaregistar/memorija sa registromregistar sa registrom/memorijomneposredni operand sa registrom/memorijom

    Ne može se vršiti sabiranje tipa memorija sa memorijom

    Segmentni registri ne mogu da se koriste

    ADD BL, CL ; BL

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    21/64

    4.3. Aritmetičke instrukcije

    Primjer : Sabrati podatke sadržane u registrima AX, CX, DX, a rezultat smjestiti u lokacijuSUMA

    ADD AX, CX ; AX

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    22/64

    4.3. Aritmetičke instrukcije

    ADC (ADC dest , src )

    Vrši sabiranje operanada, a zbiru dodaje vrijednost C flaga

    ADC odredište, izvor ; odredište < - odredište + izvor + CF

    Koristi se kod sabiranja podataka čija dužina premašuje maksimalnu dužinu registra (npr. kod sabiranja 32 bitnih podataka pomoću 16-bitnih registara)

    ADC AL, AH ; AL

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    23/64

    4.3. Aritmetičke instrukcije

    Primjer : Sabrati dva podatka (dvostruke riječi) sa lokacijaBROJ1 i BROJ2 koristeći 16-bitne registre ( BX:AX iDX:CX ), a rezultat smjestiti u lokaciju SUMA.

    SABIRANJEMOV EDI, BROJ1 ; Učitava broj1 u BX:AX MOV AX, [EDI]MOV BX, [EDI+2]

    MOV EDI, BROJ2MOV CX, [EDI] ; Učitava broj2 u DX:CX MOV DX, [EDI+2]

    ADD AX, CX ; AX

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    24/64

    4.3. Aritmetičke instrukcije

    INC (INC dest )

    Vrši inkrementalno sabiranje (dodaje 1 datoj memorijskoj lokaciji ili registru)

    INC BL ; BL

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    25/64

    4.3. Aritmetičke instrukcije

    SUB (SUB dest , src )

    Oduzima src od dest i rezultat smješta u dest

    SUB dest, src dest

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    26/64

    4.3. Aritmetičke instrukcije

    SBB (SBB dest , src )

    Od dest oduzima src i CF , a rezultat smješta u dest

    SBB dest, src dest

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    27/64

    4.3. Aritmetičke instrukcije

    DEC (DEC dest )

    Vrši dekrementiranje (oduzima 1 od sadržaja date mem. lokacije ili registra)

    DEC BH ; BH

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    28/64

    4.3. Aritmetičke instrukcije

    NEG (NEG dest )

    Vrši negaciju operanda (prevodi u formu drugog komplementa)

    NEG CL ; CL

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    29/64

    4.3. Aritmetičke instrukcije

    CMP (CMP op1, op2)

    Od op1 oduzima op2, ali ne mijenja vrijednosti operanada, već samo postavljaodgovarajuće markere :

    op1 > op2: ZF

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    30/64

    4.3. Aritmetičke instrukcije

    MUL (za neoznačene brojeve) (MUL množilac )IMUL (za označene brojeve) (IMUL množilac )

    Proizvod je uvijek dvostruko veće dužine od pojedinačnih faktora(8 * 8 = 16, 16 * 16 = 32, 32 * 32 = 64)

    Ako CF nije setovan nakon množenja, onda se rezultat iste širine kao i operandi.

    8-bitno moženje

    Jedan od faktora nalazi se u ALDrugi faktor može biti u nekom 8-bitnom registru ili mem. lokacijiRezultat se smješta u AX

    MUL CL ; AX

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    31/64

    4.3. Aritmetičke instrukcije

    16- bitno moženje

    Jedan od faktora nalazi se u AXDrugi faktor može biti u nekom 16-bitnom registru ili mem. lokacijiRezultat se smješta u DX:AX

    MUL CX ; DX:AX

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    32/64

    4.3. Aritmetičke instrukcije

    64- bitno moženje

    Jedan od faktora nalazi se u RAXDrugi faktor može biti u nekom64-bitnom registru ili mem. lokacijiRezultat se smješta u RDX:RAX

    MUL RCX ; RDX:RAX

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    33/64

    4.3. Aritmetičke instrukcije MNO ŽENJE

    EAXOperand 1

    Operand 2

    Rezultat

    8bit 16bit 32bit 64bit

    R8/M8

    AX

    ALAX

    R16/M16

    DX

    AX

    R32/M32

    EDX

    EAX

    RAX

    R64/M64

    RDX

    RAX

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    34/64

    4.3. Aritmetičke instrukcije

    DIV (za neoznačene brojeve) (DIV djelilac )IDIV (za označene brojeve) (IDIV djelilac )

    8-bitno dijeljenje

    Dijeljenik je u AX registru

    Djelilac je u nekom 8-bitnom registru ili mem. lokacijiKoličnik se smješta u AL, a ostatak u AH registar

    Kod dijeljenja označenih brojeva količnik je uvijek sa znakom, a za ostatak sepodrazumijeva znak dijeljenika

    AX = 0010h (=+16)BL = 0FDh (=-3) DIV BL => AX=01FBh (kol = 0FBh = -5, ost = 01h = 1)

    AX=-16 BL=3 => kol=-5 ost=-1

    DIJELJENJE

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    35/64

    4.3. Aritmetičke instrukcije

    8-bitno dijeljenje

    Da bi se 8-bitni dijeljenik pretvorio u 16-bitni podatak u AX registru, potrebno ga jeproširiti na odgovarajući način:

    CBW (Convert Byte to Word (AL -> AX))

    Primjer: Podijeliti sadržaj lokacijeop1 sa sadržajem op2 , količnik smjestiti urez , a ostataku ost

    a) ako su podaci neoznačeni b) ako su podaci označeni

    MOV AL, [op1] MOV AL, [op1]MOV AH, 0 CBWDIV BYTE [op2] IDIV BYTE [op2]MOV [rez], AL MOV [rez], AL

    MOV [ost], AH MOV [ost], AH

    DIJELJENJE

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    36/64

    4.3. Aritmetičke instrukcije

    16-bitno dijeljenje

    Dijeljenik je u registarskom paru DX:AXDjelilac je u bilo nekom 16-bitnom registru ili mem. lokacijiKoličnik se smješta u AX, a ostatak u DX registarDijeljenik treba proširiti sa 16 na 32 bita

    CWD (Convert Word to Doubleword (AX -> DX:AX))

    32-bitno dijeljenje

    Implementirano kod 80386-PentiumDijeljenik je u registarskom paru EDX:EAXDjelilac je u bilo nekom 32-bitnom registru ili mem. lokacijiKoličnik se smješta u EAX, a ostatak u EDX registar

    CDQ (Convert Doubleword to Quadword (EAX -> EDX:EAX))

    DIJELJENJE

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    37/64

    4.3. Aritmetičke instrukcije

    64-bitno dijeljenje

    Implementirano kod 64-bitnih procesoraDijeljenik je u registarskom paru RDX:RAXDjelilac je u bilo nekom 64-bitnom registru ili mem. lokacijiKoličnik se smješta u RAX, a ostatak u RDX registar

    CQO (Convert Quadword to Octaword (RAX -> RDX:RAX))

    DIJELJENJE

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    38/64

    4.3. Aritmetičke instrukcije DIJELJENJE

    EDX:EAXDijeljenik

    Djelilac

    Koli čnik

    8bit 16bit 32bit 64bit

    R8/M8

    AX

    AL

    DX:AX

    R16/M16

    AX

    DX

    R32/M32

    EAX

    EDX

    RDX:RAX

    R64/M64

    RAX

    RDXOstatak AH

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    39/64

    4.3. Aritmetičke instrukcije

    Pakovana BCD aritmetika

    Standardne aritmetičke operacije nad BCD brojevima zahtijevaju nakon izvođenjaodgovarajuće operacije podešavanja rezultata Korekcija nibla se vrši u sljedećim slučajevima:

    • ako je dobijeni rezultat u opsegu 1010 – 1111,• ako je dobijeni rezultat u opsegu 0001 – 1001, ali je postojao prenos u sljedeći nibl.

    BCD ARITMETIKA

    1234 0001 0010 0011 0100

    + 3099 + 0011 0000 1001 1001

    4333 0100 0010 1100 1101 =42CDh

    + 0000 0000 0110 0110

    0100 0011 0011 0011 =4333 BCD

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    40/64

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    41/64

    4.3. Aritmetičke instrukcije

    DAA (Decimal Adjust after Addition)

    BCD ARITMETIKA

    Primjer: Sabrati 4-cifrene BCD brojeveiz BX i DX, a rezultat smjestiti u CX

    MOV AL, BL ADD AL, DLDAAMOV CL, AL

    MOV AL, BH ADC AL, DHDAAMOV CH, AL

    BX 1 2 3 4

    DX 3 9 9 9

    ALCD

    +

    AL33C 1

    +

    4CAL

    CX 5 2 3 3

    52AL

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    42/64

    4.4. Logičke instrukcije

    AND (AND dest , src )

    Vrši logičko množenje (bit po bit) operanadadest i src i smješta rezultat u dest

    AND AL, BL ; AL

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    43/64

    4.4. Logičke instrukcije

    AND (AND dest , src )

    Najčešće se koristi za maskiranje bitova

    MOV AX, 3135h ; učitaj ASCII 15 AND AX, 0F0Fh ; maskiraj AX (AX

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    44/64

    4.4. Logičke instrukcije

    OR (OR dest , src )

    Vrši logičko sabiranje (bit po bit) operanadadest i src i smješta rezultat u dest

    OR AL, BL ; AL

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    45/64

    4.4. Logičke instrukcije

    XOR (XOR dest , src )

    Operacija isključivo ILI (bit po bit) operanada dest i src . Rezultat se smješta u dest

    XOR AL, BL ; AL

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    46/64

    4.4. Logičke instrukcije

    NOT (NOT dest )

    Invertuje bitski sadržaj (0-> 1, 1 -> 0)

    NOT CH ; invertuje bitski sadržaj registra CH NOT BYTE [broj] ; invertuje bitski sadržaj mem. lokacije broj NOT BYTE [EBX] ; invertuje bitski sadržaj bajta u data segmentu

    ; čiji je offset dat u BX registru

    TEST (TEST op1, op2)

    Ponaša se kao AND , ali ne mijenja sadržaj operanada, već samo flegove Obično je slijedi neka od instrukcija za grananje (JZ , JNZ )

    TEST AL, 1 ; testira najniži bit JNZ desnoTEST AL, 128 ; testira najviši bit JNZ lijevo

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    47/64

    4.5. Logičke instrukcije- pomjeranje i rotiranje

    Šiftovanje

    Šiftovanje predstavlja pomjeranje bitskog sadržaja registra ili mem. lokacije ulijevo ili udesno(aritmetički to je ekvivalentno množenju / dijeljenju bitskog sadržaja sa 2±n, gdje je n – brojmjesta za koliko je izvršeno pomjeranje)

    Može da se izvodi neposredno (pomjeraj se navodi u samoj instrukciji) ili posredno (pomjerajse drži u CL registru)

    Razlikujemo Aritmetičko iLogičko šiftovanje

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    48/64

    4.4. Logičke instrukcije- pomjeranje i rotiranje

    Logičko i aritmetičko šiftovanje ulijevo (SHL, SAL)

    Logičko i aritmetičko šiftovanje ulijevo je identično bit najveće težine premješta se u C flagostali biti pomijeraju se ulijevozdesna (na najmanje značajno mjesto) dodaje se 0

    C registar

    0

    C registar

    0

    SHL [op], [pomak]iliMOV CL, [pomak]SHL [op], CL

    SHL AX, 2 ; mno ženje sa 4

    SAL [op], [pomak]iliMOV CL, [pomak]SAL [op], CL

    SAL [op], 2 ; množenje sa 4

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    49/64

    4.4. Logičke instrukcije- pomjeranje i rotiranje

    Logičko šiftovanje udesno (SHR)

    bit najmanje težine premješta se u C flagostali biti pomijeraju se ulijevona najznačajnije mjesto se dodaje 0

    Cregistar

    0

    SHR [op], [pomak]

    SHR [op], CLSHR AX, 1SHR AX, 3MOV CL, 2SHR AX, CL

    Aritmetičko šiftovanje udesno (SAR)

    bit najmanje težine premješta se u Cflagostali biti pomijeraju se ulijevona najznačajnijem mjestu sezadržava stara vrijednost (zadržavase znak podatka)

    C

    SAR [op], [pomak]

    SAR [op], CL

    SAR AX, 1 ; dijeljenje sa 2SAR AX, 3 ; dijeljenje sa 8MOV CL, 2SAR AX, CL ; dijeljenje sa 4

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    50/64

    4.4. Logi čke instrukcije- pomjeranje i rotiranje

    Rotiranje (ROR, ROL, RCR, RCL)

    Može da se odvija i preko C flagaMože biti:

    neposredno (pomjeraj se defini še neposredno)posredno (pomjeraj se nalazi u CL registru)

    ROLC

    ROR

    RCL

    CRCR

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    51/64

    4.5. Instrukcije za upravljački prenos

    To su instrukcije za upravljanje tokom programa. Ove instrukcije manipulišu sadržajemEIP i/ili CS registra.

    Mogu se podijeliti u 4 grupe:bezuslovni i uslovni skokovi,iterativno upravljanje,pozivi procedura,

    prekidi.

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    52/64

    4.5. Instrukcije za upravljački prenos

    Bezuslovni skokovi (JMP)

    Omogu ćavaju bezuslovnu promjenu vrijednosti EIP registra, Argument instrukcije može biti:

    labela na koju se izvršava skok, registar u kojem se nalazi adresa lokacije,adresa lokacije,pomjeraj u odnosu na trenutnu lokaciju

    petlja:MOV AX, BXJMP zamjena

    ...

    zamjena:MOV BX, AXJMP petlja

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    53/64

    4.5. Instrukcije za upravljački prenos

    Uslovni skokovi

    To su kratki skokovi (8086-80286),odnosno kratki ili bliski (80386-Pentium)Instrukcije za realizaciju uslovnihskokova testiraju flegove: S , Z, C, P ,

    O Ako je uslov ispunjen vrši segrananje na odgovarajuću lokaciju,inače se izvršavanje nastavljasljedećom instrukcijom u programu

    Mnemonik uslov operacija

    JA Z=0 i C=0 skoči ako je iznad (above)

    JAE C=0skoči ako je iznad ili

    jednako (above or equal)

    JB C=1 skoči ako je ispod (below)

    JBE Z=1 ili C=1skoči ako je ispod ili

    jednako (below or equal)

    JC C=1 skoči ako je CF setovan

    JE Z=1 skoči ako je jednako (equal)

    JZ Z=1 skoči ako je ZF setovan

    JG Z=0 i S=0skoči ako je veće (greaterthan)

    JGE S=0 skoči ako je veće ili jednako (greater or equal)

    JL S0skoči ako je manje (lessthan)

    JLE Z = 1 iliS0skoči ako je manje ili

    jednako (less or equal)

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    54/64

    4.5. Instrukcije za upravljački prenos

    Uslovni skokovi

    To su kratki skokovi (8086-80286),odnosno kratki ili bliski (80386-Pentium)Instrukcije za realizaciju uslovnihskokova testiraju flegove: S , Z, C, P ,

    O Ako je uslov ispunjen vrši segrananje na odgovarajuću lokaciju,inače se izvršavanje nastavljasljedećom instrukcijom u programu

    Mnemonik uslov operacija

    JNC C=0 skoči ako CF nije setovan

    JNE Z=0 skoči ako nije jednako

    JNZ Z=0 skoči ako ZF nije setovan

    JNO O=0 skoči ako OF nije setovan

    JO O=1 skoči ako je OF setovan

    JNS S=0 skoči ako SF nije setovan JS S=1 skoči ako je SF setovan

    JNP P=0 skoči ako PF nije setovan

    JP P=1 skoči ako je PF setovan

    JCXZ CX=0 skoči ako je CX=0

    JECXZ ECX=0 skoči ako je ECX=0

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    55/64

    4.5. Instrukcije za upravljački prenos

    Uslovni skokovi

    JG, JGE, JL, JLE Koriste se kod označenih podataka

    CMP 0FFh, 00hJG labela ; ne izvršava se skok, jer je FF ( -110 ) < 0

    JA, JAE, JB, JBE Koriste se kod neoznačenih podataka

    CMP 0FFh, 00hJA labela ; izvršava se skok, jer je FF (255 10) > 0

    č

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    56/64

    4.5. Instrukcije za upravljački prenos Lokalne labele

    labele čiji naziv počinje tačkom. vidljive su samo u opsegu između dvije globalne labele, prilikom prevođenja, lokalne labele se referenciraju preko odgovarajuće globalne labele(globalna.lokalna),asemblerski program može imati proizvoljan broj lokalnih labela istog naziva, pri čemu svakalokalna labela mora biti jedinstvena u svom globalnom bloku.

    prviblok:

    mov eax, 1mov ebx, 2

    .lokalna:mov ecx, 3

    jmp .lokalna ; prevodi se kao jmp prviblok.lokalnadrugiblok:

    mov edx, 4

    .lokalna:add eax, ebx

    jmp prviblok.lokalna ; dozvoljeno treciblok:

    mov eax, edx jmp .lokalna ; greška

    k l čk

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    57/64

    4.5. Instrukcije za upravljački prenos

    Instrukcije za uslovno setovanje

    SET lokacija

    Postavlja (upisuje 01h) ili briše (upisuje00h) datu mem. lokaciju zavisno da li jetestirani uslov ispunjen ili ne

    I k ij lj čki

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    58/64

    4.5. Instrukcije za upravljački prenos

    Instrukcije za uslovno setovanje

    Mnemonik Uslov Operacija

    SETA Z=0 i C=0 setuj ako je iznad (above)

    SETAE C=0 setuj ako je iznad ili jednako (above orequal)

    SETB C=1 setuj ako je ispod (below)

    SETBE Z=1 ili C=1 setuj ako je ispod ili jednako (below orequal)

    SETC C=1 setuj ako je CF setovan

    SETE Z=1 setuj ako je jednako (equal)

    SETZ Z=1 setuj ako je ZF setovan

    SETG Z=0 i S=0 setuj ako je veće (greater than) SETGE S=0

    setuj ako je veće ili jednako (greater orequal)

    SETL S0 setuj ako je manje (less than)

    SETLE Z=1 ili S0 setuj ako je manje ili jednako (less orequal)

    I k ij lj čki

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    59/64

    4.5. Instrukcije za upravljački prenos

    Instrukcije za uslovno setovanje

    Mnemonik Uslov Operacija

    SETNC C=0 setuj ako CF nije setovan

    SETNE Z=0 setuj ako nije jednako

    SETNZ Z=0 setuj ako ZF nije setovan

    SETNO O=0 setuj ako OF nije setovan

    SETO O=1 setuj ako je OF setovan

    SETNS S=0 setuj ako SF nije setovan

    SETS S=1 setuj ako je SF setovan

    SETNP P=0 setuj ako PF nije setovan

    SETP P=1 setuj ako je PF setovan

    I k ij lj čki

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    60/64

    4.5. Instrukcije za upravljački prenos

    Iterativno upravljanje

    Tu se ubrajaju instrukcije za realizaciju petljiNajčešće se koriste brojačke petlje

    brojač = broj ponavljanja

    BLOKINSTRUKCIJA

    brojač = brojač - 1

    brojač == 0 ?

    DA

    NE

    Prvo se postavi početna vrijednostbrojača (željeni broj ponavljanja)

    Blok je skup instrukcija koji treba da seizvede u svakom koraku

    Nakon što se izvede dati blokdekrementira se brojač i provjerava

    njegova vrijednostSve dok je brojač 0 izvršava se datiblok

    Kad je brojač==0 izlazi se iz petlje

    I k ij lj čki

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    61/64

    4.5. Instrukcije za upravljački prenos

    Iterativno upravljanje

    Tu se ubrajaju instrukcije za realizaciju petljiNajčešće se koriste brojačke petlje

    brojač = broj ponavljanja

    BLOKINSTRUKCIJA

    brojač = brojač - 1

    brojač == 0 ?

    DA

    NE

    Prvo se postavi početna vrijednostbrojača (željeni broj ponavljanja)

    Blok je skup instrukcija koji treba da seizvede u svakom koraku

    Nakon što se izvede dati blokdekrementira se brojač i provjerava

    njegova vrijednostSve dok je brojač 0 izvršava se datiblok

    Kad je brojač==0 izlazi se iz petlje

    MOV CX, [n]PETLJA:

    ...DEC CXJNZ PETLJA

    MOV CX, [n]PETLJA:

    ...LOOP PETLJA

    I t k ij lj čki

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    62/64

    4.5. Instrukcije za upravljački prenos

    Iterativno upravljanje

    Postoje i tzv. uslovne LOOP instrukcije

    Mnemonik Uslov Operacija

    LOOPZ Z=1 i CX0 ponavljaj sve dok je ZF=1 i CX0

    LOOPNZ Z=0 i CX0 ponavljaj sve dok je ZF=0 i CX0

    LOOPE Z=1 i CX0 ponavljaj sve dok je ZF=1 i CX0

    LOOPNE Z=0 i CX0 ponavljaj sve dok je ZF=0 i CX0

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    63/64

    4 6 I k ij lj j

  • 8/18/2019 04 - Instrukcijski Set Mikroprocesora

    64/64

    4.6. Instrukcije za upravljanje procesorom

    Instrukcija za zaustavljanje rada mikroprocesora

    HLT Prekida rad mikroprocesora i dovodi ga u stanje HALT iz kojeg ga možeprobuditi samo vanjski prekid ili reset signal

    Instrukcija “bez efekta”

    NOP No operation. Koristi se od strane procesora kod paralelizacije.