04 - Instrukcijski Set Mikroprocesora
-
Upload
jelena-rakonjac -
Category
Documents
-
view
236 -
download
1
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.