Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

CATEGORII DOCUMENTE





AccessAdobe photoshopAlgoritmiAutocadBaze de dateC
C sharpCalculatoareCorel drawDot netExcelFox pro
FrontpageHardwareHtmlInternetJavaLinux
MatlabMs dosPascalPhpPower pointRetele calculatoare
SqlTutorialsWebdesignWindowsWordXml

Instructiuni de transfer intre registre

calculatoare

+ Font mai mare | - Font mai mic







DOCUMENTE SIMILARE

Trimite pe Messenger
ScanAIR 2000-Air Quality Software Manager - Dinamica
Baze de date
Tehnici de planificare
MINIPROIECT LA MODULUL STRUCTURA SISTEMELOR DE CALCUL TEMA MINIPROIECTULUI: PORTURILE SISTEMELOR DE CALCUL
Cum functioneaza FrontPage
Sisteme de asistenta psihologica computerizata
Serviciul IRC (INTERNET Relay Chat)
De la XML la HTML
Interfete/cititoare pentru transmisia de date fara contact
Terminologie folosita in informatica. Prezentare generala

Instructiuni de transfer intre registre

            1 Elemente ale limbajului de asamblare

            Programul sursa este format dintr-un numar de linii, care pot fi:



  • Directive de asamblare
  • Etichete si declaratii de simboluri
  • Comentarii
  • Linii de instructiuni

            O linie de instructiune a programului sursa are urmatoarea structura:

_Mnemonic__Operand1{,_Operand2}_

unde:

  • Parantezele acolade indica un camp optional;
  • Semnul _ indica un separator, care poate fi format din spatii sau tab-uri; Intre Operand1 si Operand2, separatorul este de regula o virgula;
  • Eticheta este un grup de caractere care incepe cu o litera si nu coincide cu un cuvant rezervat. Ea trebuie urmata de semnul “:” atunci cand se afla la inceputul liniei. Cand este referita ca operand (de exemplu la o instructiune de salt), ea nu mai este urmata de acest semn. Exemple: Eticheta1, Loop15, Salt, Label, L22, etc.
  • Mnemonicul este o prescurtare a descrierii instructiunii si este conform cu setul de instructiuni al procesorului;
  • Operandul poate fi un nume de registru, o constanta numerica (date sau adrese), sau o eticheta, conform descrierii instructiunii respective;
  • Prefixele dau precizari suplimentare despre operanzi, conform descrierii instructiunii respective;
  • Comentariul este optional si trebuie precedat de semnul “;” . Tot ceea ce urmeaza pe o linie dupa acest semn este ignorat de asmblor.

      Toate programele care urmeaza a fi asamblate cu macroasamblorul TASM vor avea o parte de preambul minimala, de forma:

  .model small

  .stack 100h

  .code

start:

      --------------

      Primele trei liniii sunt directive de asamblare, care declara cantitatea de memorie folosita, pozitia stivei, si inceputul segmentului de cod. A patra linie este eticheta de intrare in program acesta incheindu-se cu declaratia END eticheta_de_intrare.

      Finalizarea se poate face cu o linie de bucla infinita si cu directiva end, de forma:

Bucla: jmp bucla

     End start

      Varianta normala de finalizare foloseste intreruperea 21h si se va prezenta ulterior.

           

            2 Notatia hexazecimala:

           

            In continuare se vor folosi urmatoarele notatii pentru date (valori imediate, precizate in instructiune):

            -de 8 biti   -   n:0..0FFh; notatie echivalenta: imm8;

            -de 16 biti - nn:0..0FFFFh;notatie echivalenta: imm16;

            -de 32 biti - nnnn:0..0FFFFFFFFh;notatie echivalenta: imm32;           

            Pentru reprezentarea comoda a datelor, cuvintele in cod binar se impart in mai multe grupuri de cate 4 biti si se asociaza fiecarui astfel de grup un simbol (cele 10 cifre din sistemul zecimal plus primele 6 litere ale alfabetului), rezultand asa-numita reprezentare hexazecimala. Cu 4 biti se pot realiza 24=16 combinatii, conform tabelului 1.

            De exemplu, numarul binar:

            1001010011001010

se va scrie:

            1001.0100.1100.1010

adica 94CA in hexazecimal. Pentru a se evidentia octetii, se mai foloseste si scrierea echivalenta 94.CA, unde 94 este octetul mai semnificativ iar CA octetul mai putin semnificativ.

            In felul acesta se folosesc de pana la 4 ori mai putine cifre pentru reprezentarea datelor.             Un numar binar de 8 biti (octet) se poate scrie cu 2 cifre hexazecimale, un numar de 16 biti (word) cu 4 cifre hexazecimale, etc.

            Pentru a preciza ca un numar este reprezentat in hexazecimal (exista astfel de numere care nu contin deloc litere) se foloseste sufixul h atasat in dreapta. De exemplu numarul anterior se va scrie ca 94CAh.

            Majoritatea asmbloarelor nu fac diferente intre litere mari si litere mici, deci se pot folosi si notatii de genul: 94CAh , 94cAH sau 94caH.

Zecimal

Binar

Hexazecimal

0

0000

0

1

0001

1

2

0010

2

3

0011

3

4

0100

4

5

0101

5

6

0110

6

7

0111

7

8

1000

8

9

1001

9



10

1010

A

11

1011

B

12

1100

C

13

1101

D

14

1110

E

15

1111

F

            Tabelul 1 - Reprezentarea hexazecimala

           

            Mediul de asamblare considera implicit constantele ca fiind zecimale. Constantele hexazecimale trebuie sa fie urmate de sufixul H, iar cele binare de sufixul B (se pot folosi litere mari sau litere mici).

            Daca se intentioneaza ca toate numerele din program sa fie implicit hexazecimale se poate introduce directiva .Radix 16, de regula inaintea directivei .Stack. Toate numerele folosite folosite in continuare sunt implicit hexazecimale. Pentru specificarea numerelor zecimale se va folosi sufixul D.

            Deoarece numerele hexazecimale cuprind si litere, ele ar putea fi confundate cu alte simboluri literale (etichete) folosite in program. De exemplu, numarul hexazecimal ADCEH (in binar 1010.1101.1100.1110) ar putea fi o eticheta, o variabila sau o constanta. Pentru a preciza ca este vorba de un numar, daca numarul incepe cu o litera se pune in stanga sa cifra 0. De exemplu, numarul anterior se va scrie 0ADCEh, numarul 1011.1000.1001.0001 se va scrie 0B891h, etc.

            Daca numarul de biti ai cuvantului binar nu este un multiplu de 4, el se va completa in stanga cu 0 pana devine multiplu de 4 si apoi se face delimitarea cifrelor hexazecimale. De exemplu numarul binar:

            1011011001 se va scrie 0010.1101.1001= 2D9h sau 02D9h

Numerele folosite de diversi algoritmi pot fi cu semn sau fara semn. Anumite instructiuni aritmetice se comporta diferit pentru cele doua categorii de numere, asa cum se va arata mai tarziu. Pentru numerele cu semn se foloseste urmatoarea conventie: primul bit din stanga al numarului (cel mai semnificativ) este bitul de semn. El are valoarea 0 daca numarul este pozitiv si 1 daca este negativ.

            3 Registrele    procesoarelor Intel x86

            Microprocesorul conventional din seria Intel x86 are urmatoarele registre pentru lucrul curent:

   

Registrul de 16 biti

      Registrele de 8 biti

     Utilizare preferentiala  

           AX            AH                   AL               Dedicat inmultirilor si impartirilor,                                                                                  etc.

           BX            BH                   BL               Adresare (baza segmentului de date)

           CX            CH                   CL               Contorizare

           DX            DH                   DL               Utilizat in inmultiri si impartiri

           DS                                                        Adresa segmentului de date

           CS                                                        Adresa segmentului de cod

   

           SS                                                         Adresa segmentului de stiva

           ES                                                         Adresa extrasegment (transfer de                                                                                  siruri)

 

           SI                                                          Adresa sursei in transferuri de siruri

           DI                                                         Adresa destinatiei in transferuri de                                                                                 siruri

 

           BP                                                        Adresare (baza segmentului de stiva)

           SP                                                         Indicator de stiva

           IP                                                          Numarator de program




           F                                                           Registrul de flaguri (indicatori de                                                                                    conditii)

            Registrele au fiecare cate 16 biti, cele generale putand fi impartite in cate doua registre de 8 biti: cel care retine octetul inferior, notat cu sufixul L si cel care retine octetul superior, notat cu sufixul H.

            Microprocesoarele de diverse tipuri au mai multe registre, cu mai mult de 16 biti (cele din seriile I-386, I-486 si Pentium ). Registrele de mai sus au de fapt la aceste procesoare un numar de 32 de biti, dar pot fi folosite ca registre de 16 biti cu notatiile de mai sus. In cazul in care se doreste folosirea lor ca registre de 32 de biti, denumirea lor va fi precedata de litera E (de la 'extended'), iar in preambulul programului va trebui pusa directiva .386, pentru a preciza ca este folosit un procesor de la I-386 in sus.

            Notatiile folosite pentru registre in cele ce urmeaza sunt:

            -de 8 biti -   r8:    AL,AH,BL,BH,CL,CH,DL,DH;

            -de 16 biti - r16:    AX,BX,CX,DX,SI,DI,BP,IP,F;

            -de 32 biti - r32:    EAX,EBX,ECX,EDX,ESI,EDI,EBP,EIP,EF;

            -registre de segment -rs: DS,ES,SS,CS.La procesoare de la I-386 in sus mai exista doua registre suplimentare de segment, FS si GS.

            4. Instructiuni de transfer intre registre

            Mnemonic general: MOV dest,src

            Actiune: ‘dst’ ia valoarea ‘scr’

                            dst src

            Operanzi: dst: r8,r16,r32,rs

                            src:r8,r16,r32,rs,n,nn,nnnn

           

            Restrictii: nu sunt posibile transferuri de tip:

                -MOV rs,rs      (nu sunt posibile transferuri intre registre de segment)

                -MOV rs,nn     (nu se poate scrie o constanta direct intr-un registru de segment)

                -MOV cs,*     (nu se poate transfera nimic in registrul de segment de cod)

            Exemplul  1:

            MOV AX, 33H   ;Incarca in AX constanta hexa 0033H

     MOV DX, 1122H ;Incarca in DX constanta hexa 1122H

     MOV CL, AL    ;Incarca in CL continutul lui AL

     MOV BL, DH    ;Incarca in BL continutul lui DH

     MOV AH, DL    ;Incarca in AH continutul lui DL

           

            Mod  de lucru :

            Toate constantele numerice specificate mai jos sunt hexazecimale, deci  in programul sursa vor fi urmate de sufixul h.

            Rularea programelor se va face cu TD in modul pas cu pas (cu tasta F7) si dupa fiecare instructiune se va urmari in fereastra de afisare a registrelor modificarea continutului acestora.

            Se vor scrie si testa urmatoarele programe:

            P 1.  Program de scriere in registrele AL, BL, CL si DL a constantelor  99,AA, BB, respectiv CC.

            P  Se va completa programul anterior pentru a transfera continutul registrului AL in registrele BL, BH, CL, si DH.

P 3. Program de scriere in registrele AX, BX, CX si DX a constantelor 1122, 3344, 5566, respectiv 7788.

P 4. Se va completa programul anterior pentru a transfera continutul registrului registrului BX in registrul DX, si al registrului CX in AX.

            P 5. Program care sa transfere constanta 1234 in registrul DS si constanta 5678 in registrul DX.

            P 6. Sa se scrie in registrele AL si BL,  constantele  99 si AA si se va face apoi interschimbarea continutului acestora.

           

            5. Instructiuni de interschimbare intre registre

           

            Mnemonic general:

            XCHG dst,src

            Actiune:  Se interschimba continuturile registrelor dest si src.

                        dst src

                        src dst

            Operanzi: dst,src:r8,r16,r32

            Restrictii:Nu exista instructiuni de tip:

                        -XCHG rs,rs

                        -XCHG cs,*

            Mod de lucru :

            P 7. Se vor incarca urmatoarele registre astfel:

            AL cu 11

            BL cu 22

            CX cu 3344

            DX cu 5566

dupa care se va interschimba continutul celor de 8 biti si continutul celor de 16 biti.

            P 8. Se vor incarca registrele AL, AH, BL si BH constantele AA,BB,CC si DD si apoi se va efectua permutarea circulara a continutului  celor 4 registre. Se vor folosi instructiuni de tip XCHG, si dupa terminarea rularii programului registrele vor trebui sa aiba valorile: AL=BBh, AH=CCh, BL=DDh si BH=AAh

            6. Instructiuni de adunare si scadere

           

            Mnemonice  generale:

            -ADD dst,src  - Adunare : dst=dst+src;

            -ADC dst,src -  Adunare cu transport (CF): dst=dst+src+CF

            -SUB  dst,src -  Scadere:    dst=dst – src;

            -SBB dst,src  -  Scadere cu transport (“carry) sau imprumut (“borrow”): dst=dst-src-CF;

In toate operatiile aritmetice,  se foloseste implicit conventia complementului fata de  Astfel, numerele pozitive au bitul cel mai semnificativ (MSB) 0, iar cele negative au MSB 1. Numerele negative vor avea valoarea diferentei intre valoarea lor absoluta si 28n , unde n este numarul de octeti  folositi.

Exemple:

  • 25h=0010.0101 este un numar pozitiv, avand echivalentul zecimal 37;
  • 0B3Ch= 0000.1011.0011.1100 este un numar pozitiv, cu echivalent zecimal 2876;
  • 0A7h=1010.0111 este un numar negativ (daca este considerat de un octet), cu valoare absoluta 167 si valoare in complement fata de 2 care se calculeaza conform formulei 167-28 = -89;
  • 0CEACh = 1100.1110.1010.1100  este un numar negativ de doi octeti, cu valoare absoluta 52908 si valoare in complement fata de 2 care se calculeaza conform formulei 52908-216 = -12628;

Se observa ca un eventual 0 in fata numarului scris in format hexazecimal nu inseamna ca acesta are semn pozitiv. Conteaza numai primul bit al octetului cel mai semnificativ.

Aceste transformari se pot face cu utilitarul Calculator din Windows, avand optiunea View - > Scientific.

            Mod de lucru:

P 9. Se vor incarca registrele cu constantele: AX=1122, BX=3344, CX=5566, DX=7788

si se va efectua urmatoarea succesiune de operatii:

AL+66

AL+BL

AL-CL

AL-22

AL+BL+CL+DL

P 10. Se vor incarca registrele cu constantele: AX=1122, BX=3344, CX=5566, DX=7788

si se va efectua urmatoarea succesiune de operatii:

AX+6666

AX+BX

AX-CX

AX-22

AX+BX+CX+DX

                       

P 11 Se vor incarca doua numere de 32 de biti in registre in felul urmator:

- primul numar 11223344 in AX (octetii superiori) si BX (octetii inferiori)

- al doilea numar 55667788 in CX (octetii superiori) si DX (octetii inferiori) In continuare se va efectua adunarea celor doua numere. Rezultatul trebuie sa fie 6688AACC

P 12 Acelasi program ca la 11, numerele fiind 55667788 si 99AABBCC. Rezulatul trebuie sa fie EF113354.

P 13 Acelasi program ca la 11 dar, numerele fiind 55667788 si 11223344, se va efectua scaderea lor. Rezultatul trebuie sa fie 44444444.

P 14 Acelasi program ca la 13, numerele fiind 22334455 si 66778899. Rezultatul trebuie sa fie BBBBBBBC.








Politica de confidentialitate

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 658
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 2019 . All rights reserved

Distribuie URL

Adauga cod HTML in site