CursMS5_2014prezentat

14
•1 © Liliana Dobrica, Sisteme cu Microprocesoare 2013-2014 1 Agenda Microprocesoare- moduri de operare Modul real Setul de instructiuni - continuare Modul protejat © Liliana Dobrica, Sisteme cu Microprocesoare 2013-2014 2 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

Transcript of CursMS5_2014prezentat

Page 1: CursMS5_2014prezentat

•1

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 1

Agenda

• Microprocesoare- moduri de operare

• Modul real

• Setul de instructiuni - continuare

• Modul protejat

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 2

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

Page 2: CursMS5_2014prezentat

•2

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 3

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 4

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.

Page 3: CursMS5_2014prezentat

•3

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 5

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 6

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

• 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

SF ZF – AF – PF - CF

7 0

Page 4: CursMS5_2014prezentat

•4

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 7

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 8

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

Page 5: CursMS5_2014prezentat

•5

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 9

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 10

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)

Page 6: CursMS5_2014prezentat

•6

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 11

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 12

Setul de Instructiuni

Instructiuni de salt (Jump)

Continuare

NEXTPT: MOV AH, [SI]

MOV [DI], AH

INC SI

INC DI

DEC CX

JNZ NEXTPT

HLT

Page 7: CursMS5_2014prezentat

•7

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 13

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 14

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)

Page 8: CursMS5_2014prezentat

•8

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 15

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 16

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?

Page 9: CursMS5_2014prezentat

•9

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 17

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 18

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

Page 10: CursMS5_2014prezentat

•10

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 19

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 20

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

Page 11: CursMS5_2014prezentat

•11

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 21

Modul protejat de operareSelectori 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 22

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.

Page 12: CursMS5_2014prezentat

•12

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 23

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 24

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.

Page 13: CursMS5_2014prezentat

•13

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 25

Formatul unui descriptor de segment de memorie - Octetul drepturilor de acces

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 26

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.

Page 14: CursMS5_2014prezentat

•14

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 27

Modul protejatContinutul registrului de segment

© Liliana Dobrica, Sisteme cu Microprocesoare

2013-2014 28

Registrul de segment, descriptor in GDT si segmentul de memorie

00

00

92

12

00

00

00

F7