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:
 
Structura unui program scris in limbaj de asamblare. Fisiere sursa, obiect si fisiere executabile (.EXE si .COM)
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 

Programele in limbaj de asamblare sint create din unul sau mai multefisiere sursa. Pentru editarea fisierelor sursa se va folosi un editor de textece produce fisiere ASCII (editorul din TC sau WS mod nondocument). In modimplicit, modulele sursa in limbaj de asamblare au extensia .ASM. Se va utiliza programul TASM pentru asamblarea fiecarui modul de program.Pentru fiecare fisier sursa TASM-ul creaza fisierul corespunzator .OBJ. Infunctie de optiunile din linia de comanda TASM pot fi create si fisiere .CRF (cureferinte incrucisate) si .LST (fisier de listare). Se va utiliza TLINK pentru a combina toate fisierele obiect si modulelebiblioteca ce formeaza un program in cadrul unui singur fisier executabil, cuextensia implicita .EXE. Poate fi de asemenea creat un fisier .MAP.

Comanda TASM:

Sintaxa: TASM aoptiunii sursaa,obiectia,listingia,xrefi ,

unde:

- sursa, reprezinta nume fisier sursa, in limbaj de asamblare, implicitcu extensia .ASM ; ai introducere optionala a parametrului din paranteza;- obiect, nume fisier obiect, implicit cu extensia OBJ;- listing, nume fisier listare, implicit cu extensia LST;- xref, nume fisier de referinte incrucisate, cu extensia .CRF.

Optiuni:

/h sau /? afiseaza lista optiunilor posibile; /l genereaza fisier listing; /n elimina tabela de simboluri din fisierul listing; /t elimina mesajele pentru asamblare fara erori; /w setare nivel generare mesaje de avertisment; /z afiseaza liniile sursa corespunzatoare mesajelor de eroare; /zd introduce informatii privind numarul liniei in .OBJ; /zi introduce informatii pentru depanare in fisierul obiect. Comanda TLINK:

Sintaxa: TLINK aoptiunii obiect a,exeia,mapia,libi

Optiuni: /i = initializeaza toate segmentele; /l = include numar pentru linile sursa; /s = genereaza o harta detaliata a segmentelor; /v = include informatie completa pentru depanare; /t = creare fisier COM. Pentru a putea folosi Turbo Debugger-ul, optiunile minimale sunt:




TASM /zi sursa TLINK /v obiect

Caracteristici ASM86

ASM86 utilizeaza 5 tipuri de date:

- byte, DB ;- word, DW ;- double word, DD ;- record, RECORD ;- structure, STRUC ;

Directivele limbajului se folosesc pentru:

- definirea segmentelor logice si controlul adresabilitatii datelor:.code, .data, .stack.- definirea etichetelor: LABEL ;- legarea modulelor de program ;- controlul contorului de locatare: ORG ;- definirea variabilelor ;- definirea constantelor: EQU.

Baza de numeratie pentru constante si variabile se noteaza cu B, D, O, H(binar, zecimal, octal, hexazecimal), implicit fiind zecimal.

Definirea si initializarea datelor:

1. Constantele sint numere propriu-zise, pentru ele nu se aloca spatiu dememorie.

Exemple: A EQU 0C2H B EQU A ; B=A CHAR EQU 'A' ; CHAR=41H CELL EQU aBP+8i; CELL este echivalent la asamblare cu expresia aBP+8i

2. Variabilele sint definite ca rezidente intr-un anumit segment, la oanumita adresa relativa (OFFSET) in cadrul acestuia si sint caracterizate deTIP=1,2,4 pentru byte, word sau dword, 1 sau 2 pentru RECORD (8/16 biti) si npentru STRUC. Formatul general al directivei:

anume vari ADB|DW|DDS Aiexp a,...i|exp' DUP (iexp a,...i)S,unde:

| semnifica alegerea unui singur element ; iexp a,...i - una sau mai multe expresii cu valori intregi, separate prinvirgula ; exp' - numarul de replici (DUP='duplicate') ale variabilei respective(pentru definiri de vectori) ;

Expresia iexp poate fi:

- o constanta ;- ?, pentru date neinitializate ;- o expresie de tip adresa (sume sau diferente intre doi operanzi farasemn);- un sir de caractere ;- o lista de date ;- exp' DUP (...) ;

Domeniile da valori admise de asamblor sint:

- DB: A-256,255S;- DW: A-65536,65535S.

Exemple:

Alfa DB ? ; neinitializata Beta DW ? ; neinitializata M DW 32 DUP (5 DUP(4),7) ; 32 de copii de cite 6 cuvinte cu valorile ; 4,4,4,4,4,7 P DB 64 DUP (0FFH) ; 64 de octeti cu valoarea 0FFH Elem DW T+10 ; T +3 este o expresie de tip adresa, ; T fiind o eticheta. Se obtine offset-ul ; celui de-al 4-lea octet de eticheta T

3. Etichetele sint nume simbolice de adrese, au un anumit OFFSET in cadrulunui segment. Identifica instructiunile, putind fi referite in alte instructiunipentru executarea salturilor in program. Daca referirile la o eticheta sintfacute in cadrul segmentului in care ea este definita, aceasta are atributulNEAR, in caz contrar fiind de tip FAR. Atributele etichetelor se stabilesc ladefinirea acestora, fiind implicit de tip NEAR.

Directiva LABEL:

- se utilizeaza impreuna cu variabile sau cu etichete de instructiuni.

Formatul ei este: nume LABEL tip Exemple:

- utilizare pentru variabile:

ARRAYB LABEL BYTE ; ARRAYW DW 100 DUP(0) ; definire tablou de 100 cuvinte. Referirileulterioare la tablou se pot face fie prin numele ARRAYB (considerind tabloul cafiind format din octeti), fie prin ARRAYW (considerind tabloul ca fiind formatdin cuvinte).

- utilizare pentru etichete:

E LABEL FAR ET: MOV AX,DX

Accesul la aceasta instructiune se va face din alte segmente cu numele E,sau din acelasi segment cu ET.

Accesul de date

1. Operanzi de tip imediat: constante definite ca atare sau prin directiva EQU:

C EQU 11110000B MOV AL,23H ADD AX,3333H MOV AL,C

2. Operanzi din registre:

ADD AX,SI ;AX<-AX+SI AND BH,40H ;BH<-BH&&40H DEC SI;SI<-SI-1

3. Operanzi referitori la memorie, pot fi:

- o variabila din memorie;- eticheta unei variabile sau instructiuni.Exemple:

a) Operanzii utilizati in instructiunile JMP si CALL:

- JMP GET_CHAR ; salt cu adresare directa la eticheta GET_CHAR- CALL PROC ; apelarea procedurii cu eticheta PROC1- JMP BX ; salt la adresa CS:BX, adica la adresa locatiei cu bazain registrul CS si offset-ul dat de continutul lui BX.- CALL NEAR_LABEL_ARRAYaDIi;apelul proc. apropiate selectate de continutullui DI, unde NEAR_LABEL_ARRAY DW PROC1 ; adresa offset a procedurii 1 DW PROC2 ; adresa offset a procedurii 2 - CALL FAR_LABEL_ARRAYaBXi ; apelul proc. FAR selectate de continutul luiBX, unde: FAR_LABEL_ARRAY DD FAR_PROC1 ; adresa procedurii 1 DD FAR_PROC2 ; adresa procedurii 2 - ET: MOV AX,CX : JNZ ET

Asamblorul analizeaza la asamblare distanta dintre adresa instructiuniiJNZ ET si ET. Daca aceasta este cuprinsa intre -128,127 atunci se genereazacodul obiect pentru salturi "scurte", adresa de salt fiind relativa si exprimataca o deplasare cu semn pe 8 biti.

b) referiri la variabile din memorie:

MOV CX,ALFA ; registru<-Mem. direct MOV ALFA,6 ; Mem. direct<-Imediat. Segmentul variabilei ALFArezulta din definirea acesteia. MOV ALFA,DX ; Mem. direct<-registru MOV BL,aBXi ; registru<-Mem. indirect MOV aDIi,BH ; Mem. indirect<-registru MOV aBPi.ALFA,AH ; Mem. bazat<-registru. ALFA=cimpul unei structuri cuadresa de baza data de BP. MOV SI,aBP+10iaDIi ; Reg<-Mem. bazat, indexat. Adresa efectiva asursei este BP+SI+10 ; (Pentru registrul segment utilizat in aceste instructiunise va consulta lucrarea anterioara.)

Exemplul urmator ilustreaza codul sursa ce produce programe executabileautonome.

;program ce copie incepind cu DS:100 100 de octeti de la CS:100

.DOSSEG .MODEL SMALL .STACK 100h ;aloca stiva 256 octeti .DATA ;inceputul segmentului de datelen EQU 100h ORG 100h ;pozitioneaza contorul de locatii la 100h-array1 DB len DUP (?) ;declarare vector de 10 octeticurent EQU $ ;valoarea curenta a contorului de locatii in ;segmentul de date .CODEstart: mov ax,@DATA ;initializare registrul segment de date mov ds,ax mov si,100het: mov al,cs:asii mov array1asi-100hi,al inc si mov ax,si sub ax,len jg et mov ax,4c00h ;functie iesire sistem in AH si cod int 21h ;de eroare 0 in AL (vezi HELP)

END start Observatii:

1. Numerele hexa ce incep cu cifre mai mari decit 9, (A...F), trebuie precedatede cifra 0, pentru a nu fi confundate cu nume de variabile; 2. Comentariile sint precedate de ";";3. Variabila predefinita $ contine valoarea curenta a deplasamentului insegmentul de date;4. Directivele .model si dosseg indica folosirea conventiilor C stabilite pentrunume si ordine de segmente. Aceste linii definesc automat segmentele in ordineacorecta si specifica instructiunile ASSUME si GROUP. Segmentele pot fi apoiplasate in fisierul sursa in ordinea dorita cu directivele de segmentsimplificate .STACK, .DATA, .CODE.5. Eticheta "start" urmeaza directivei .code si marcheaza inceputulinstructiunilor programului. Aceeasi eticheta este utilizata la sfirsitulprogramului, dupa instructiunea END.6. Simbolul @data reprezinta numele segmentului creat cu directiva .data.

Instructiuni de transfer

GRUPMnemo- nicaOperanziDest SrcEfectulinstr.FLAG-URIExemple deinstructiuni a)Generale 1. MOV M, A A, M R, R R, M M, R R, DATA M, DATASR, R16SR, M16R16, SR M, SR DEST<-SRC

SR !=CS -

MOV ARRAYaSIi,ALMOV AX,BETAMOV AX,BXMOV SP,STACK_TOPMOV COUNTaDIi,DXMOV AX,3MOV BETAaBXiaSIi,5MOV DS,CXMOV ES,SEG_BASEMOV BP,SSMOV ALFAaBXi,CS c6x12xt
2.PUSH R16SRM16transfer decuvint instivaSP<-SP-2(SP+1,SP)<-SRC - PUSH SIPUSH ESPUSH DATAaDIi
3. POP R16SRM16transfer decuvint dinstivaDEST<-(SP+1,SP)SP<-SP+2SR != CS -POP DXPOP DSPOP VAR
4. XCHG(eXCHanGe)A, RM, RR, RpermutareSRC<-> DEST - XCHG AX,DXXCHG SEMAFOR,AXXCHG BL,CL b)Specificepentru A 1.IN(INputport)A, DATA8

A, DX

citire portin. A<-PORT(DATA8)A<-PORT (DX) - IN AL,0FAH

IN AX,DX

OUT(OUTputport)

DATA8, A

DX, AscriereportPORT(DATA8)<-A(DX)<-A -

OUT 44,AX

OUT DX,AL
2. XLAT(Translate)TABLOU SRC

conversieBX=adresatablouluiAL<-(BX+AL) -XLAT TABLE

c)AdresaefectivaLEA(LoadEffec-tiveAddr.)R16, EAR16<-EA(incarcareadresaefectiva) -LEA BX, BETAaBXi d)Registresegment LDS(Loaddatasegmentreg.)R16, M32R16<-(EA+1,EA)DS<-(EA+3,EA+2) - LDS BX, D_SaDIiLDS SI, NSEGaBXi
LES(Loadextrasegmentreg.)R16, M32R16<-(EA+1,EA)ES<-(EA+3,EA+2)LES DI, aBXi.TLES BX,ADRaSIi e)Flag-uriLAHF(Load AHfromflags) -AH<-SF,ZF,x,AF,x,PF,x,CF -LAHF
SAHF(StoreAH inflags) -SF,ZF,x,AF,x,PF,x,CF<-AHSF,ZF,AFPF,CFSAHF
PUSHF(PushFlags) -SP<-SP-2(SP+1,SP)<-F -PUSHF
POPF(POPFlags) -F<-(SP+1,SP)SP<-SP+2 afectea-zatoateflag-urilePOPF

Notatii:

A = registru acumulator, (AX sau AH, sau AL); R8/16 = registru general, de 8 resp. 16 biti; M = operand din memorie (de 8, 16 sau 32 biti); SR = registru segment; DATA = constanta (8/16 biti); DEPL = deplasare ("offset") de adresa; (DATA) = octetul de adresa offset egala cu DATA; (DATA+1,DATA)= cuvintul (16 biti) de adresa offset egala cu DATA; (DATA+3,...,DATA)= cuvint dublu (de obicei pointer) cu adresa offsetegala cu DATA ; (nume registru) = octetul adresat prin registrul indicat; (nume registru+1,nume registru) = cuvintul de 16 biti adresat indirectprin registrul indicat ; SRC = sursa de date:- DATA, DATA8, DATA16, DATA32;- (DATA);- nume registru;- (nume registru) sau anume registrui; DEST = destinatie a datelor:- (DATA);- nume registru;- (nume registru) sau anume registrui; EA = adresa efectiva ;

Aplicatii:

1. Urmariti programul de mai sus (program care muta continutul unei zone dememorie de la offset 100, din segmentul de cod curent, intr-un vector definitde utilizator in segmentul de date) si rulati-l pas cu pas in TD, vizualizindregistrele si memoria.2. Scrieti un program care va face conversia literelor mari dintr-un text inlitere mici, memorind rezultatul intr-o zona de memorie. Textul initial va fidefinit de programator.3. Scrieti un program ce va face conversia unui numar hexazecimal reprezentatpe cuvint in codul ASCII corespunzator acestuia. (O posibilitate ar fifolosirea instructiunii XLAT.)


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