Sunteți pe pagina 1din 14

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei


Catedra Automatic i Tehnologii Informaionale

RAPORT
Disciplina: Arhitectura Calculatorului

Lucrarea de laborator Nr.1

Tema: Elaborarea programelor n limbajul de asamblare TASM

A efectuat : studentul grupei TI-151 Toma Ana

A verificat: M. Potlog

Chiinu 2017
Scopul lucrrii:
Lucrarea urmrete familiarizarea studenilor cu regitrii microprocesoarelor pe 16, 32 i 64 de bi i,
cu mediul de dezvoltare a programelor scrise in limbaj de asamblare pus la dispozitie de catre produsul Turbo-
Assembler al firmei Borland.Se prezint setrile TASM necesare pentru a elabora, rula i depana aplicaiile
elaborate,utiliznd regitri pe 16, 32 i 64 de bii.

Sarcina lucrrii:
1.Se vor asambla si rula exemplele de programe prezentate obinndu-se fiiere .EXE, ele se afl n Project,
cu numele Project.exe
2.Se vor obine i se vor analiza fiierele listing ale programelor Project.lst;
3.Se va rula sub Debug pas cu pas (clic F10) exemplele de programe actualiznd Registers i Watch1(pentru
variabile);
Continutul referatului Referatul va conine:
- tema i scopul lucrrii,
- codurile surs .asm (Ex. 16,32 de bii) comentate;
- fiierele -listing (Ex. 16,32 de bii);
- paii rulrii programelor n Debug;
- Concluzii.
Indicaii teoretice:
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:
1. macroasamblorul TASM;
2. editorul de legaturi TLINK;
3. bibliotecarul TLIB;
4. depanatorul simbolic TD.

DEZVOLTAREA PROGRAMELOR IN LIMBAJ DE ASAMBLARE


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 programul TASM pentru asamblarea fiecarui modul de program. Se pot utiliza optional fisiere
de includere (fisiere ce sint 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 creaza in urma asamblarii:
a.un fisier obiect cu extensia implicta .OBJ;
b.un fisier listing cu extensia implicita .LST (optional);
c.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 intimpla cind 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 im[plicita .MAP;
5.Se poate realiza editarea legaturilor cu optiunea /l pentru crearea (daca este necesara) 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:
a.studiul raspunsului programului la diferite seturi de date de intrare;
2
b.studiul fisierelor sursa si listing;
c.utilizarea fisierului listing cu referinte incrucisate;
d.utilizarea depanatorului simbolic TD pentru depanare dinamica.

Realizarea lucrarii:
Programele au fost asamblate in sistemul de operare Windows 7.
Codul sursa a fost scris in editorul Notepad
Asamblarea a avut loc cu ajutorul instrumentelor oferite de compania Borland Turbo Assambler(TASM)

Asamblarea, obtinerea listingului si obtinerea fisierului executabil:


1)Cu ajutorul comenzii tasm /l /zi 16biti.asm am creat fisierele .lst si .obj
Unde :
/l creeaza un fisier normal de listing
/zi ofera informatia pentru debuger

2) Cu ajutorul comenzii tlink /v 16biti.obj fisierul obiect a fost convertit in fiser executabil.
Unde:
/v este informatia simbolica pentru debuger
3) Cu ajutorul comenzii 16biti adica denumirea fisierului .exe lansam in executie programul.

Anexa (codul sursa si listingul programului pe 16 bii)

16biti.asm

TITLE lab_exe ; la exit salveaza


.model small ; model de memorie
.stack 100h ; segment de stiva

.data ;directiva ce indica inceputul segmentului de date


mesaj db "Hello,World!",13,10 ; sirul este stocat in mesaj
lmesaj equ $-mesaj
.code ; directiva ce indica inceputul segmentului de cod
main:
mov ax,@data ; initializarea segmentului de date
mov ds,ax ; muta continutul lui ax in ds
mov bx,1 ; muta continutul lui 1 in bx
mov cx,lmesaj; muta continutul lui lmesaj in cx
mov dx,OFFSET mesaj ; in dx - deplasamentul sirului mesaj
mov ah,40h ; muta valoarea lui 40h in registrul ah
int 21h ; intreruperea 21h - apel la serviciul MSD
mov ax,4C00h
int 21h ; apel la MSDOS
END main ; sfarsitul programului

3
Figura 1 obtinerea fisierului de tip .exe

Pentru a rula programul in Turbo Debuger dupa pasii efectuati mai sus trebuie sa introducem in linia
de comanda td 16biti.exe dupa ce va aparea urmatoarele imagini:

4
5
16biti.LST

Turbo Assembler Version 3.0 03/06/17 21:30:24 Page 1


16biti.asm

1 0000 .model small ; model de memorie


2 0000 .stack 100h ; segment de stiva
3
4 0000 .data ; segment de date(se definesc datele)
5 0000 48 65 6C 6C 6F 2C 57+ mesaj db "Hello,World!",13,10 ; sirul este stocat in mesaj
6 6F 72 6C 64 21 0D 0A
7 =000E lmesaj equ $-mesaj
8 000E .code ; segment de cod(declarare si definire proceduri)
9 0000 main:
10 0000 B8 0000s mov ax,@data ; initializarea segmentului de date
11 0003 8E D8 mov ds,ax ; muta continutul lui ax in ds
12 0005 BB 0001 mov bx,1
13 0008 B9 000E mov cx,lmesaj
14 000B BA 0000r mov dx,OFFSET mesaj ; in dx - deplasamentul sirului mesaj
15 000E B4 40 mov ah,40h ; muta valoarea lui 40h in registrul ah
16 0010 CD 21 int 21h ; intreruperea 21h - apel la serviciul MSDOS
17 0012 B8 4C00 mov ax,4C00h
18 0015 CD 21 int 21h ; apel la MSDOS
19
20 END main ; sfarsitul programului
Turbo Assembler Version 3.0 03/06/17 21:30:24 Page 2
Symbol Table

Symbol Name Type Value

??DATE Text "03/06/17"


??FILENAME Text "16biti "
6
??TIME Text "21:30:24"
??VERSION Number 0300
@32BIT Text 0
@CODE Text _TEXT
@CODESIZE Text 0
@CPU Text 0101H
@CURSEG Text _TEXT
@DATA Text DGROUP
@DATASIZE Text 0
@FILENAME Text 16BITI
@INTERFACE Text 00H
@MODEL Text 2
@STACK Text DGROUP
@WORDSIZE Text 2
LMESAJ Number 000E
MAIN Near _TEXT:0000
MESAJ Byte DGROUP:0000

Groups & Segments Bit Size Align Combine Class

DGROUP Group
STACK 16 0100 Para Stack STACK
_DATA 16 000E Word Public DATA
_TEXT 16 0017 Word Public CODE

Anexa (codul sursa si listingul programului pe 32 bii)

32biti.ASM

.model small ; marimea modelului


.stack 100h ; segmentul de stiva

.data
Promt DB 'Doresti sa devii programator?(da/nu)-[y/n]$' ; este dat un sir
Dad DB 13,10,'Vei deveni!',13,10,'$' ; daca raspunzi afirmativ
Nud DB 13,10,'Vei deveni filosof!',13,10,'$' ; daca raspunzi negativ

.code ; segmentul de cod


main: ; procedura
mov ax,@data ; instructiunea incarca in registrul AX adresa seg. de date
mov ds,ax ; instr. incarca in registrul seg. DS adresa seg. de date din AX
mov dx,OFFSET Promt ; in dx-deplasamentul sirului Prompt
mov ah,9 ; afiseaza sirul
int 21h ; apelul intreruperii
mov ah,1 ; introduce de la tastatura un caracter
int 21h
7
cmp al,'y' ; compara continutul registrului al cu codul ASCII pentru lit. y
jz IsDad ; sare la eticheta IsDad,daca rezultatul compararii e nul
cmp al,'n' ; compara pentru litera n
jz IsNud ; sare la eticheta IsNud

IsDad:
mov dx,OFFSET Dad ; in dx-offsetul sirului Dad
jmp ex ; salt la eticheta ex
IsNud:
mov dx,OFFSET Nud

ex:
mov ah,9 ; afisarea sirului
int 21h ; intreruperea
mov ah,4ch ; sfarseste programul
mov al,0 ; returneaza 0
int 21h

END main

Figura 2 obtinerea fisierului de tip .exe


Pentru a rula programul in Turbo Debuger dupa pasii efectuati mai sus trebuie sa introducem in linia de
comanda td 32biti dupa ce va aparea urmatoarele imagini:

8
9
10
32biti.LST
Turbo Assembler Version 3.0 03/06/17 21:43:16 Page 1
32biti.asm

11
1 0000 .model small ; marimea modelului
2 0000 .stack 100h ; segmentul de stiva
3
4 0000 .data
5 0000 44 6F 72 65 73 74 69+ Promt DB 'Doresti sa devii programator?(da/nu)-[y/n]$' ; este dat un sir
6 20 73 61 20 64 65 76+
7 69 69 20 70 72 6F 67+
8 72 61 6D 61 74 6F 72+
9 3F 28 64 61 2F 6E 75+
10 29 2D 5B 79 2F 6E 5D+
11 24
12 002B 0D 0A 56 65 69 20 64+ Dad DB 13,10,'Vei deveni!',13,10,'$' ; daca raspunzi afirmativ
13 65 76 65 6E 69 21 0D+
14 0A 24
15 003B 0D 0A 56 65 69 20 64+ Nud DB 13,10,'Vei deveni filosof!',13,10,'$' ; daca raspunzi negativ
16 65 76 65 6E 69 20 66+
17 69 6C 6F 73 6F 66 21+
18 0D 0A 24
19
20 0053 .code ; segmentul de cod
21 0000 main: ; procedura
22 0000 B8 0000s mov ax,@data ; instructiunea incarca in registrul AX adresa seg. de date
23 0003 8E D8 mov ds,ax ; instr. incarca in registrul seg. DS adresa seg. de date din AX
24 0005 BA 0000r mov dx,OFFSET Promt ; in dx-deplasamentul sirului Prompt
25 0008 B4 09 mov ah,9 ; afiseaza sirul
26 000A CD 21 int 21h ; apelul intreruperii
27 000C B4 01 mov ah,1 ; introduce de la tastatura un caracter
28 000E CD 21 int 21h
29
30
31 0010 3C 79 cmp al,'y' ; compara continutul registrului al cu codul ASCII pentru lit. y
32 0012 74 04 jz IsDad ; sare la eticheta IsDad,daca rezultatul compararii e nul
33 0014 3C 6E cmp al,'n' ; compara pentru litera n
34 0016 74 06 jz IsNud ; sare la eticheta IsNud
35
36 0018 IsDad:
37 0018 BA 002Br mov dx,OFFSET Dad ; in dx-offsetul sirului Dad
38 001B EB 04 90 jmp ex ; salt la eticheta ex
39 001E IsNud:
40 001E BA 003Br mov dx,OFFSET Nud
41
42 0021 ex:
43 0021 B4 09 mov ah,9 ; afisarea sirului
44 0023 CD 21 int 21h ; intreruperea
45 0025 B4 4C mov ah,4ch ; sfarseste programul
46 0027 B0 00 mov al,0 ; returneaza 0
47 0029 CD 21 int 21h
48
49 END main
Turbo Assembler Version 3.0 03/06/17 21:43:16 Page 2
Symbol Table

Symbol Name Type Value

??DATE Text "03/06/17"


??FILENAME Text "32biti "
??TIME Text "21:43:16"
??VERSION Number 0300
@32BIT Text 0
@CODE Text _TEXT
12
@CODESIZE Text 0
@CPU Text 0101H
@CURSEG Text _TEXT
@DATA Text DGROUP
@DATASIZE Text 0
@FILENAME Text 32BITI
@INTERFACE Text 00H
@MODEL Text 2
@STACK Text DGROUP
@WORDSIZE Text 2
DAD Byte DGROUP:002B
EX Near _TEXT:0021
ISDAD Near _TEXT:0018
ISNUD Near _TEXT:001E
MAIN Near _TEXT:0000
NUD Byte DGROUP:003B
PROMT Byte DGROUP:0000

Groups & Segments Bit Size Align Combine Class

DGROUP Group
STACK 16 0100 Para Stack STACK
_DATA 16 0053 Word Public DATA
_TEXT 16 002B Word Public CODE

13
Concluzii:
n urma realizrii lucrrii de laborator nr. 1, am fcut cunotiin cu instrumentele oferite de Turbo-
Assembler Editare astfel am creat 2 fisiere sursa numite 16biti.asm si 32biti.asm cu editorul de
DOS apelat din linia de comanda: C:\>edit 16biti.asm
Apoi am construit fisierul obiect si am verificat codul din sursa: C:\> tasm 16biti.asm
La sfirsit am rulat executabilul in Debugger: C:\> td fisier

Bibliografia:
Indicaiile metodice oferite de V. Colesnic
http://www.itcsolutions.eu/category/programming/assembler-8086/?

14

S-ar putea să vă placă și