Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Descrierea pachetului de programe TURBO-ASSEMBLER


Descrierea pachetului de programe TURBO-ASSEMBLER


Descrierea pachetului de programe TURBO-ASSEMBLER

1. Introducere

Pachetul de programe Turbo-Assembler pune la dispozitia utilizatorului toate instrumentele necesare pentru dezvoltarea programelor in limbaj de asamblare. Macroasamblorul TASM produce module obiect relocabile din fisiere sursa in limbaj de asamblare. Pentru aceste module obiect se pot edita legaturile cu programul TLINK in scopul crearii de programe executabile sub sistemul de operare DOS. Pachetul cuprinde:
a) macroasamblorul TASM;
b) editorul de legaturi TLINK;
c) bibliotecarul TLIB;
d) depanatorul simbolic TD.
Pentru depanare se poate folosi si depanatorul standard al sistemului de operare DOS, DEBUG.

2. Alegerea tipului de fisier executabil



Sunt posibile urmatoarele formate de fisiere executabile:
. EXE este formatul uzual pentru fisiere executabile sub sistemul de operare DOS. Programele executabile pastrate in acest format pot avea segmente multiple. Este formatul recomandat pentru programe de dimensiuni mari. Extensia lor implicita este .EXE;
. COM - programele in acest format sunt limitate pentru un singur segment, din acest motiv ele nedepasind 64 Ko (exceptand cazurile cand nu se specifica segmente). Se recomanda pentru programe mici. Un dezavantaj important este acela ca nu contin informatii despre sursa si simbolice pentru depanatorul simbolic TD. Ele pot fi depanate insa cu DEBUG sau cu TD in mod nesimbolic;

3. Comenzi necesare dezvoltarii unui program

Pentru aflarea optiunilor la linia de comanda a programelor TASM si TLINK se lanseaza in executie aceste programe fara nici un parametru in linia de comanda. Efectul este afisarea sintaxei liniei de comanda impreuna cu optiunile disponibile. Comenzile uzuale sunt:
. pentru asamblarea unui program:
TASM nume
unde nume este numele fisierului ce contine programul sursa, implicit cu extensia .ASM;
. pentru asamblarea unui program cu obtinerea fisierului listing:
TASM /l nume
unde nume este numele fisierului ce contine programul sursa, implicit cu extensia .ASM;
. pentru asamblarea unui program cu depunerea de informatii simbolice in fisierul obiect rezultat, informatii necesare depanatorului simbolic TD:
TASM /zi nume
unde nume este numele fisierului ce contine programul sursa, implicit cu extensia .ASM;
. pentru editarea legaturilor unui program:
TLINK nume
unde nume este numele fisierului obiect rezultat in urma asamblarii, implicit cu extensia .OBJ. Implicit se genereaza si harta de alocare a memoriei;
. pentru editarea legaturilor unui program cu depunerea de informatii simbolice in fisierul executabil rezultat necesare depanatorului simbolic TD:
TLINK /v nume
unde nume este numele fisierului obiect rezultat in urma asamblarii cu optiunea /zi, implicit cu extensia .OBJ. Implicit se genereaza si harta de alocare a memoriei;
. pentru editarea legaturilor unui program in vederea obtinerii unui fisier executabil in format COM:
TLINK /t nume
unde nume este numele fisierului obiect rezultat in urma asamblarii unui program sursa in format COM. Implicit are extensia .OBJ;
. pentru depanarea programului executabil obtinut:
TD nume
unde nume este numele fisierului executabil rezultat in urma editarii legaturilor, implicit cu extensia .EXE sau .COM.
Depanarea cu TD poate fi obisnuita sau simbolica. Depanarea obisnuita presupune ca in momentul depanarii sa se cunoasca adresele variabilelor din program impreuna cu segmentele in care se afla aceste variabile. Depanarea simbolica presupune ca in momentul executiei programul depanator sa aiba acces la numele simbolice ale variabilelor din program, depanarea fiind in acest caz mai usor de realizat.
Pentru depanarea obisnuita se parcurg urmatorii pasi:
. Se asambleaza si link-editeaza programul;
. Se lanseaza TD in executie cu comanda mentionata mai sus. Efectul este aparitia pe ecran a unei ferestre impartita in 5 subferestre: subfereastra cu programul, subfereastra de registre, subfereastra de flaguri, subfereastra de stiva si subfereastra de date. Trecerea dintr-o subfereastra in alta se face apasand tasta TAB;
. Se identifica deplasamentele si adresele de segment ale variabilelor din program pe baza examinarii fisierelor listing si / sau a subferestrei cu programul;
. Se vizualizeaza valorile initiale ale variabilelor prin activarea subferestrei de date, apasarea tastelor CTRL-G si introducerea in casuta de dialog a adresei variabilei ce se vrea examinata sub forma segment: offset;
. Se activeaza subfereastra cu programul si se executa apoi programul pas cu pas (instructiune cu instructiune) apasand tastele F7 sau F8 si simultan examinand celelalte subferestre;
. La terminarea depanarii se paraseste programul depanator cu Alt-X.
Pentru depanarea simbolica se parcurg urmatorii pasi:
. Se asambleaza si se link-editeaza programul cu optiunile de depanare simbolica prezentate mai sus;
. Se lanseaza TD in executie cu comanda indicata. Pe ecran apare o fereastra ce contine programul asa cum a fost introdus in fisierul sursa;
. Se introduc in fereastra Watches variabilele al caror continut se doreste a fi urmarit in timpul executiei prin apasarea tastelor Ctrl-F7 si introducerea in casuta de dialog ce apare a numelui acestor variabile; Eventual se deschide fereastra de registre cu comanda Alt-V R;
. Se executa apoi programul pas cu pas (instructiune cu instructiune) apasand tastele F7 sau F8 urmarind fereastra Watches si fereastra de registre;
. La terminarea depanarii se paraseste programul depanator cu Alt-X.

4. Desfasurarea lucrarii

Procedura generala de lucru este urmatoarea:

1. Se foloseste un editor de texte pentru crearea sau modificarea modulelor sursa. Prin conventie acestea au extensia implicita .ASM. Ele se pot organiza in diverse moduri. Spre exemplu toate procedurile se pot plasa intr un modul mai mare sau se pot scinda pe mai multe module;
2. Se utilizeaza TASM pentru asamblarea fiecarui modul de program. Se pot utiliza optional fisiere de includere (fisiere ce sunt incluse in modulul asamblat doar pe durata asamblarii). Daca apar erori dupa executarea acestui pas se revine la pasul anterior. Pentru fiecare fisier sursa .ASM se creeaza in urma asamblarii:
. un fisier obiect cu extensia implicita .OBJ;
. un fisier listing cu extensia implicita .LST (optional);
. un fisier de referinte incrucisate cu extensia implicita .REF (optional).
Daca se doreste legarea de module scrise in asamblare cu module scrise intr un limbaj de nivel inalt, acestea se vor compila in fisiere obiect.
3. Optional se foloseste TLIB pentru plasarea mai multor fisiere obiect intr un singur fisier biblioteca cu extensia implicita .LIB. Acest lucru se intampla cand se doreste legarea unor fisiere obiect standard la mai multe programe. De asemenea TLIB poate crea un fisier optional de listare a continutului bibliotecii;
4. Se foloseste TLINK pentru a combina toate fisierele obiect si modulele biblioteca ce formeaza un program in cadrul unui singur fisier executabil care are implicit extensia .EXE. Optional se poate crea si o harta de alocare a memoriei, cu extensia implicita .MAP;
5.
Se poate realiza editarea legaturilor cu optiunea /l pentru crearea (daca este necesara) a unui fisier executabil in format binar. Aceasta operatie este necesara pentru programele scrise in format COM (care vor avea extensia .COM) sau pentru fisierele binare.
6. Se depaneaza programul pentru depistarea erorilor de logica.
Dintre tehnicile utilizate se amintesc:
. studiul raspunsului programului la diferite seturi de date de intrare;
. studiul fisierelor sursa si listing;
. utilizarea fisierului listing cu referinte incrucisate;
. utilizarea depanatorului simbolic TD pentru depanare dinamica.

4.1. Exemple de programe in format EXE

Primul program afiseaza pe ecran un mesaj de salut.

TITLE hello
.MODEL small
.STACK 100h
.DATA
      Message1 DB 'Hello! ',13,10,'Hello!',13,10,'$'
.CODE
Start:
       mov ax,@data
       mov ds,ax;
       mov dx, offset Message1
       mov ah,9h
       int 21h
       mov ah,4ch
       int 21h
END Start

Se remarca urmatoarele:

1. Directiva .MODEL este folosita pentru initializarea modelului de memorie.
Efectul cumulat al celor doua directive este definirea segmentelor implicite pentru programe de model mic generandu-se directivele ASSUME si GROUP utilizate de programele de model mic;
2. Directiva .STACK defineste o stiva de 256 octeti, suficienta pentru programe mici;
3. Directiva .DATA marcheaza inceputul segmentului de date. In cazul nostru acest segment contine o variabila sir de caractere si lungimea acestuia;
4. In linia Message1 se retine mesajul care va fi afisat in program. Numerele 13, 10 codifica "Enter" (trecerea la randul urmator).
5. Eticheta primei instructiuni ce urmeaza directivei .CODE marcheaza inceputul portiunii executabile a programului. Aceeasi eticheta este utilizata dupa directiva END ea definind astfel punctul de unde va incepe executia programului (numit si punctul de intrare in program);
6. Primele doua instructiuni initializeaza registrul ds. Simbolul @data reprezinta numele segmentului creat cu directiva .DATA. Registrul ds va fi intotdeauna initializat pentru fisiere sursa in format EXE;
7. Continutul variabilei de tip sir de caractere definita in program se afiseaza pe ecran utilizand functia DOS cu codul 40h. Fisierul 'handle' 1 (driver predefinit pentru iesirea standard) este specificat pentru afisarea pe ecran. Sirurile pot fi de asemenea afisate pe ecran cu functia DOS cu codul 09h;
8. Functia DOS cu codul 4Ch este utilizata pentru terminarea programului si iesirea la sistem. Exista si alte tehnici de iesire la sistem dar aceasta este cea recomandata.


Programul urmator are ca scop citirea a doua numere naturale si realizeaza suma dintre acestea.

TITLE adunare
.MODEL small
.STACK 100h
.DATA
     a DB ?
     b DB ?
     Message1 DB 'a= ','$'
     Message2 DB 13,10,'b= ','$'
     Message3 DB 13,10,'$'
     Message4 DB '+','$'
     Message5 DB '=','$'
.CODE
Start:
       mov ax,@data
       mov ds,ax
       mov dx, offset Message1
       mov ah,09h
       int 21h
       mov ah, 01h
       int 21h
       sub al,48
       mov a,al
       mov dx, offset Message2
       mov ah,9h
       int 21h
       mov ah, 01h
       int 21h
       sub al,48
       mov b,al
       mov dx, offset Message3
       mov ah,9h
       int 21h
       ; scrierea valorii primei variabile
       mov dl,a
       add dl,48
       mov ah, 02h
       int 21h
       mov dx, offset Message4
       mov ah,9h
       int 21h
       ; scrierea valorii celei de-a doua variabile
       mov dl,b
       add dl,48
       mov ah, 02h
       int 21h
       mov dx, offset Message5
       mov ah,9h
       int 21h
       ; adunarea celor doua variabile
       mov dl,a
       add dl,b
       add dl,48
       mov ah, 02h
       int 21h
       mov ah,4ch
       int 21h
END start

Instructiunea add realizeaza adunarea a celor doi parametrii cititi anterior.
In Turbo Assambler punerea in comentariu a unor linii se realizeaza prin punerea la inceputul liniei a semnului de punctuatie ";".

4.2. Citirea fisierelor de listare a asamblarii

TASM va crea un fisier de listare a asamblarii fisierului sursa ori de cate ori se da un nume de fisier de listare a asamblarii pe linia de comanda TASM sau se foloseste optiunea de asamblare /l. Fisierul de listare a asamblarii contine atat instructiunile din fisierul sursa cat si codul obiect (daca exista) generat pentru fiecare instructiune. Listarea prezinta, de asemenea, numele si valorile tuturor etichetelor, variabilelor si simbolurilor din fisierul sursa.
Asamblorul creeaza tabele pentru macrodefinitii, structuri, inregistrari, segmente, grupuri si alte simboluri. Aceste tabele sunt plasate la sfarsitul fisierului de listare a asamblarii (exceptand cazul in care ele sunt suprimate cu optiunea /n). TASM listeaza numai tipurile de simboluri intalnite in program. De exemplu, daca programul nu contine macrodefinitii, in tabloul de simboluri nu va exista o sectiune de macrodefinitii. Toate numele de simboluri vor fi prezentate cu litere mari, exceptand cazul in care sunt utilizate optiunile /ml sau /mx pentru a specifica nume ce contin si litere mici.
Asamblorul listeaza codul generat de instructiunile unui fisier sursa. Fiecare linie are sintaxa ce urmeaza:
Numar_linie deplasament cod instructiune
unde:
. numar_linie - este numarul liniei din listing. Numararea incepe de la prima instructiune din fisierul de listare a asamblarii. Numerele liniilor sunt generate numai atunci cand se cere un fisier de referinte incrucisate. Numerele liniilor dintr un listing nu corespund intotdeauna liniilor din fisierul sursa;
. deplasament - reprezinta deplasarea de la inceputul segmentului curent pana la codul corespunzator liniei respective;
. cod - indica valoarea numerica in hexazecimal a codului generat daca aceasta valoare este cunoscuta in timpul asamblarii. Daca valoarea este calculata in timpul executiei, TASM indica actiunea necesara pentru calcularea valorii;
. instructiune - este instructiunea sursa prezentata exact asa cum apare in fisierul sursa, sau asa cum este expandata in urma unei macrosubstitutii.
Daca apar erori in timpul asamblarii, fiecare mesaj de eroare va aparea chiar sub instructiunea in care a aparut eroarea. In continuare este prezentat un exemplu de linie ce contine o eroare si mesajul de eroare corespunzator.

11 0005 A1 0000 mov ax,aa
**Error** adunare.ASM(11) Undefined symbol: AA

Numarul 11 din mesajul de eroare reprezinta linia sursa in care a aparut eroarea. Listingul model prezentat in continuare este realizat prin asamblarea programului din fisierul adunare.asm.
Linia de comanda este urmatoarea:
TASM /l adun

Listingul rezultat, plasat in fisierul adunare.lst, este prezentat in continuare:

Turbo Assembler Version 4.1 05/09/02 21:30:52
d:tasmbinalexadunare.asm
adunare

.MODEL small

.STACK 100h

.DATA

a DB ?

b DB ?

0002 61 3D 20 24

Message1 DB 'a= ','$'

0006 0D 0A 62 3D 20 24

Message2 DB 13,10,'b= ','$'

000C 0D 0A 24

Message3 DB 13,10,'$'

000F 2B 24

Message4 DB '+','$'

0011 3D 24

Message5 DB '=','$'

.CODE

Start:

0000 B8 0000s

mov ax,@data

0003 8E D8

mov ds,ax

0005 BA 0002r

mov dx, offset Message1

0008 B4 09

mov ah,09h

000A CD 21

int 21h

000C B4 01

mov ah, 01h

000E CD 21

int 21h

0010 2C 30

sub al,48

0012 A2 0000r

mov a,al

0015 BA 0006r

mov dx, offset Message2

0018 B4 09

mov ah,9h

001A CD 21

int 21h

001C B4 01

mov ah, 01h

001E CD 21

int 21h

0020 2C 30

sub al,48

0022 A2 0001r

mov b,al

0025 BA 000Cr

mov dx, offset Message3

0028 B4 09

mov ah,9h

002A CD 21

int 21h

002C 8A 16 0000r

mov dl,a

0030 80 C2 30

add dl,48

0033 B4 02

mov ah, 02h

0035 CD 21

int 21h

;sub al,48

;mov a,al

0037 BA 000Fr

mov dx, offset Message4

003A B4 09

mov ah,9h

003C CD 21

int 21h

003E 8A 16 0001r

mov dl,b

0042 80 C2 30

add dl,48

0045 B4 02

mov ah, 02h

0047 CD 21

int 21h

;sub al,48

;mov b,al

0049 BA 0011r

mov dx, offset Message5

004C B4 09

mov ah,9h

004E CD 21

int 21h

0050 8A 16 0000r

mov dl,a

0054 02 16 0001r

add dl,b

0058 80 C2 30

add dl,48

005B B4 02

mov ah, 02h

005D CD 21

int 21h

005F B4 4C

mov ah,4ch

0061 CD 21

int 21h

END start

Turbo Assembler Version 4.1 05/09/02 21:30:52
Symbol Table
adunare

Segmentele si grupurile utilizate in fisierul sursa sunt listate la sfarsitul programului, indicandu-se dimensiunea lor, tipul de aliniere, de combinare si clasa. Daca in fisierul sursa au fost utilizate directive de segment simplificate, numele reale de segmente generate de TASM vor fi listate in tabela. Pentru exemplificare prezentam tabela de segmente si grupuri corespunzatoare listingului anterior:

Groups & Segments

Bit Size

Align

Combine

Class

DGROUP

Group

STACK

Para

Stack

STACK

_DATA

Word

Public

DATA

_TEXT

Word

Public

CODE

Prima coloana indica numele tuturor segmentelor si grupurilor din modulul sursa. Numele de segmente si grupuri sunt date in ordine alfabetica, exceptand cazul in care numele de segmente ce apartin unui grup sunt plasate sub numele grupului in ordinea in care au fost adaugate grupului.
Coloana Bit indica numarul de biti ai cuvantului segmentului respectiv.
Coloana Size indica dimensiunea in numar de octeti (in hexazecimal) a fiecarui segment. Nu este prezentata dimensiunea grupurilor.
Coloana Align indica tipul de aliniere al segmentului, implicit fiind Para, adica aliniere la paragraf (multiplu de 16).
Coloana Combine indica tipul de combinare al segmentului. Daca nu este definit un tip de combinare explicit pentru segment, se asociaza implicit none, care este un tip de combinare special.
Coloana Class indica numele clasei segmentului.
Toate simbolurile (cu exceptia numelor pentru macrodefinitii, structuri, inregistrari si segmente) sunt prezentate in tabela de simboluri aflata la sfarsitul listingului.
Pentru exemplificare consideram tabela de simboluri corespunzatoare listingului anterior:

Symbol Name

Type

Value

??DATE

Text

??FILENAME

Text

'adunare '

??TIME

Text

??VERSION

Number

040A

@32BIT

Text

@CODE

Text

_TEXT

@CODESIZE

Text

@CPU

Text

0101H

@CURSEG

Text

_TEXT

@DATA

Text

DGROUP

@DATASIZE

Text

@FILENAME

Text

ADUNARE

@INTERFACE

Text

000H

@MODEL

Text

@STACK

Text

DGROUP

@WORDSIZE

Text

A

Byte

DGROUP:0000

B

Byte

DGROUP:0001

MESSAGE1

Byte

DGROUP:0002

MESSAGE2

Byte

DGROUP:0006

MESSAGE3

Byte

DGROUP:000C

MESSAGE4

Byte

DGROUP:000F

MESSAGE5

Byte

DGROUP:0011

START

Near

_TEXT:0000

Coloana Symbol Name prezinta numele simbolurilor in ordine alfabetica.
Coloana Type prezinta fiecare tip de simbol. Un tip este specificat ca fiind unul dintre urmatoarele:

Tip

Semnificatie

Near

Eticheta cu referinta apropiata

Far

Eticheta cu referinta indepartata

Number

Eticheta absoluta

Alias

Simbol definit cu directiva EQU

Text

Echivalare de text

Byte

Un octet

Word

Un cuvant (doi octeti)

Dword

Dublu cuvant (patru octeti)

Fword

Cuvant de lungime sase octeti

Qword

Cuvant de lungime opt octeti

Tbyte

Zece octeti

Tipul unei variabile generata cu operatorul de multiplicare DUP, cum ar fi un tablou sau un sir, este tipul unui singur element.
Coloana Value indica valorile simbolurilor din program. Valoarea unui simbol depinde de tipul simbolului. Spre exemplu, daca simbolul reprezinta o variabila, o eticheta sau o procedura, coloana Value contine deplasamentul simbolului in hexazecimal fata de inceputul segmentului in care este definit, impreuna cu numele segmentului respectiv.
Echivalarile de text de la inceputul tabelei sunt cele definite automat de asamblor.

5. Modul de lucru

1. Se vor asambla si rula programele prezentate obtinandu se fisiere .EXE;
2. Se vor obtine si se vor analiza fisierele listing si de referinte incrucisate;
3. Se vor testa cat mai multe dintre optiunile de lucru ale macroasamblorului TASM;
4.
Se va rula sub DEBUG sau TD cel putin unul dintre programele prezentate.





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate