Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

CATEGORII DOCUMENTE




loading...



AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


INSTRUCTIUNI DE PRELUCRARE A DATELOR SI INSTRUCTIUNI DE CONTROL AL PROGRAMULUI (SALTURI PROPRIU-ZISE) PENTRU MICROPROCESOARELE INTEL

hardware

+ Font mai mare | - Font mai mic







DOCUMENTE SIMILARE

Trimite pe Messenger
Portul serial-RS232
Ghid de overburning
Componentele sistemelor de operare
Arhitectura 6x86
Memoria interna
NOTIUNI GENERALE DESPRE CALCULATORUL “P.C.”
Dat Plu 4 utilitar incarcare/descarcare nomenclator articole
Managerul de procese - Infrastructura :VME bus
Tipuri de memorie
CYRIX 6x86 (Octombrie 1995)

INSTRUCTIUNI DE PRELUCRARE A DATELOR

SI INSTRUCTIUNI DE CONTROL AL PROGRAMULUI

(SALTURI PROPRIU-ZISE)




PENTRU MICROPROCESOARELE INTEL

1. Scopul lucrarii

Lucrarea de fata isi propune familiarizarea cu instructiuni­le de prelucrare a datelor precum si cu o parte dintre instructiu­nile de control al programului (salturile propriu-zise, conditio­nate si neconditionate) specifice microprocesoa­relor Intel functionand “in modul real”.

2. Memoriu de instructiuni

Conventiile folosite sunt cele aratate in lucrarea de laborator nr. 3. Se va acorda o atentie deosebita modului in care sunt afectate fanioanele. La conventiile amintite se adauga:

nrcel numarul de celule cu care se poate face deplasarea sau rotatia unui operand.

2.1. Instructiuni aritmetice

OF DF IF TF SF ZF AF PF CF

ADD d,s

Adunare

x x x x x x

Descrierea formala a semanticii, in general: (d) (d) + (s)

 

Operanzi

Exemple

Descrierea formala a semanticii

 

AL|AX, data

ADD    AL,33H

(AL) (AL) + 33H

 

r, data

ADD    CH,10H

(CH) (CH) + 10H

 

mem, data

ADD    [BP],ALFA

((SS) 0H+(BP)) ((SS) 0H+(BP)) + ALFA

 

r1, r2

ADD    CL,CH

(CL) (CL) + (CH)

 

r, mem

ADD    SI,[SI+22H]

(SI) (SI) + ((DS) 0H + (SI) + 23H) ((DS) 0H + (SI) + 22H )

 

mem, r

ADD    [BX],BX

((DS) 0H+(BX)+1) ((DS) 0H+(BX)) ¬

((DS) 0H+(BX)+1) ((DS) 0H+(BX)) +

+ (BX)

Adunare

OF DF IF TF SF ZF AF PF CF

 

ADC d,s

cu transport

x x x x x x

 

 

Descrierea formala a semanticii, in general (d) (d) + (s) + (CF)

Operanzi

Exemple

Descrierea formala a semanticii

AL|AX, data

ADC    AL,15H

(AL) (AL) + 15H + (CF)

r, data

ADC    BX,0100H

(BX) (BX) + 100H + (CF)

mem, data

ADC    [DI],1234H

((DS) 0H+(DI)+1) ((DS) 0H+(DI)) ¬

((DS) 0H+(DI)+1) ((DS) 0H+(DI)) +

+ 1234H +(CF)

r1, r2

ADC    AX,DI

(AX) (AX) + (DI) + (CF)

r, mem

ADC    DX,[BX]

(DX) (DX) +((DS) 0H + (BX) + 1) ­ ((DS) 0H + (BX)) + (CF)

mem, r

ADC    [BX+DI+12H],DX

((DS) 0H + (BX) + (DI) + 13H)

((DS) 0H + (BX) + (DI) +12H)

((DS) 0H + (BX) + (DI) + 13H)

((DS) 0H + (BX) + (DI) +12H) +

+ (DX) + (CF)

Incrementarea

OF DF IF TF SF ZF AF PF CF

INC d

destinatiei

x x x x x

Descrierea formala a semanticii, in general (d) (d) + 1

Operanzi

Exemple

Descrierea formala a semanticii

r16

INC    BX

(BX) (BX) + 1

r8

INC    AL

(AL) (AL) + 1

mem

INC    [BP+DI]

((SS) 0H + (BP) + (DI))

¬ ((SS) 0H + (BP) + (DI)) + 1

Ajustare ASCII

OF DF IF TF SF ZF AF PF CF

AAA

pentru adunare

? ? x ? x

Descrierea formala a semanticii: if (AL) & 0F > 9 or (AF) = 1 then

(AL) (AL) + 6

(AH) (AH) + 1

(AF)

(CF) (AF)

(AL) (AL) & 0F.

Ajustare zecimala

OF DF IF TF SF ZF AF PF CF

DAA

pentru adunare

x x x x x

Descrierea formala a semanticii: if (AL) & 0F > 9 or (AF) = 1 then

(AL) (AL) + 06H

(AF)

if (AL) > 9F or (CF) = 1 then

(AL) (AL) + 60H

OF DF IF TF SF ZF AF PF CF

SUB d,s

Scadere

x x x x x x

Descrierea formala a semanticii, in general (d) (d) - (s)

Operanzi

Exemple

Descrierea formala a semanticii

AL|AX, data

SUB    AL,20H

(AL) (AL) - 20H

r, data

SUB    BX,5566H

(BX) (BX) - 5566H

mem, data

SUB    [BP+25H],444H

((SS) 0H+(BP)+26H)

((SS) 0H+(BP)+25H)

¬ ((SS) 0H+(BP)+26H)

((SS) 0H+(BP)+25H) -

- 0444H

r1, r2

SUB    DX,DI

(DX) (DX) - (DI)

r, mem

SUB    SI,[BX+100H]

(SI) (SI) - ((DS) 0H + (BX) + 101H) ­ ((DS) 0H + (BX) + 100H)

mem, r

SUB    [BP+50H],AX

((SS) 0H + (BP) + 51H)

­ ((SS) 0H + (BP) + 50H)

((SS) 0H + (BP) + 51H)

­ ((SS) 0H + (BP) + 50H) - (AX)

OF DF IF TF SF ZF AF PF CF

SBB d,s

Scadere cu imprumut

x x x x x x

Descrierea formala a semanticii, in general (d) (d) - (s) - (CF)

Operanzi

Exemple

Descrierea formala a semanticii

AL|AX, data

SBB    AX,1000H

(AX) (AX) - 1000H - (CF)

r, data

SBB    DI,23H

(DI) (DI) - 0023H - (CF)

mem, data

SBB    [BX+DI],33H

((DS) 0H+(BX)+(DI)) ((DS) 0H+(BX)+(DI))-

- 33H - (CF)

r1, r2

SBB    AL,BL

(AL) (AL) - (BL) - (CF)

r, mem

SBB    AH,[DI+55H]

(AH) (AH) - ((DS) 0H + (DI) + 55H) - (CF)

mem, r

SBB    [BX],DL

((DS) 0H + (BX)) ((DS) 0H + (BX))

- (DL) - (CF)

Decrementarea

OF DF IF TF SF ZF AF PF CF

DEC d

destinatiei

x x x x x

Descrierea formala a semanticii, in general (d) (d) - 1

Operanzi

Exemple

Descrierea formala a semanticii

r16

DEC    AX

(AX) (AX) - 1

r8

DEC    DH

(DH) (DH) - 1

mem

DEC    [BP+12H]

((SS) 0H + (BP) + 12H)

¬ ((SS) 0H + (BP) + 12H) - 1

Complementare

OF DF IF TF SF ZF AF PF CF

NEG d

fata de 2

x x x x x 1

a destinatiei

Descrierea formala a semanticii, in general (d) 0H - (d)

Operanzi

Exemple

Descrierea formala a semanticii

r

NEG     AX

(AX) 0H - (AX)

mem

NEG    [DI]

((DS) 0H + (DI)) 0H - ((DS) 0H + (DI))

(CF) = 0 daca (d) = 0H

Compararea

OF DF IF TF SF ZF AF PF CF

CMP s1,s2

prin scadere

x x x x x x

a doi operanzi

Descrierea formala a semanticii, in general (s ) - (s

Operanzi

Exemple

Descrierea formala a semanticii

AL|AX, data

CMP    AX,0FFFFH

(AX) - FFFFH

r, data

CMP    BX,10H

(BX) - 0010H

mem, data

CMP [BP+SI+5H],0ABH

((SS) 0H + (BP) + (SI) + 5H) - ABH

r1, r2

CMP    AL,CL

(AL) - (CL)

r, mem

CMP    BH,[100H]

(BH) - ((DS) 0H + 100H)

mem, r

CMP    [BX+SI+45H],DX

((DS) 0H + (BX) + (SI) + 46H)

((DS) 0H + (BX) + (SI) + 45H) - (DX)

Ajustare ASCII

OF DF IF TF SF ZF AF PF CF

AAS

pentru scadere

? ? x ? x

Descrierea formala a semanticii if (AL) & 0F > 9 or (AF) = 1 then

(AL) (AL) - 6, (AH) (AH) - 1

(AF)

(CF) (AF)



(AL) (AL) & 0F.

Ajustare zecimala

OF DF IF TF SF ZF AF PF CF

DAS

pentru scadere

x x x x x

Descrierea formala a semanticii: if (AL) & 0F > 9 or (AF) = 1 then

(AL) (AL) - 06H

(AF)

if (AL) > 9F or (CF) = 1 then

(AL) (AL) - 60H

(CF)

OF DF IF TF SF ZF AF PF CF

MUL s

Inmultire

x ? ? ? ? x

Descrierea formala a semanticii, in general:

pentru operatia pe 8 biti:    

(AX) (AL) * (s)    if (AH) = 0 then

(CF)

else (CF)

(OF) (CF)

iar pentru operatia pe 16 biti:

(DX) (AX) (AX) * (s) if (DX) = 0 then

(CF)

else (CF)

(OF) (CF)

Operanzi

Exemple

Descrierea formala a semanticii

r8

MUL    DL

(AX) (AL) * (DL)

r16

MUL    BX

(DX) (AX) (AX) * (BX)

mem8

MUL    [BP+DI]

(AX) (AL) * ((SS) 0H + (BP) + (DI))

mem16

MUL    [1268H]

(DX) (AX) (AX) * ((DS) 0H + 1269H)

­ ((DS) 0H + 1268H)

OF DF IF TF SF ZF AF PF CF

IMUL s

Inmultire cu semn

x ? ? ? ? x

Descrierea formala a semanticii, in general:

pentru operatia pe 8 biti:

(AX) (AL) * (s)

if (AH) = 0 or (AH) = FF then

(CF)

else (CF)

(OF) (CF)

iar pentru operatia pe 16 biti:   

(DX) (AX) (AX) * (s)

if (DX) = 0 or (DX) = FFFF then

(CF)

else (CF)

(OF) (CF)

Operanzi

Exemple

Descrierea formala a semanticii

r8

IMUL DL

(AX) (AL) * (DL)

r16

IMUL CX

(DX) (AX) (AX) * (CX)

mem8

IMUL [0ABCDH]

(AX) (AL) * ((DS) 0H + ABCDH)

mem16

IMUL [BX+550H]

(DX) (AX) (AX) * ((DS) 0H+(BX)+551H)

((DS) 0H+(BX)+550H)

Ajustare ASCII

OF DF IF TF SF ZF AF PF CF

AAM

pentru inmultire

x x ? x ?

(dupa inmutire)

Descrierea formala a semanticii (AH) (AL) div 0A

(AL) (AL) mod 0A

OF DF IF TF SF ZF AF PF CF

DIV s

Impartire

? ? ? ? ?

Descrierea formala a semanticii, in general:

pentru operatia pe 8 biti:

if (AX) div (s) > FF then

(SP) (SP) - 2

((SS) 0H + (SP) + 1) ((SS) 0H + (SP)) (F)

(IF)

(TF)

(SP) (SP) - 2

((SS) 0H + (SP) + 1) ((SS) 0H + (SP)) (CS)

(CS) (00003H) (00002H)

(SP) (SP) - 2

((SS) 0H + (SP) + 1) ((SS) 0H + (SP)) (IP)

(IP) (00001H) (00000H)

else (AL) (AX) div (s)

(AH) (AX) mod (s) ,

iar pentru operatia pe 16 biti:

if (DX) (AX) div (s) > FFFF then

(SP) (SP) - 2

((SS) 0H + (SP) + 1) ((SS) 0H + (SP)) (F)

(IF)

(TF)

(SP) (SP) - 2

((SS) 0H + (SP) + 1) ((SS) 0H + (SP)) (CS)

(CS) (00003H) (00002H)

(SP) (SP) - 2

((SS) 0H + (SP) + 1) ((SS) 0H + (SP)) (IP)

(IP) (00001H) (00000H)

else (AX) (DX) (AX) div (s)

(DX) (DX) (AX) mod (s)

Operanzi

Exemple

Descrierea formala a semanticii

r8

DIV    CL

(AL) (AX) div (CL)

(AH) (AX) mod (CL)

r16

DIV    BX

(AX) (DX) (AX) div (BX)

(DX) (DX) (AX) mod (BX)

mem8

DIV    [BP+50H]

(AL) (AX) div ((SS) 0H + (BP) + 50H)

(AH) (AX) mod ((SS) 0H + (BP) + 50H)

mem16

DIV    [DI+41H]

(AX) (DX) (AX) div ((DS) 0H+(DI)+42H)

((DS) 0H+(DI)+41H)

(DX) (DX) (AX) mod ((DS) 0H+(DI)+42H)

((DS) 0H+(DI)+41H)

OF DF IF TF SF ZF AF PF CF

IDIV s

Impartire cu semn

? ? ? ? ?

Descrierea formala a semanticii este similara cu cea de la instructiunea precedenta, cu exceptia compa­ratiei initiale care, pentru intregii cu semn, este:

pentru impartirea pe 8 biti:

if (AX) div (s) > 0 and (AX) div (s) > FF or

(AX) div (s) < 0 and (AX) div (s) < 0-FF-1 then

iar pentru impartirea pe 16 biti:

if (DX) (AX) div (s) > 0 and (DX) (AX) div (s) > FFFF or

(DX) (AX) div (s) < 0 and (DX) (AX) div (s) < 0-FFFF-1 then

Operanzi

Exemple

Descrierea formala a semanticii

r8

DIV    BL

(AL) (AX) div (BL)

(AH) (AX) mod (BL)

r16

DIV    CX

(AX) (DX) (AX) div (CX)

(DX) (DX) (AX) mod (CX)

mem8

DIV    [BX+SI]

(AL) (AX) div ((DS) 0H + (BX) + (SI))

(AH) (AX) mod ((DS) 0H + (BX) + (SI))

mem16

DIV    [BP]

(AX) (DX) (AX) div ((SS) 0H +(BP) +1)

­ ((SS) 0H +(BP))

(DX) (DX) (AX) mod ((SS) 0H +(BP) +1)

­ ((SS) 0H +(BP))

Ajustare ASCII pt.

OF DF IF TF SF ZF AF PF CF

AAD

impartire (inainte

x x ? x ?

de imartire)

Descrierea formala a semanticii: (AL) (AH) * 0AH + (AL)

(AH) 0H

Extindere (cu semn)

OF DF IF TF SF ZF AF PF CF

CBW

a unui octet la un

cuvant

Descrierea formala a semanticii:    if (AL) < 80H then

(AH) 00H

else (AH) FFH

Extindere (cu semn)

OF DF IF TF SF ZF AF PF CF

CWD

a unui cuvant la un

cuvant dublu

Descrierea formala a semanticii:    if (AX) < 8000H then

(DX) 0000H

else (DX) FFFFH

2.2. Operatii logice

Complementare

OF DF IF TF SF ZF AF PF CF

NOT d

fata de 1

a destinatiei

Descrierea formala a semanticii, in general: (d) FFH - (d)

pentru operand pe 8 biti,

sau (d) FFFFH - (d)

pentru operand pe 16 biti.

Operanzi

Exemple

Descrierea formala a semanticii

r

NOT     AX

(AX) FFFFH - (AX)

mem

NOT    [0EEFFH]

((DS) 0H +EEFFH) FFH -

- ((DS) 0H+EEFFH)

OF DF IF TF SF ZF AF PF CF

AND d,s

SI logic

x x ? x 0

Descrierea formala a semanticii, in general: (d) (d) & (s)

Operanzi

Exemple

Descrierea formala a semanticii

AL|AX, data

AND    AX,0FFH

(AX) (AX) & 0033H

r, data

AND    CX,10H

(CX) (CX) & 0010H

mem, data



AND    [DI],0AAAAH

((DS) 0H +(DI) +1) ((DS) 0H +(DI))

((DS) 0H +(DI) +1) ((DS) 0H +(DI)) &

& AAAAH

r1, r2

AND    CL,DL

(CL) (CL) & (DL)

r, mem

AND    DX,[BP]

(DX) (DX) & ((SS) 0H + (BP) + 1H) ­ ((SS) 0H + (BP))

mem, r

AND    [BX+DI],CL

((DS) 0H+(BX)+(DI))

((DS) 0H+(BX)+(DI)) & (CL)

Compararea

OF DF IF TF SF ZF AF PF CF

TEST s1, s2

prin SI logic

x x ? x 0

nedistructiv

Descrierea formala a semanticii, in general (s ) & (s

Operanzi

Exemple

Descrierea formala a semanticii

AL|AX, data

TEST AL,55H

(AL) & 55H

r, data

TEST DI,1234H

(DI) & 1234H

mem, data

TEST [SI],00101100B

((DS) 0H + (SI)) & 00101100B

r1, r2

TEST DI,BX

(DI) & (BX)

r, mem

TEST CL,[SI]

(CL) & ((DS) 0H + (SI))

OF DF IF TF SF ZF AF PF CF

OR d,s

SAU logic

x x ? x 0

Descrierea formala a semanticii, in general (d) (d) (s)

Operanzi

Exemple

Descrierea formala a semanticii

AL|AX, data

OR    AL,22H

(AL) (AL) 22H

r, data

OR    DX,1FFFH

(DX) (DX) 1FFFH

mem, data

OR    [BP+SI],1

((SS) 0H +(BP) + (SI))

¬ ((SS) 0H +(BP) + (SI)) 01H

r1, r2

OR    CL,BL

(CL) (CL) (BL)

r, mem

OR    BX,[SI]

(BX) (BX) ((DS) 0H + (SI) + 1H) ­ ((DS) 0H + (SI))

mem, r

OR    [BP+DI],CX

((SS) 0H +(BP) +(DI) +1)

((SS) 0H +(BP) +(DI))

((SS) 0H +(BP) +(DI) +1)

((SS) 0H +(BP) +(DI))

(CX)

OF DF IF TF SF ZF AF PF CF

XOR d,s

SAU exclusiv

x x ? x 0

Descrierea formala a semanticii, in general: (d) (d) (s)

Operanzi

Exemple

Descrierea formala a semanticii

AL|AX, data

XOR    AX,333H

(AX) (AX) 0333H

r, data

XOR    BP,245H

(BP) (BP) 0245H

mem, data

XOR    [DI],7788H

((DS) 0H +(DI) +1H) ((DS) 0H +(DI))

((DS) 0H +(DI) +1H) ((DS) 0H +(DI))

Å 7788H

r1, r2

XOR    DX,SI

(DX) (DX) (SI)

r, mem

XOR    CX,[BX+SI]

(CX) (CX) ((DS) 0H +(BX) +(SI) +1H) ((DS) 0H +(BX) +(SI))

mem, r

XOR    [DI+0AAH],BL

((DS) 0H +(DI) +AAH)

((DS) 0H +(DI) +AAH) (BL)

2.3. Deplasari si rotatii

Deplasare stanga

OF DF IF TF SF ZF AF PF CF

SAL | SHL

logica sau

x x x ? x x

s,nrcel

aritmetica

Descrierea formala a semanticii

Operanzi

Exemple

r, 1

SHL BX,1

r, CL

SAL DX,CL

mem, 1

SHL [BX+SI],1

mem, CL

SHL [DI+10H],CL

while nrcel do

(CF) (s)msb

(s) (s) * 2

(s)lsb

nrcel nrcel - 1

if nrcel = 1 then

if (s)msb (CF) then

(OF)

else (OF)

else (OF) nedeterminat .

Deplasare dreapta

OF DF IF TF SF ZF AF PF CF

SHR s, nrcel

logica

x x x ? x x

Descrierea formala a semanticii

Operanzi

Exemple

r, 1

SHR DL,1

r, CL

SHR BX,CL

mem, 1

SHR [DI],1

mem, CL

SHR    [BP+SI+4H],CL

while nrcel do

(s)msb

(s) (s) div 2

(CF) (s)lsb

nrcel nrcel - 1

if nrcel = 1 then

if (s)msb (s)msb-1 then

(OF)

else (OF)

else (OF) nedeterminat .

Deplasare dreapta

OF DF IF TF SF ZF AF PF CF

SAR s, nrcel

aritmetica

x x x ? x x

Descrierea formala a semanti­cii este

Operanzi

Exemple

r, 1

SAR BH,1

r, CL

SAR AX,CL

mem, 1

SAR [BX],1

mem, CL

SAR [BP+SI],CL

similara cu cea a instructiunii

precedente (singura deosebire fiind ca msb trebuie sa fie pastrat, iar OF este resetat si daca nrcel

OF DF IF TF SF ZF AF PF CF

ROL s, nrcel

Rotatie stanga

x x

Descrierea formala a semanticii

Operanzi

Exemple

r, 1

ROL SI,1

r, CL

ROL DX,CL

mem, 1

ROL [BX+DI],1

mem, CL

ROL [BP+100H],CL

while nrcel do

(s) (s) * 2

(CF) (s)msb

(s)lsb (s)msb

nrcel nrcel - 1

if nrcel = 1 then

if (s)msb (CF) then

(OF)

else (OF)

else (OF) nedeterminat .

OF DF IF TF SF ZF AF PF CF

ROR s, nrcel

Rotatie dreapta

x x

Descrierea formala a semanticii:

Operanzi

Exemple

r, 1

ROR AX,1

r, CL

ROR DX,CL

mem, 1

ROR [BP],1

mem, CL

ROR [1000H],CL

while nrcel do

(s) (s) div 2

(s)msb (s)lsb

(CF) (s)lsb

nrcel nrcel - 1

if nrcel = 1 then

if (s)msb (s)msb-1 then

(OF)

else (OF)

else (OF) nedeterminat .

Rotatie stanga

OF DF IF TF SF ZF AF PF CF

RCL s, nrcel

cu transport

x x

Descrierea formala a semanti­cii este

asemanatoare cu rotatia stanga simpla.

Operanzi

Exemple

r, 1



RCL CX,1

r, CL

RCL AL,CL

mem, 1

RCL [SI],1

mem, CL

RCL [BX+DI],CL

Rotatie dreapta

OF DF IF TF SF ZF AF PF CF

RCR s,nrcel

cu transport

x x

Descrierea formala a semanticii este

asemanatoare cu a celorlalte rotatii.

Operanzi

Exemple

r, 1

RCR AX,1

r, CL

RCR BX,CL

mem, 1

RCR [BP+DI],1

mem, CL

RCR [BX],CL

2.4. Salturi propriu-zise neconditionate

Salt propriu-zis,

OF DF IF TF SF ZF AF PF CF

JMP adr

neconditionat

Descrierea formala a semanticii, in functie de modul de adresare folosit:

a) Salt cu adresare absoluta (directa) intersegment

JMP adr32 ; (CS) adr32h

(IP) adr32l

Sau, punand in evidenta faptul ca adresa completa face parte din formatul instructiunii

(CS) ((CS) 0H+(IP)+4) ((CS) 0H+(IP)+3)

(IP) ((CS) 0H+(IP)+2) ((CS) 0H+(IP)+1)

b) Salt cu adresare relativa:

JMP disp8|disp16 ; (IP) (IP) + disp8|disp16

Deplasamentul face parte din formatul instructiunii curente

c) Salt cu adresare in registru sau indirecta in memorie, intraseg­ment

JMP r16 | mem16 ; (IP) (r16) | (mem16)

d) Salt cu adresare indirecta in memorie, intersegment

JMP mem32 ; (CS) (mem32)h

(IP) (mem32)l

Operanzi

Exemple

Descrierea formala a semanticii

adr32

JMP    ET-IN-ALT-SEG

(CS) ((CS) 0H+(IP)+4) ((CS) 0H+(IP)+3)

(IP) ((CS) 0H+(IP)+2) ((CS) 0H+(IP)+1)

disp16

JMP    ET-IN-SEG

(IP) (IP) +

+ ((CS) 0H+(IP)+2) ((CS) 0H+(IP)+1)

disp8

JMP     FOARTE-APROAPE

(IP) (IP) + ((CS) 0H+(IP)+1)

r16

JMP    BX

(IP) (BX)

mem*

JMP    [BX]

(IP) ((DS) 0H+(BX)+1) ((DS) 0H+(BX))

mem**

JMP    [DI]

(CS) ((DS) 0H+(DI)+3) ((DS) 0H+(DI)+2)

(IP) ((DS) 0H+(DI)+1) ((DS) 0H+(DI))

* salt cu adresare indirecta definit cu directiva de asamblare ca salt intra-segment;

** salt cu adresare indirecta definit cu directiva de asamblare ca salt inter-segment.

2.5. Salturi conditionate

Salt propriu-zis,

OF DF IF TF SF ZF AF PF CF

Jxx disp8

neconditionat

Descrierea formala a semanticii:

if conditie then

(IP) (IP) + disp8 sau, detaliat:

(IP) (IP) + ((CS) 0H+(IP)+1)

Adunarea se face prin extensie cu semn la un numar de16 biti.

Mnemonica

Cond. testata

Interpretare

JA | JNBE

(CF)sau(ZF)=0

Salt daca 'peste' daca 'nu sub sau egal'

JAE|JNB|JNC

(CF)=0   

Salt daca 'peste sau egal' daca 'nu sub' daca 'nu exista transport'

JB|JNAE|JC

(CF)=1   

Salt daca 'sub” daca 'nu peste sau egal” daca “exista transport'

JBE | JNA

(CF)sau(ZF)=1

Salt daca 'sub sau egal daca 'nu peste'

JE | JZ

(ZF)=1   

Salt daca 'egal' daca ' zero'

JG | JNLE

((SF)A(OF))sau(ZF)=0

Salt daca 'mai mare' daca 'nu mai mic sau egal'

JGE | JNL

(SF)A(OF)=0

Salt daca 'mai mare sau egal ' daca 'nu mai mic'

JL | JNGE

(SF)A(OF)=1

Salt daca 'mai mic' daca 'nu mai mare sau egal'

JLE | JNG

((SF)A(OF))sau(ZF)=1

Salt daca 'mai mic sau egal ' daca 'nu mai mare '

JNE | JNZ

(ZF)=0   

Salt daca 'ne-egal' daca 'non-zero'

JNO   

(OF)=0   

Salt daca 'nu exista depasire'

JNP | JPO

(PF)=0   

Salt daca ' non- paritate' daca 'impar'

JNS   

(SF)=0   

Salt daca 'non-semn' daca 'pozitiv'

JO

(OF)=1   

Salt daca 'exista depasire'

JP | JPE

(PF)=1   

Salt daca 'exista paritate' daca 'par'

JS

(SF)=1   

Salt daca 'exist semn'

NOTA: - conditiile care se traduc cu 'mai mare' sau 'mai mic' se refera la operatii asupra unor numere cu semn;

- exprimarile 'sub' sau 'peste' se aplica operatiilor asupra unor numere fara semn.

3. Indicatii importante cu privire la operatiile aritmetice

Microprocesorul este un automat care executa anumite operatii predefinite. Acesta nu poate sa cunoasca semnificatia operatorilor si rezultatelor; de aceea, daca programatorul nu controleaza foarte strict aceste semnificatii, este foarte probabil ca rezultatele obtinute sa fie eronate. Din acest motiv:

- trebuie sa se cunoasca modul de reprezentare a numerelor in memorie: intregi cu sau fara semn, ZCB impachetat, ASCII, cu virgula fixa (pen­tru reprezentarea numerelor fractionare);

- trebuie sa se faca estimarea marimii rezultatelor si operatorilor, pentru a se putea alege lungimea locatiilor de memorie necesara pentru stocarea lor;

- trebuie sa se cunoasca foarte bine modul de afectare a fanioanelor in urma unei operatii, deoarece salturile conditionate se fac relativ la acestea si, in plus, fanioanele ne pot da indicatii asupra corectitudinii executiei.

4. Modul de lucru recomandat

Lucrarea de laborator a fost structurata in doua parti. In prima parte sunt date doua programe care nu au un scop anume, fiind alcatuite dintr-o insiruire de instructiuni, grupate dupa anumite criterii, care ilustreaza tipul de operatii de interes. Primul program se ocupa de instructiunile aritmetice si logice, iar al doilea, de salturile conditionate si neconditionate.

Cand se editeaza acest program, se vor ignora comentariile. Acestea vor trebui urmarite cand se va face rularea pas cu pas a programelor, deoarece explica semnificatia fiecarei instructiuni. De asemenea, se indica ce registre si ce zone de memorie se modifica.

A doua parte a lucrarii contine doua aplicatii propriu-zise care isi propun sa ilustreze rezolvarea unor probleme reale. Aici se va acorda atentie atat algoritmului cat si sintaxei instructiunilor.

5. Desfasurarea lucrarii

5.1. Se lanseaza turbo-asamblorul TASMB si se editeaza textul programului 1, fara comentarii.

5.2. Se salveaza programul sursa pe disc, cu un nume oarecare, apoi se activeaza O) optiunea F8 - COM FILE si se asambleaza.

5.3. Se vizualizeaza lista de simboluri S) si se noteaza adresele de memorie ale celor patru operanzi.

5.4. Se paraseste TASMB Q) si se lanseaza AFD. Se incarca L programul salvat anterior cu extensia COM si se ruleaza pas cu pas, urmarindu-se, in paralel, indicatiile date in comentarii.

5.6. Se repeta punctele 5.1.-5.4. pentru programele 2, 3 si 4.

Programul 1

Observatie: La toate instructiunile de prelucrare a datelor, trebuie sa se urmareasca cum sunt afectate fanioanele si sa se verifice aceasta confruntandu-le cu explicatiile date in memoriul de instructiuni.

org 100h

mov ax,cs

mov ds,ax

conv: mov al,opb1

mov bl,opb2

xor ah,ah ;AH=0

xor bh,bh ;BH=0

cbw ;converteste tipul operandului din AL,

;din byte in word, prin extinderea ;bitului de semn

xchg ax,bx

cbw

compl: mov ax,bx

neg bx ;complementare fata de 2

not ax ;negare logica (bit cu bit)

;operatiile NEG si NOT se efectueaza ;asupra aceleasi valori. Diferenta

;intre AX si BX ilustreaza efectul ;diferit al celor doua operatii

inc bx ;se urmaresc registrul BX si zona

dec opb2 ;de memorie de la adresa “opb2”

comp: xor cx,cx ;CF=0

cmp opw2,24h ;comparare prin scadere: opw2-24h

test opw2,20h ;comparare prin SI logic: opw2 AND 20h

cmp opw2,23h ;in general, dupa instructiunile

cmp opw2,20h ;de comparare, urmeaza un salt ;conditionat. De aceea trebuie urmarit

;modul in care sunt afectate fanioanele

;si diferenta dintre CMP si TEST

deplas: inc opb2

mov dx,opw1

mov cl,3

shl dx,1 ;deplasare logica stinga cu o pozitie

shl dx,cl ;si cu 3 pozitii

mov dl,opb1

shr dl,1 ;deplasare logica dreapta cu o pozitie

sal dl,1 ;se remarca diferenta intre deplasarile

;aritmetice si cele logice si intre

sar dl,1 ;deplasarile cu o pozitie si cele

sar dl,cl ;cu mai multe pozitii folosind CL

rotatii: mov al,opb2

inc cl

rol al,1 ;se remarca diferenta dintre deplasari

;si rotatii

ror al,1

xor si,si ;CF=0

rcl al,1

rcr al,1 ;se remarca diferenta dintre rotatiile

rcr al,cl ;'simple' si cele prin intermediul lui ;CF

op_log: and al,00000010b;mai intii se estimeaza

or al,10000000b;rezultatele celor doua operatii

;si apoi se verifica rezultatul

adun: mov bx,opw1 ;aceasta secventa simuleaza o adunare

add bl,byte ptr opw2

;pe 16 biti din adunari pe 8 biti

adc bh,byte ptr opw2+1

mov ax,bx ;mai intii se estimeaza rezultatul

daa ;in cele doua cazuri: operatori priviti

;ca intregi cu semn, si fara semn.

;se observa ca rezultatul obtinut

;inainte de DAA, este eronat daca

;operanzii sunt considerati fara semn

;(apare o depasire), sau este corect ;daca sunt considerati cu semn.

scad: mov dx,opw1 ;secventa de instructiuni simuleaza

;o scadere pe 16 biti,

sub dl,low opw2

;din scaderi pe 8 biti.

sbb dh,high opw2

mov ax,dx ;se evalueaza rezultatele in cele doua

;cazuri specificate la adunare,

das ;apoi se verifica corectitudinea lor,

;inainte de DAS

imult: mov ax,opw1 ;se remarca diferenta dintre mul opw2 ;rezultatele obtinute in (DX)|(AX)

mov ax,opw1 ;pentru cele doua cazuri de inmultire.

imul opw2 ;pentru aceasta, rezultatul obtinut

aam ;dupa prima inmultire trebuie notat

impart: mov ax,opw1 ;se remarca diferenta dintre cele

mov dx,0 ;doua tipuri de impartire, observand

div opw2 ;diferentele intre rezultatele

mov ax,opw2 ;obtinute in AH si AL. Este bine

and dx,0 ;sa se observe necesitatea de a scrie

idiv opw1 ;0 in DX, inainte de impartire

int 20h

opw1: dw 0fffdh ;65533 valoare fara semn

;-3 valoare cu semn

opw2: dw 23h ;35 valoare cu sau fara semn

opb1: db 0feh ;254 valoare fara semn

;-2 valoare cu semn

opb2: db 23h ;35 valoare cu sau fara semn.

Programul 2

Observatii:

In programele scrise in limbaj de asamblare, datele se declara in general la sfarsit. Daca se fac declaratiile la inceput, procesorul va interpreta aceste date ca pe niste instructiuni. Efectul acestora este greu de prevazut. Pentru a evita acest lucru este necesar ca programul sa inceapa cu un salt neconditionat la prima instructiune.

In programul urmator, pentru a usura rularea pas cu pas, dupa fiecare salt conditionat se revine la instructiunea imediat urmatoare, cu ajutorul unui salt neconditionat indirect prin BX. De aceea, se poate observa in program ca, inainte de salturile conditionate, se pregateste registrul BX

org 100h

jmp start

op1: db 0feh ; valoare fara semn 253

; valoare cu semn -2

op2: db 3

start: mov ax,cs

mov ds,ax

; SALTURI CONDITIONATE

mov al,op1

lea bx,adr1

cmp al,op2 ;in functie de starea fanioanelor

;dupa CMP se estimeaza, mai intii,

ja fin ;efectul celor doua instructiuni

;JA si JG, iar apoi se verifica

adr1: jg fin

mov al,op2 ;in functie de starea fanioanelor

lea bx,adr2 ;dupa CMP se estimeaza, mai intii,

cmp al,op1 ;efectul celor doua instructiuni

jb fin ; JB si JL, iar apoi se verifica

adr2: jl fin

lea bx,adr3

cmp al,op2

jz fin

adr3: lea bx,adr4

and al,0feh

jnp fin

adr4: jp fin

jmp ies ; SALT NECONDITIONAT

fin: jmp bx ; SALT INDIRECT

ies: int 20h

end

Programul 3

Programul simuleaza o inmultire pe 16 biti din inmultiri pe 8 biti. Rezultatul, care poate avea maximum 32 de biti, se memoreaza in cuvintele de memorie 'hrez' si 'lrez'.

Algoritmul de calcul este urmatorul:

Un numar de 16 biti se poate reprezenta astfel:

XYZTh = XY 256 + ZT   

(XY este continutul octetului 'high' iar ZT este continutul octetului 'low').

Atunci:

ABCDh XYZTh=AB XY 256 + (AB ZT+XY CD) 256 + CD ZT.

Operatiile de inmultire cu puteri ale lui doi se fac prin deplasari. La sfarsitul programului se face direct inmultirea pe 16 biti a celor doi operanzi, pentru a putea verifica corectitudinea algoritmului.

org 100h

start: mov al,byte ptr op1+1

mul byte ptr [op2+1]

mov hrez,ax

mov al,byte ptr op1+1

mul byte ptr op2

mov dx,ax

mov cl,8

sal ax,cl

mov cl,8

shr dx,cl

add lrez,ax

adc hrez,0

add hrez,dx

mov al,byte ptr op2+1

mul byte ptr op1

mov dx,ax

mov cl,8

shl ax,cl

mov cl,8

shr dx,cl

add lrez,ax

adc hrez,0

add hrez,dx

mov al,byte ptr op1

mul byte ptr op2

add lrez,ax

adc hrez,0

mov ax,lrez

mov dx,hrez

mov ax,op1

mul op2

int 20h

op1: dw 300

op2: dw 200

lrez: dw ?

hrez: dw ?s

end

Programul 4

Se considera un sir de maximum 16 cuvinte care ar trebui sa fie identice intre ele si egale cu o valoare de referinta 'ref'. Algoritmul isi propune sa gaseasca toate elementele diferite si sa specifice adresa lor.

Zona de memorie de la adresa 'nrdif' va contine numerele din sir diferite de referinta, iar 'poz' adresele acestor numere.

org 100h

mov ax,cs

mov ds,ax

lea di,sir

cld

mov bx,0ffffh

mov ax,ref

mov cx,(nrdif-sir)/2

et1: repz scasw

jz fin

inc bx

mov dx,[di-2]

shl bx,1

mov [nrdif+bx],dx

mov dx,di

sub dx,2

mov [poz+bx],dx

shr bx,1

jmp et1

fin: inc bx

int 20h

sir    dw 1,1,2,3,1,1,1,1,4,1,5,1,1,1,4,1

nrdif dw 16 dup (0ffffh)

poz    dw 16 dup (0ffffh)

ref    equ 1

end



loading...







Politica de confidentialitate

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 482
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2020 . All rights reserved

Distribuie URL

Adauga cod HTML in site