Sunteți pe pagina 1din 14

Agenda

Microprocesoare- moduri de operare


Modul real
Setul de instructiuni

- continuare

Modul protejat

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

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.

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

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.

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

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

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

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:

MOV AH, [SI]


MOV [DI], AH
INC SI
INC DI
DEC CX
JNZ NEXTPT
HLT

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

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)

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

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)

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

14

Setul de Instructiuni

Instructiuni PUSH si POP


PUSH salveaza parametrii in stiva, iar POP ii obtine
inapoi.
Format PUSH S; POP D;
Operandul (S sau D) pe 16 biti poate fi un registru de uz
general, un registru segment sau o locatie de memorie.
PUSH AX
POP DX
Fara operand: PUSHF; POPF; PUSHA; POPA; PUSHAD;
POPAD push flags; push all (16-biti) push all 32-biti;

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

15

Setul de Instructiuni

Instructiuni de tratare a buclelor (Loop handling instructions)


Aceste instructiuni pot fi utilizate in locul unor instructiuni de salt
conditional si ii dau programatorului un mod mai simplu pentru scrierea
secventelor din bucle.
Format: LOOP Short-label
Instructiunea LOOP lucreaza cu continutul registrului CX. CX se incarca
cu un numar ce reprezinta numarul de cate ori se executa bucla. De cate
ori se executa bucla continutul lui CX este mai intai decrementat si apoi
este verificart ca nu e zero. Daca este 0 bucla se termina si se executa
instructiunea urmatoare.
Exemplu: daca CX este incarcat cu 000AH, de cate ori se executa
secventa de instructiuni din bucla?

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

16

Setul de Instructiuni

Instructiuni de tratare a buclelor (Loop handling instructions)


MOV AX, DATASEGADDR
MOV DS,AX
MOV SI, BLK1ADDR
MOV DI, BLK2ADDR
MOV CX,N
NEXTPT:
MOV AH, [SI]
MOV [DI], AH
INC SI
INC DI
LOOP NEXTPT
HLT

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

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

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

19

Modul protejat de operare


Modul protejat permite accesul la date si programe aflate la
adrese de memorie mai mari de 1 Mbyte.
Se schimba schema de adresare (segment, offset) specifica
modului real de operare.
Comparatie cu modul real:
1) exista offset pentru accesul informatiei dintr-un segment;
2) adresa de segment nu mai exista. Registrul de segment
contine un selector;
3) diferenta in modul in care se acceseaza segmentul de
memorie

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

20

10

Modul protejat de operare


Selectori si descriptori
The selector, located in the segment register, selects one of
8192 descriptors from a table of descriptors.
The descriptor describes the location, length and access
rights of a segment of memory.
There are two descriptor tables used with the segment
registers:
Tabela de descriptori globali - global descriptors table
(GDT) - Global descriptors contain segments that apply to
all programs
Tabela de descriptori locali - local descriptors table (LDT)
- Local descriptors are unique to an application.
Fiecare tabela contine 8192 descriptori, astfel ca 16384
descriptori sunt disponibili oricand.

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

21

Formatul unui descriptor de segment de memorie

The format of a descriptor is 8 bytes in length, so LDT and GDT


are each a maximum of 64 KBytes in length.

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

22

11

Formatul unui descriptor de segment de memorie


The base address indicates the starting location of the memory
segment.
For 80286 is 24-bit address, thus any of 16 MB of memory could
be this address.
For 80386/80486 is a 32-bit address, thus any address within
4GB of memory.
The segment limit contains the last offset address found in a
segment. It is 16-bit limit for 80286 and 20-bit limit for 80386/80486.
For example: If a segment begins at memory location F00000H and
ends at location F000FFH, then:
80286: the base address is F00000H and the limit is 00FFH
80386/80486: the base address is 00F000000H and the limit is
000FFH

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

23

Formatul unui descriptor de segment de memorie

The access rights byte controls access to the memory


segment. It describes how the segment functions in the
system.
If the segment is a data segment, the direction of growth
can be specified. If the segment grows beyond its limit, the
microprocessor program is interrupted.
If a data segment can be written or is write-protected.
The code segment is also controlled in a similar way and
can have reading inhibited.

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

24

12

Formatul unui descriptor de segment de memorie


- Octetul drepturilor de acces

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

25

Formatul unui descriptor de segment de memorie


Other 80386/80486 specific features in the descriptor format
are:
G-bit represents granularity. If G=1, the value of limit is
multiplied by 4KB, if G=0, the limit specifies a segment limit of
from 1 Byte to 1 MByte in length.
AV-bit bit is used by the operating system and indicates that the
segment is available (AV=1) or not available (AV=0).
D-bit indicates how instructions access register and memory
data in protected mode. This flag should always be set to 1 for
32-bit instructions. The 32-bit instruction mode assumes all
offset addresses and all reregisters are 32 bits. If D=0 the
instructions are 16-bit and they use 16-bit offset addresses and
16-bit registers. This mode is often called the 16-bit instruction
mode.

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

26

13

Modul protejat
Continutul registrului de segment

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

27

Registrul de segment, descriptor in GDT si


segmentul de memorie

00
00
92
12
00
00
00
F7

Liliana Dobrica, Sisteme cu Microprocesoare


2013-2014

28

14

S-ar putea să vă placă și