Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Interfatarea modulelor de program scrise in limbaj de asamblare cu module scrise in limbaje de nivel inalt (C/Pascal)
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 
Conditii necesare pentru interfatarea mai multor module scrise in limbajede programare diferite:1. Simbolurile comune (care sunt folosite in mai multe module) trebuie declarate

- publice la definire;- externe la referire;

A. Variabile: a. PUBLIC ASM : Directiva PUBLIC var; C : Variabilele statice sunt publice; PASCAL : Variabilele exterioare si constantele de pe nivelul exterior sunt implicit de tip PUBLIC.

b. EXTERN ASM : Directiva EXTRN var1 : tip, tip = BYTE, WORD, DWORD, QWORD, TWORD. C : extern int i ; PASCAL : nu este posibila folosirea variabilelor externe.

B. Functii a. PUBLIC ASM : Directiva PUBLIC procedura ; C : Functiile sunt implicit publice ; PASCAL : Functiile si procedurile de pe nivelele exterioaresunt implicit publice.

b. EXTERN ASM : Directiva EXTRN procedura aNEAR|FARi ; C : implicit externe (functiile de tip static nu mai sunt externe si se declara cu external tip | void functie) PASCAL : se declara cu external: function f() : int; external ; procedure p(); external ;

2. Modificarea numelor simbolurilor la compilare

ASM: la asamblare literele mici trec in litere mari. Optiunea /m Ax/lSasigura o asamblare de tip 'case sensitive'; C: compilare 'case sensitive', simbolurile primesc prefixul '_'. PASCAL: compilarea nu e 'case sensitive', deci la interfatarea ASM/PASCALnu mai trebuie folosita optiunea TASM /m. 3. Transmiterea parametrilor, returnarea rezultatului, pastrarea continutuluiregistrelor

Conform conventiilor BORLAND, valorile sau adresele (in cazul parametrilortransmisi prin referinta) argumentelor actuale se transmit subprogramelor prinintermediul stivei. Dimensiunea zonei ocupate de un parametru depinde de tipulacestuia, dar este de minimum 2 octeti.

C: Apelul functiei f(p1,p2,...,pn) are ca efect incarcarea in stiva aparametrilor pn, pn-1, ..., p1 si apoi a registrului IP (NEAR) sau IP:CS (FAR).Deci argumentele sunt introduse in stiva in ordinea inversa listei de apel.




Rezultatul se poate obtine in:

AX : 1 sau 2 octeti ; DX:AX : 4 octeti; ST(0) : pentru valori float, double si long double, este folosit registrul de 80 biti din virful stivei coprocesorului numeric. aBXi - pointeri NEAR aDS:BXi -pointeri FAR

Registrele care nu trebuie sa fie modificate sunt:

- BP, SP, SI, DI; - CS, SS, DS. Descarcarea stivei este realizata de catre functia APELANTA.

PASCAL:

Parametrii sunt depusi in stiva astfel: apelul functiei f(p1,p2,..,pn)are ca efect incarcarea in stiva a parametrilor p1, p2, ..., pn si apoi aadresei de revenire. Deci introducerea valorilor in stiva se face in ordinea incare acestea apar in lista de apel. Descarcarea stivei este realizata de catrefunctia (procedura) APELATA.

4. Structura segmentelor logice trebuie sa corespunda pentru fiecare modul.

Organizarea generala este urmatoarea: nume tip clasa, etc. C: - cod; - date initializate; - date neinitializate; - stiva. Exemplu:

Identificator Nume Tip, clasa <code> SEGMENTBYTE PUBLIC 'CODE' ASSUME CS:<code>, DS:<dseg> < ... segment de cod ...> <code> ENDS <dseg> GROUPDATA, _BSS <data> SEGMENTWORD PUBLIC 'DATA' < ... segment de date initializate ...> <data> ENDS _BSS SEGMENTWORD PUBLIC 'BSS' < ... segment de date neinitializate ...> _BSS ENDS END

Indicatorii de memorie <code>, <data> si <dseg> vor fi inlocuiti infunctie de modelul de memorie utilizat ; fisier (din tabelul de mai jos)reprezinta numele modulului care trebuie utilizat in directiva NAME si lainlocuirea identificatorilor.

Model Identificator inlocuire Pointeri Cod si Date

TINY, SMALL <code> = _TEXT Code:DW _TEXT:xxx <data> = _DATAData: DW DGROUP:xxx <dseg> = DGROUP

COMPACT <code> = _TEXT Code:DW _TEXT:xxx <data> = _DATA Data: DD DGROUP:xxx <dseg> = DGROUP

MEDIUM <code> =fisier _TEXT Code:DD:xxx <data>= _DATAData: DW DGROUP:xxx <dseg> = DGROUP

LARGE <code> =fisier _TEXT Code:DD:xxx <data> = _DATAData:DD DGROUP:xxx <dseg> = DGROUP

HUGE <code> =fisier_TEXT Code:DD:xxx <data> =fisier_DATAData: DD DGROUP:xxx <dseg> =fisier_DATA

Tabelul de mai sus indica ce tip de pointeri se vor folosi pentru date siconstante. Variabilele neinitializate sunt definite in segmentul _BSS. Asamblorul integrat Turbo-Pascal 6.0. Transfer parametri limbaj asamblare- Pascal si invers. Directivele EXTRN si PUBLIC

Format: ASM . instructiuni in limbaj de asamblare . END

Descriere:

- recunoaste practic toate comenzile asamblorului, cu exceptia unordirective neimplementate precum: PROC, EQU, STRUC, SEGMENT, MACRO. - instructiunile nu trebuie separate prin ";" decit daca se dorestescrierea lor pe aceeasi linie, fiind deci suficienta secventa CRLF. Comentariilese scriu in format PASCAL, cu "A..S" sau "(*... *)". - asamblorul integrat introduce notiunea de 'eticheta locala'. Aceastaincepe cu caracterul "@" urmat de litere, cifre sau semnul "-". Etichetelelocale sunt vizibile numai in blocul ASM si nu trebuie definite in sectiuneaLABEL. Etichetele definite in LABEL si utilizate intr-un bloc ASM sunt globalesi pot fi accesate si din exteriorul blocului (de exemplu dintr-un alt blocASM). - intr-un bloc ASM accesul la variabilele locale sau globale ca si laparametrii unei proceduri sau functii trebuie sa tina seama de reprezentareainterna (byte, char octet , word, integer (2 oct.,), longint (2 octeti),string(pe primul octet avind lungimea sirului, iar in continuare codurile ASCIIale caracterelor sirului), pointer - variabile pe doua cuvinte (segment +deplasament), ARRAY - elementele unui tablou memorate secvential in memorie. - variabilele globale sunt alocate in segmentul de date (cele definite insectiunea VAR), iar cele locale (blocului ASM) in segmentul de cod. Decivariabilele globale sunt adresate cu registrul DS, iar cele locale cu registrulCS. Accesul la parametrii trimisi unei proceduri ce contine un bloc ASM se facetot prin stiva (deci registrul SS combinat cu BP). Aceste adresari se facautomat functie de natura variabilei care apare intr-o linie de instructiune. - in timp ce instructiunile PASCAL trateaza la fel parametrii valoare sicei variabili, in blocul ASM sunt accesati diferit, adica ultimii prininstructiuni de forma LDS, LES (instructiuni de incarcare a variabilelor tippointer). - in ceea ce priveste accesul la valoarea unei functii, compilatorulgenereaza automat o variabila locala numita @RESULT. Intr-un bloc ASMprogramatorul are acces la 2 variabile predefinite: @CODE si @DATA, ce pot fiutilizate in context cu SEG. - prefixul de segment este: SEGCS, SEGDS, SEGSS, SEGES (insa pot fifolosite si prefixele clasice). Toti registrii procesorului pot fi folositi.Asamblorul integrat NU permite definirea variabilelor in segmentul de date.Utilizind directivele DB,DW, DD pot defini date in segmentul de cod. Datele vorfi precedate de o eticheta locala, adresa lor putind fi obtinuta cu directivaOFFSET. In prealabil se va face insa:

PUSH CS POP DS pentru initializarea corespunzatoare a segmentului de date. - definirea datelor in segmentul de cod are sens cind (dintr-un motivoarecare) nu pot accesa (sau n-am interes) datele globale prin intermediul DS.Oricum datele definite in sectiunea VAR sau CONST a unui program PASCAL suntaccesibile intr-un bloc ASM fara nici o problema (numai prin numele lor). - asamblorul integrat permite scrierea de proceduri si functii inintregime in limbaj de asamblare (deci fara perechea begin-end). In acest cazantetul procedurii sau functiei trebuie sa contina cuvintul cheie ASSEMBLER.

Directivele EXTRN si PUBLIC

1. PUBLIC - specifica simboluri definite in modulul curent si care pot fiutilizate si din alte module ;

Format: PUBLIC simbol1, simbol2...

2. EXTRN - specifica simboluri definite in alte module (unde sunt declarate de tip PUBLIC) dar care pot fi utilizate in modulul curent;

Format: EXTRN simbol:tip

unde: simbol este numele simbolului definit extern tip poate fi: BYTE, WORD, DWORD, nume structura sau inregistrare dacasimbol este o variabila, respectiv NEAR, FAR daca simbol este o eticheta

TRANSFER PARAMETRI

A. PASCAL -> limbaj asamblare

Parametrii sunt preluati in rutina in limbaj de asamblare exact in ordineain care sunt trimisi din PASCAL (spre deosebire de limbajul C, unde suntpreluati in ordine inversa). O alta deosebire INTERESANTA, la nivel decompilator si transparenta pentru programatorii curenti: in PASCAL rutinaapelata trebuie sa stie citi parametri sunt transmisi intrucit refacerea stiveise face in interior cu un RET n, in timp ce in C nu trebuie sa stie numarul lor,refacerea stivei facindu-se in rutina apelanta cu un ADD SP,n unde n estenumarul de parametri/2). Rutina in limbaj de asamblare trebuie 'legata' de programul PASCAL cudirectiva de includere A$L nume fisier .OBJS, iar antetul ei contine numelepunctului de intrare (eticheta primei instructiuni) in rutina (care poate fidiferit sau nu de numele fisierului precizat cu $L ) urmat de parametri siprevazut cu cuvintul cheie EXTERNAL.

Observatii: - parametri trimisi prin valoare - se preiau cu instructiuni de tip MOV - parametri trimisi prin adresa - se preiau cu instructiuni de tip LDS,LES ; - variabilele globale din sectiunea VAR (sau constantele globale) suntaccesibile in rutina in limbaj asamblare numai prin numele lor (evident, aicifiind declarate EXTRN). - punctul de intrare in rutina in limbaj asamblare, trebuie declaratPUBLIC. B. Limbaj asamblare -> PASCAL

Procedurile sau functiile PASCAL apelate din limbaj asamblare trebuie saaiba in antet cuvintele cheie NEAR sau FAR (implicit NEAR), iar in asamblaretrebuie declarate EXTRN cu tipul corespunzator, NEAR sau FAR. Variabilele sau constantele globale PASCAL utilizate in rutina in limbajde asamblare trebuie declarate aici EXTRN urmate de tipul BYTE, WORD, DWORD. Parametrii se transmit prin stiva. Ei trebuie incarcati (cu instructiuneaPUSH) si vor fi preluati de procedura PASCAL exact in ordinea in care sunttrimisi, dupa apel nemaifiind necesare POP-urile corespunzatoare. De asemeneapot avea parametri valoare (se incarca numai valoarea variabilei) sau parametrivariabili (trimisi prin adresa - se incarca segmentul si deplasamentulvariabilei).

Aplicatii:

1.Analizati programele P4.ASM, P5.ASM, P4MAIN.C, din directorul PLA\LAB9\TC,respectiv programele AF1..AF3(.ASM) si PAR1..PAR3(.PAS) din directorulPLA\LAB9\TP si observati:

- antetul procedurilor aferente rutinelor in asamblare apelate dinC/PASCAL ; - modul de preluare a parametrilor ; - modul de incarcare in stiva a parametrilor aferenti procedurilor(functiilor) C si PASCAL.

2. Urmariti programele TAB.ASM si TAB.PAS (respectiv P5.ASM si P4MAIN.C) in careprogramul PASCAL (C) trimite rutinei TAB.ASM (P5.ASM), un sir de intregi pe careaceasta le afiseaza.

3. Realizati un program C care sa trimita adresa unui vector de intregi silungimea vectorului catre o rutina in limbaj asamblare care sa afiseze inzecimal valorile trimise (veti folosi si rutina HZEC.OBJ) in 2 variante:

- adresa vectorului si lungimea sunt furnizate ca parametri la apel- adresa vectorului si lungimea sunt variabile publice in C si externe inasamblare

4. Realizati un program C care sa trimita adresa unui vector de intregi sio adresa de retur catre o rutina in limbaj asamblare care preia parametrii sipune primul parametru (valoarea intreaga) in adresa specificata in al doileaparametru astfel incƒt valorile intregi vor fi afisate in programul C. Problemase va rezolva in 2 variante:

- adresa vectorului si adresa retur sunt furnizate ca parametri la apel- adresa vectorului si adresa de retur sunt furnizate ca variabile publicain C si externe in rutina asamblare


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta