|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Interfatarea modulelor de program scrise in limbaj de asamblare cu module scrise in limbaje de nivel inalt (C/Pascal) | ||||||
|
||||||
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.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 |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|