Documente Academic
Documente Profesional
Documente Cultură
- continuare
Modul protejat
Setul de Instructiuni
Grupuri de functionalitate:
Aceste grupuri includ:
1. Instructiuni de transfer de date,
2. Instructiuni aritmetice,
3. Instructiuni logice,
4. Instructiuni de deplasare a bitilor (shift),
5. Instructiuni de rotire a bitilor (rotate),
6. Bit test si Bit scan,
7. Instructiuni de control flag-uri,
8. Instructiuni de comparare si setare,
9. Instructiuni de salt (jump),
10.Instructiuni de apelare a subrutinelor,
11.Instructiuni de lucru cu stiva PUSH si POP,
12.Instructiuni de tratare a buclelor si string-urilor
Liliana Dobrica, Sisteme cu Microprocesoare
2013-2014
Setul de Instructiuni
Instructiuni de rotire a bitilor
Acest grup este similar instructiunilor de deplasare a bitilor. Diferenta consta in
faptul ca bitii deplasati sunt reincarcati la celalat capat al registrului.
ROL AX, 1 ; continutul lui AX este rotit o pozitie de bit la stanga. MSB este
incarcat cu LSB; CF reflecta starea ultimului bit deplasat.
ROR AX, CL ;continutul lui AX este rotit un numar de biti specificati de CL
la dreapta.
Instructiuni RCR si RCR, bitii sunt rotiti prin CF (flag-ul de transport)
Exemplu: Daca (AX) este 1234 si CF este 0, cat va fi (AX) dupa executia
ROL AX,1; Raspuns: 0001001000110100 va deveni 0010010001101000
iar CF va fi 0
Exemplu: Care este rezultatul in (BX) si (CF) dupa executia RCR BX,CL?
Inaintea executiei instructiunii: (CL) =04H, (BX)= 1234H
Liliana Dobrica, Sisteme cu Microprocesoare
2013-2014
Setul de Instructiuni
Instructiuni Bit test si Bit scan
Instructiunile bit test testeaza starea unui singur bit, in timp ce bit scan
scaneaza bitii operandului sursa - registru/locatie de memorie - sa stabileasca
daca sunt/nu sunt toti 0.
Instructiunile bit test testeaza nivelul logic al unui bit din continutul unui registru
sau a unei locatii de memorie. Starea bitului testat este copiata in CF.
BT EAX, EDI
; bitul din EAX este selectat de indexul din (EDI) , apoi
este testat, iar valoarea sa este salvata in CF.
Variante: BTR EAX, EDI ; valoarea bitului testat este salvata in CF si apoi
acest bit din EAX este resetat
BTC BX,7 ; bit test and complement; Daca BX contine 03F0H, dupa
executie va fi 0370H, iar CF 1.
Setul de Instructiuni
Instructiuni Bit test si Bit scan.
Instructiunile bit scan scaneaza bitii operandului sursa - registru/locatie de
memorie - sa stabileasca daca sunt/nu sunt toti 0.
BSF ESI,EDX ; bit scan forward (BSR bit scan reverse) - bitii din (EDX) sunt
testati unul dupa altul incepand cu bitul din poz. 0. Daca toti bitii sunt 0, atunci ZF
devine 0. Altfel valoarea indexului (pozitia bitului +1) primului bit testat fiind 1
este copiat in registrul ESI.
Setul de Instructiuni
Instructiuni de control flag-uri
Acest grup contine instructiuni care afecteaza direct starea flagurilor.
Flagurile fie monitorizeaza starea executiei unei instructiuni, fie controleaza
diverse optiuni de operare. Astfel de instructiuni pot fi:
LAHF ; incarca AH cu flaguri
7
0
SF ZF AF PF - CF
Formatul registrului AH este:
SAHF ; memoreaza AH in flaguri
CLC, STC, CMC ; sterge/seteaza/complement flagul de transport
CLI, STI ;sterge/seteaza flagul de intreruperi
Secventa de instructiuni: MEM1, MEM2 locatii de memorie
LAHF
MOV MEM1,AH
MOV AH, MEM2
SAHF
Liliana Dobrica, Sisteme cu Microprocesoare
2013-2014
Setul de Instructiuni
Instructiuni de comparare si setare
Sunt utilizate sa compare doua numere reprezentate pe 8-, 16-,
32- biti.
CMP D,S ; rezultatul (D)-(S) seteaza/reseteaza flagurile.
Rezultatul este reflectat in schimbarile flagurilor de stare CF, AF,
OF, PF, SF, ZF. Noua stare logica a acestor flaguri este utilizata
de alte instructiuni pentru a decide daca se modifica sau nu
secventa de instructiuni a programului.
Exemplu: Presupunand ca initial sunt toti 0, ce se intampla cu ZF,
SF, CF, AF, OF si PF dupa executia secventei?
MOV AX, 1234H
MOV BX, ABCDH
CMP AX,BX
Liliana Dobrica, Sisteme cu Microprocesoare
2013-2014
Setul de Instructiuni
Instructiuni de comparare si setare
Instructiunea SETcc D;(Byte set on condition) este utilizata sa
testeze diferite stari ale flagurilor; cc este parte a mnemonicii
instructiunii, iar D este destinatia (registru/ locatie de memorie- 8
biti)
Exemplu:
SETA AL; set byte if above; daca ((CF)=0 si (ZF) = 0) atunci
11111111 -> AL, altfel 00000000 -> AL
SETE AL ; set if equal; daca (ZF) =1 atunci 1111111 ->AL, altfel
000000000 - > AL
Setul de Instructiuni
Instructiuni de salt (Jump)
Scopul acestor instructiuni este de a da o alta cale de executie a
programului.
Exista 2 tipuri de instructiuni de salt, salt neconditionat si salt conditionat.
Saltul neconditionat poate fi salt intrasegment, care este limitat la adresele
din segmentul curent de cod si salt intersegment care permite salturi de la
un segment de cod la altul.
Formatul instructiunii: JMP Operand ; Operandul poate fi:
Intrasegment: Short-label; Near-label,
Intersegment: Far-label, Memptr 16, Regptr 16, Memptr 32, Regptr 32
Exemple:
JMP LABEL
; salt in program la eticheta LABEL;
JMP BX
; noua valoare a lui IP este continutul lui (BX);
JMP [BX]
;continutul lui BX este adresa de memorie care are offsetul.
Offsetul este incarcat in IP, care cu continutul curent al CS stabilesc adresa
de salt.
Liliana Dobrica, Sisteme cu Microprocesoare
2013-2014
Setul de Instructiuni
Instructiuni de salt (Jump)
JMP DWORD PTR [DI] ; continutul registrelor (DS) si (DI) este utilizat la
calculul adresei de memorie care contine pointer double-word ce identifica
locatia la care va fi saltul. Pointerul double-word este citit in reg. IP (primii 16
biti) si CS (ultimii 16 biti) pentru a pasa controlul noului punct din program.
Instructiunile de salt conditionat testeaza prezenta sau absenta unor
anumite conditii de stare.
Au formatul Jcc Operand ;
Exemple:
JC Label ; jump on carry daca CF =1 programul continua cu instructiunea
de la eticheta Label, altfel continua cu instructiunea urmatoare.
JP (jump on parity PF=1); JPE (jump on parity even - PF = 1); JNP (not
parity - PF=0); JPO (parity odd PF=0)
JE (jump if equal - ZF=1); JZ (jump if zero ZF= 1)
Liliana Dobrica, Sisteme cu Microprocesoare
2013-2014
10
Setul de Instructiuni
Instructiuni de salt (Jump)
Exercitiu: Scrieti un program care sa mute un bloc de N octeti de date,
incepand cu offsetul BLK1ADDR intr-un alt bloc de date care incepe de la
offsetul BLK2ADDR. Blocurile sunt in acelasi segment de date care incepe
cu DATASEGADDR.
Solutie:
1. Initializarea registrelor DS, SI, DI, CX
MOV AX, DATASEGADDR ; DS nu se poate incarca cu un operand imediat
MOV DS,AX
MOV SI, BLK1ADDR
MOV DI, BLK2ADDR
MOV CX,N ; initializare contor
2. Copierea datelor din blocul sursa in blocul destinatie prin intermediul AX:
a) copierea din sursa in acumulator b) copierea din acumulator in destinatie;
c) actualizare contor, pointer sursa si pointer destinatie
3. Test : toate datele au fost mutate?
4. Stop
Liliana Dobrica, Sisteme cu Microprocesoare
2013-2014
11
Setul de Instructiuni
Instructiuni de salt (Jump)
Continuare
NEXTPT:
12
Setul de Instructiuni
Instructiuni apelare a subrutinelor
Acest grup include instructiuni care transfera controlul de la programul principal
la o subrutina si revenirea controlului inapoi programului principal. Instructiunile
de baza sunt CALL si RET. CALL poate fi
Intrasegment. IP este adresa urmatoarei instructiuni care urmeaza dupa CALL;
IP este salvat in stiva, (SP) -> (SP)-2;
Operanzi intrasegment specifica noua valoare pentru IP: Near-proc,
Memptr16, Regptr16
CALL NPROC; operand imediat 16 biti offset relativ la CALL
CALL BX; (BX) ->(IP) subrutina se afla la adresa CS:IP
CALL WORD PTR [BX] ; IP este incarcat cu adresa locatiei de
memorie derivata din continutul (DS) si (BX)
13
Setul de Instructiuni
Instructiuni apelare a subrutinelor
Call Intersegment. (CS) si (IP) sunt salvate in stiva;IP si CS sunt incarcate cu
noile valori.
Operanzi intersegment:
CALL FPROC ; operand imediat 32 biti se incarca in IP si CS
CALL DWORD PTR [DI]; adresa fizica din memorie este derivata din
(DS) si (DI)
Fiecare subrutina trebuie sa se termine prin executarea unei instructiuni care
returneaza controlul programului principal. Aceasta instructiune se numeste
RET.
Valorile salvate in stiva sunt reincarcate in registrele asociateIP sau (IP si
CS)
14
Setul de Instructiuni
15
Setul de Instructiuni
16
Setul de Instructiuni
17
Setul de Instructiuni
Instructiuni de manipulare a stringurilor.
Un string este o serie de octeti, words sau double words de date
aflate in locatii de memorie consecutive.
Aceste instructiuni pot:
Muta/ Copia stringuri dintr-o zona de memorie in alta zona de
memorie: MOVSB; MOVSW; MOVSD;
Scana elementele unui string de date in cautarea unei
anumite valori: SCANSB, etc; Afecteaza flagurile:
CF,PF,AF,ZF,SF,OF.
Compara elementele a doua stringuri pentru a stabili daca
sunt la fel sau diferite: CMPSB, etc; Afecteaza flagurile:
CF,PF,AF,ZF,SF,OF.
Initializa un grup de locatii consecutive de memorie: LODSB;
STOSB
Liliana Dobrica, Sisteme cu Microprocesoare
2013-2014
18
Setul de Instructiuni
Instructiuni de manipulare a stringurilor
Exemplu
MOV AX, DATASEGADDR
MOV DS,AX
MOV ES, AX
MOV SI, BLK1ADDR
MOV DI, BLK2ADDR
MOV CX,N
CLD
NEXTPT:
MOVSB
LOOP NEXTPT
HLT
19
20
10
21
22
11
23
24
12
25
26
13
Modul protejat
Continutul registrului de segment
27
00
00
92
12
00
00
00
F7
28
14