Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » scoala » informatica » calculatoare
Instructiuni logice de salt conditionat si neconditionat, de deplasare si rotatie

Instructiuni logice de salt conditionat si neconditionat, de deplasare si rotatie


Instructiuni logice de salt conditionat si neconditionat, de deplasare si rotatie.

Lucrarea de laborator a fost structurata in doua parti. In prima parte sunt prezentate etapele de scriere si de executie a unui program editat in asamblor iar in a doua parte sunt prezentate instructiunile logice, de salt conditionat si neconditionat, de deplasare si rotatie.

La sfarsitul acestei lucrari, studentii vor avea notiuni de realizare a unor bucle conditionate sau nu de bitii registrului de fanione (F) cat si de realizare a unor operatii logice si de deplasare. programare in asamblor.

Studentii trebuie sa cunoasca pentru efectuarea acestui laborator:

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

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



- 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.

1. Etapele de scriere si prelucrarea ale unui program

1.1.Programele de asamblarea

Programele scrise in asamblor se compun din: mnemonici - instructiuni, directive care descriu datele si pentru controlul programului, functii DOS utilizate in intreruperi si macroinstructiuni.

Programele executabile .exe ajung in aceasta faza in urma compilarii unui program asamblor (in cazul acesta). Programul executabil este transformat in program binar pentru a putea fi implementat pe microprocesor.

Figura C4.1. Reprezentarea etapelor de transformare a unui fisier scris in asamblor in fisier binar

Asamblorul prelucreaza un fisier text sursa (Prog.asm), scris cu un editor de texte si genereaza un modul obiect (Prog.obj) care contine instructiuni si date ce sunt plasate de la adresa 000. Dupa etapa de asamblare se genereaza si un fisier lista care contine comentarii asupra programului. Utilizand directiva include se copiaza in programul curent si alte programe eventual librarii la care se face referire. Modulele obiect nu sunt executabile dar pot fi depuse in biblioteci (Bibl.lib).

Editorul de legaturi (LINK) transforma modulele obiect, obtinute prin compilare in biblioteci. Dupa acesta etepa se obtin programe de tip .exe. In aceasta etapa se face legatura antre adresele modulelor si adresele relative dintre instructiuni. Adresele din instructiuni se recalculeaza relativ la inceputul segmentului tinand cont de adresa modulului in segment. Un program poate contine mai multe segmente. Adresele simbolice definite in alt modul trebuie scrise ca EXTERN iar cele care sun referite din exterior declarate cu PUBLIC. Asamblorul va genera cate un tabel cu etichetele referite in exterior (EXTRN) si unul cu etichetele care pot fi referite din exterior (PUBLIC), in care se specifica adresa lor din modul. In fisierul Prog.map se gasesc noile adrese ale modulelor si ale etichetelor definite ca externe.

Programul executabil (Prog.exe) poate fi lansat ca o comanda DOS, care prelucreaza datele si se obtin rezultatele. Prin programul BIN se poate obtine o varianta a programului asamblor in Prog.com.

1.2.Directive de control program

Proceduri

O procedura este o secventa de instructiuni care executa un algoritm pe baza unei descrieri formale. Avantajul procedurilor este ca ele sunt reutilizabile. In limbaj de asamblare exista proceduri (nu exista functii), definite cu directiva PROC si terminate cu ENDP. Revenirea din procedura in programul chemator se face cu instructiunea RET.

Forma generala:

nume_proc PROC near sau far ; inceput de procedura

RET [n] ;iesre din procedura cu eliberare stiva

nume_proc ENDP ; sfarsit de procedura

END start ; directiva de sfarsit de asamblare care da adresa de lansare progra

Atentie END se pune dupa ultimul modul din program.

Declararea unei variabile ca externa

Forma generala:

PUBLIC var1,var2,.. ; declarare variabile ca definitii externe

EXTRN simbol1:type1, simbol2:type2,.. ; declarare referinte externe spre alte module

unde type este  de tip octet, cuvant, cuvant dublu, specificand lungimea

Tipul permite asamblorului sa genereze instructiuni pe lungimi corecte. Mentionam ca in limbaj de asamblare nu exista tipuri intregi, reale, logice, caracter ca in alte limbaje.

near si far pentru etichete apelate prin Jump sau Call

Eticheta LABEL far sau near ; definire explicita etichete locale (near) sau externe (far), care se pot apela din exterior.

Etichetele locale - near se pot specifica urmate de doua puncte(:)

Definire segmente

Forma generala:

nume_seg SEGMENT [align],[combinare],['clasa']

nume_seg ENDS

align - page - segmentul incepe la multiplu de 256

- para - multiplu de 16 (paragraf)

- word - multiplu de 2

- byte - multiplu de 1

Combinarea cu alte segmente:

- none -implicit

- public

- common - segmente care se incarca in paralel in aceeasi zona de memorie

- memory -segmente tratate impreuna de editor si plasate la sfarsitul memoriei

- AT adresa - specifica adresa la care se incarca segmentul

- stack - segment definit ca stiva si tratat ca public ( bazat cu SS)

ASSUME CS:seg1,DS:seg2,ES:seg3,SS:seg4 precizeaza registrele segment utilizate la adresarea datelor din fiecare segment.

2. Operatii logice

Instructiunea NOT este o instructiune prin care se complementeaza bitii unui operand scris in binar.

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.

Exmple pentru instructiunea NOT

Operanzi

Exemple

Descrierea formala a semanticii

R

NOT AX

(AX) FFFFH - (AX)

mem

NOT  [0EEFFH]

((DS)0H +EEFFH) FFH -

- ((DS)0H+EEFFH)

Instructiunea AND - realizeaza SI intre doi operanzi scrisi in binar, memorati in registre sau memorie sau intre o constanta si un operand.

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)

Exemplu:

AND

- D1 24

1

Rez1

1 07 66

Rez>0

- F0 AA

Rez<0

Masca

C=1

S=1

C=1

Rez # 0

nu depasire

Depasire

transfer spre S

si nu

depasire

Instructiunea TEST - compara doi operanzi utilizand operatia logica SI.

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: (s1) & (s2) .

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))

Instructiunea OR (SAU) - realizeaza operatia logica SAU intre doi operanzi

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)

Exemplu:

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)

Instructiunea XOR (SAU EXCLUSIV) - realizeaza operatia logica XOR intre doi operanzi.

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)

3. Deplasari si rotatii

Instructiuni de deplasare spre dreapta (SAL, SHL) aritmetice sau logice. Numarul de biti cu care se realizeaza deplasarea este scis in nrce.

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 0 do

(CF) (s)msb

(s) (s) * 2

(s)lsb 0

nrcel nrcel - 1

if nrcel = 1 then

if (s)msb (CF) then

(OF) 1

else (OF) 0

else (OF) nedeterminat .

Instructiunea SHR de deplasare spre stanga logica sau aritmetica cu un numar de biti indicat de nrcel.

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 0 do

(s)msb 0

(s) (s) div 2

(CF) (s)lsb

nrcel nrcel - 1

if nrcel = 1 then

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

(OF) 1

else (OF) 0

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 daca nrcel 1).

Instructiunea ROL de rotire a unui operand spre stanga. Numarul de rotatii este indicat in 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 0 do

(s) (s) * 2

(CF) (s)msb

(s)lsb (s)msb

nrcel nrcel - 1

if nrcel = 1 then

if (s)msb (CF) then

(OF) 1

else (OF) 0

else (OF) nedeterminat .

Instructiunea ROR de rotire a unui operand spre dreapta. Numarul de rotatii este indicat in nrcel.

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 0 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) 1

else (OF) 0

else (OF) nedeterminat .

Instructiunea RCL de rotatie stanga cu transport. Numarul de rotatii este indicat in nrcel.

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

Instructiunea RCL de rotatie dreapta cu transport. Numarul de rotatii este indicat in nrcel.

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

4. Salturi propriu-zise neconditionate

Instructiunea JMP - este o instructiune de salt neconditionat, saltul consta in memorarea adresei de destinatie a saltului in reg. IP (Instruction Pointer).

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)

Far Jmp - salt in afara segmentului curent si trebuie modificat IP si reg. CS. Deplasamentul este reprezentat pe 4 octeti.

b) Salt cu adresare relativa:

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

Deplasamentul face parte din formatul instructiunii curente.

Short Jmp - salt scurt cu +127 pana la -127 fata de IP (instructiunea curenta). Deplasament este reprezentata pe 1 octet.

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

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

Near Jmp - salt in segmentul curent cu -32K pana la +32K fata de IP. Deplasament este reprezentat pe 2 octeti.

d) Salt cu adresare indirecta in memorie, intersegment:

JMP mem32 ; (CS) (mem32)h

(IP) (mem32)l

Saltul de tip far (indepartat) se face intre segmente si se modifica atat IP cat si registrul de segment CS in care se salveaza adresa segmentului care contine eticheta destinatie.

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

Instructiunile de salt sunt de tip SHORT (+127 la -127) sau NEAR (pentru procesoarele pe 32 de biti). In acest caz etichetele pot referi adrese in segmentul curent. Ele nu pot referi etichete din alt segment.

Forma generala a instructiunii este:

Jcond eticheta

Daca conditia este indeplinita atunci se incarca in registrul IP valoarea adresei unde se va realiza saltul.

Instructiunile aritmetice si logice pozitioneaza indicatorii de conditie functie de valoarea rezultatului. In instructiunile de salt conditionat pot testa indicatorii de fanioane, ca deexemplu:

Rez < 0 S=1

Rez >0 S=0 si Z=0

Rez=0 Z=1

Transport C=1

Paritate para P=1 - numarul bitilor de 1 este par

Depasire O=1

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.

5. Modul de lucru recomandat

Programele prezentate in acest laborator, vor fi copiate in simulatorul Emu8086 si executate pas cu pas, urmarindu-se modificarile realizate in memorie si registre dupa executia fiecarei instructiuni. La instructiunile de salt se va urmari continutul registrului IP respectiv al registrulului CS, determinand tipul de salt.

Programul 1

Utilizarea instructiunilor logice si de salt conditionat.

Daca programul contine numai cate un segment de fiecare tip se poate simplifica scrirea specificand unde incepe segmentulde code .CODEde date DATA si stiva .STACK. Rezervarea spatiului pentru stiva se face pe lungimea data si automat se incarca reg.SS.

Modulul de date se numeste implicit @DATA referit pentru incarcare registru segment DS. Daca se scriu programe complexe cu multe segmente de diferite tipuri trebuie sa se utilizeze segmentarea explicita prin definire segmente cu nume cu directiva SEGMENT.

; .model small ; model pe cu segmente de 64Ko

.stack 256 ; rezervare 256 octeti pentru stiva

; Segmentul de date

.data

A dw 2345h,0EADEh,0EFEEh

NA db 3 dup(0) ; nr biti elemente tab A

N equ 3 ; numar elemente tablou A

; Segmentul de code al programului

; -------- ----- ------ ----

.code

st1: mov ax,@data ; initializare registrul segment de date DS

mov ds,ax ;

mov si,0 ; index in tabloul A

mov di,0 ; index in tabloul NA

mov dh,N ; nr. elemente tablou

; Ciclu pentru numarare biti element A(I)

c1: mov ax,A[si] ; incarcare element A(I)

mov bx,A[SI]; incarcare element A[I] in reg BX

and bh,bl

or bh,bl

xor bh,bh

rol bh,3

mov cx,16 ; numar ranguri binare

c2: shl ax,1 ; deplasare stinga cu un rang

jnc c3 ; bitul este zero

inc NA[di] ; bitul este 1

c3: loop c2 ; urmatorul rang

add si,2 ; adresa urmatorului element din A(I)

inc di

dec dh ; verificare sfirsit tablou X

mov ax,A[si] ; incarcare element A(I)

jnz c1

int 3 ; terminare program

end st1 ; adresa lansare program

Utilizarea salturilor interegment si intrasegment sunt exemplificate in programul urmator

Program 2

Fie un numar zecimal ASCII introdus de la tastatura. Sa se realizeze conversia binara pe doi octeti.

.model small

.stack 100

.data

z1 db 10,0,10 dup (30h),10,13,'$' ; nr zecimal

zece dw 10

n db 0 ; numar cifre zecimale

dw 17394 ; pentru verificare rezultat

bin dw 0 ; numar binar rezultat

m1 db 13,10,'Introduceti un numar de 5 cifre:',13,10,'$'

.code

st1: mov ax,@data

mov ds,ax

mov dx,offset m1 ; afisare mesaj dialog

mov ah,9

int 21h

mov dx,offset z1 ; adresa numar zecimal

mov ah,10 ; asteptare numar

int 21h

mov bx,offset z1+2 ; adresa prima cifra

mov cx,0

mov cl,z1+1 ; numar de cifre numar zecimal

call czb ; procedura conversie zec-bin

mov bin,ax ; memorare numar binar

int 3

; Procedura conversie zecimal ASCII -binar 2 octeti

; - intrare BX = adresa numar zecimal, CX = numar cifre zecimale

; - iesire AX = numar binar

; -------- ----- ------ --------

czb proc

xor ax,ax ; AX = 0

mov si,ax ; index prima cifra

mov n,cl ; numar cifre zecimale

c3: mov cl,[bx+si] ; incarcare cifra ASCII

and cl,0fh ; anulare primii 4 biti

mul zece ; N = N*10

add ax,cx ; N = N*10 + cifra

inc si ; urmatoarea cifra

dec n

jnz c3

ret

czb endp

end st1

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 = XY256 + ZT 

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

Atunci:

ABCDhXYZTh=ABXY256256 + (ABZT+XYCD)256 + CDZT.

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

Realizati organigrama dupa care a fost construit programul.

Program 4

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

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

op1 db 0feh ; valoare fara semn 253 valoare cu semn -2

op2 db 3

end

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.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.