MINISTERUL EDUCAŢIEI sI sTIINŢEI
AL REPUBLICII
UNIVERSITATEA TEHNICA A MOLDOVEI
Facultatea: CIM
Catedra: Tehnica de Calcul
Referat
LUCRARE DE LABORATOR NR.1
Tema: Asamblarea si însusirea programelor.
A eleborat: st. grupei
A verificat: profesor
CHISINAU 2004
Scopul lucrarii
a) Însusirea ciclului întreg de asamblare a programelor.
b) Însusirea sistemelor de comenzi si metodele de adresare a operantilor procesoarelor în regim real cu ajutorul lui Turbo Debugger
2. Efectuarea lucrarii:
a1) Codul sursa al programului cu directive simplificate
de segmentare:
title Program_EXE
DOSSEG
.MODEL small
.STACK 512
; segmentul de date
.DATA
cr equ 10
lf equ 13
Lista1 DB 'Programul a fost efectuat',lf,cr,'$'
;segmentul de program (cod)
.CODE
;punctual de intrare
Program_Start:
mov ax,@DATA
mov ds,ax
mov dx,offset Lista1
mov ah,09h
int 21h
;sfirsim programul cu reluare
;in sistemul de operare
mov ah,4ch
int 21h
END Program_Start
a2) Teorie:
La culegerea codului sursa al programului de pe tastatura pot fi utilizate atît caracterele mari cît si mici;
Prima directiva din textul programului-Title -da posibilitatea de a-i acorda programului un titlu de text. Programul este alcatuit din trei segmente: de stiva, date si programe.
Segmentarea este realizata de directivele: .stack, .data si .code. Directiva .stack n aloca o zona avînd lungimea n si care este segmentul de stiva, ".stack 512" va aloca un segment de lungimea 512 octeti sau (200h).
Daca scriem o procedura ce va fi apelata dintr-un limbaj evaluat, atunci segmentul de stiva va fi declarat de catreprogramul apelator, ".DATA" ea semnalizeaza despre începutul segmentului de date initializate din program, dar mai initial e necesar de utilizat directive .Model . În DOS sunt posibile sase modele de memorie. Prin model noi întelegem de fapt un mod de dispunere în memoria RAM a segmentelor care alcatuiesc un program:
foarte mic- model tiny LP+LD+LS<64Ko
mic-model small LP<64Ko si LD+LS<64Ko
mediu-model medium 64Ko<=LP<1Mo si LD+LS<1Mo
compact-compact LP<64Ko si 64Ko<=LD+LS<1Mo
mare-large 64Ko<=LP<1Mo si 64Ko<=LD+LS<1Mo
foarte mare-huge ,
directiva .Model trebuie plasata înaintea directivelor .stack, .code, .data.
Directiva .code determina începutul codului de program. Inisial e necesar de utilizat directiva .Model pentru determinare modelului de memorie. La .code se poate de inclus si un parametru "nume" pentru model mare sau mediu. Simbolul @data primeste adresa segmentului de date.
Programul, de obicei, consta din proceduri ce sporeste gradul de concretizare a programului. Procedurile sunt anuntate de catre directiva PROC si sunt închise cu directiva ENDP. înaintea ambelor este indicat un parametru -numele procedurii.
De exemplu: DELAY PROC NEAR
;instrucsiunile procesorului
ret
DELAY ENDP
În continuare este utilizata una din functiile de serviciu al întreruperii 21h-09h (afisarea mesajului pe ecranul display-ului.). Aceasta functie necesita ca în registrul AH sa fie încarcat numarul functiei apelate:
mov ah,09h
în registru DS:DX se încarca adresa mesajului ce va fi afisat:
mov DX, offset Lista1
si este apelata întreruperea 21h:
int 21h
Mai mentionam faptul ca mesajul ce trebuie afisat cu ajutorul acestei functii trebuie sa se sfîrseasca cu caracterul ,$' .
Textul programului se încheie cu apelul functiei 4ch, ce îndeplineste functia de revenire la sistemul de operare DOS.
Directiva END din sfîrsitul programului sfîrseste asamblarea programului.
b1) Un program de tip .COM difera de cel de tip .EXE prin aceia ca contine numai un singur segment.
Structura si modelul de memorie a programului de tip .COM:
title Program_COM
.model Tiny ; modelul de memorie
.code
ORG 100h
start:
jmp Begin
;determinarea datelor
Lista2 db "programul a parcurs bine,bravo",13,10,'$'
;textul programului
Begin: mov ah,09h
mov dx,offset Lista2
int 21h
mov ah,4ch
int 21h
end start
b2) Teorie:
Programul contine un singur segment, adica el va ocupa în memorie nu mai mult de 64Kocteti, fiindca este modelul tiny. Directiva ORG 100h rezerva o zona de memorie de 256 octeti pentru adresa PSP. Daca este binevenit ca datele sa fie dizlocate la începutul programului, atunci înaintea lor trebuie înscrisa instructiunea de salt spre punctul real de intrare în program:
"jmp Begin"
c1) Procesul de dezvoltare-testare a unui program în limbajul de asamblare implementarea Borland:
Un program este alcatuit din mai multe linii sursa, unde ea este alcatuita din urmatorii atomi lexicali:
<Eticheta:> <Mnemonicul> <Operanzii> <;Comentariul>
<Eticheta:> este un nume symbolic asociat unei adrese de memorii.
<Mnemonicul> se refera la denumirea codului operatiei unei instructiuni, de exemplu: .code, .data, dosseg, etc.
<Operanzii> însotesc de regula aceste categorii enumerate mai sus. De pilda instructiunea mov p da doi operanzi:
"mov ax,cx"
iar directiva de mai jos un singur operand:
".Stack 512"
<;Comentariul> este ultimul din atomii lexical ce este construit dintr-o secventa de cuvinte-text explicativ-precedat de separatorul punct si virgula.
Acesti patru atomi lexicali nu trebuie sa fie toti prezenti pe o aceasi linie de program.
Se da un program în care apar toti atomii enumerati de mai sus:
dosseg
.model small
.stack 100h
.data
Lista_1 db 'Inveti la Universitate DOS-UL (DA/NU) ? $'
.code
Start:
mov ax,@data
mov ds,ax
;Functia DOS pentru afisare
;unui sir "print string"
mov ah,09h
mov dx,offset lista_1
int 21h
mov ah,4ch
int 21h
end Start
c2) Teorie:
Simbolul Start constituie o eticheta, iar lista_1 se numeste variabila. Limbajul accepta ca denumirea unui simbol sa fie alcatita din 1-31 caractere, primul caracter fiind o litera alfabetica sau unul din caracterele "_" , "@" , "?" sau "$".
Etichetele si variabilele pot fi folosite ca operanzi. Instructiunile
"mov dx,offset lista_1
mov ah,4ch"
contin fiecare operanzi.
Directiva .data precede segmentul de date, iar directiva .code anunta începutul segmentului de cod (program).
d) Ciclul de dezvoltare-testare:
Vorbim despre compilare (cum are loc executia programului):
Aici se vorbeste despre: asamblarea, editarea legaturilor si depenarea, specifice implementari Borland.
Procesul programului include unele etape:
-crearea fisierului sursa, cu extinderea numelui .ASM;
-asamblarea fisierului sursa cu ajutorul componentei TASM.EXE cu scopul obtinerii modului obiect;
-editarea legaturilor cu ajutorul editorului de legaturi, programul TLINK.EXE, cu scopul generarii modului executabil.
-depenarea programului executabil cu ajutorul depenatorului simbolic Turbo Debugger sau DEBUG.
Daca fisierul sursa al programului are numele Drochia.ASM atunci comanda de apelare a asamblorului va fi:
Tasm /la/zi/ Drochia
Controlul /la contribuie la obtinerea unui listing complet. TASM va genera un fisier obiect Drochia.OBJ. Controlul /zi asigura includerea informatiilor de depenare pentru depenatorul simbolic Turbo Debugger.
Editorul de legatura TLINK preia modulul Drochia.obj, îl combina cu unele componente din biblioteci si genereaza modulul axecutabil Drochia.exe. Pentru apelul editorului de legaturi va fi folosita comanda:
TLINK Drochia
Daca e necesar de creat un fisier de tip COM aceasta comanda o vom folosi în ansamblul cu optiunea /t:
TLINK/t Drochia
e1) Program de tip .EXE
title Program2_EXE
; Ciclul de dezvoltare al programului
; TASM /la/zi sergiu_A.asm
; tlink sergiu_A.obj
DOSSEG
.MODEL Small
.STACK 256
; capacitatea stivei 256 octeti
.DATA
stdout equ 1
mesaj db 'Studiem limbajul de asamblare'
db 'TurboAssambler 2.0',10,13
mes_len equ $-mesaj
.CODE
startprogram:
mov ax,@DATA
mov ds,ax
; afisam mesajul pe ecran
mov ah,40h
; apelul functiei pentru afisare
mov bx,stdout
; pe ecran
mov cx,mes_len
; lungimea mesajului
mov dx,offset mesaj
; adresa mesajului
int 21h
; inchiem programul
mov ah,4ch
int 21h
end startprogram
e2) Program de tip .COM
title Program2_COM
; Ciclul de dezvoltare al programului
; TASM /la/zi sergiu_B.asm
; tlink sergiu_B.obj
; td sergiu_B.exe
.MODEL Tiny
; model de memorie foarte mic
.code
org 100h
stdout equ 1
Start:
jmp Begin
mes db 'Programul de tip .COM functiomeaza',10,13
mes_len equ $-mes
Begin:
mov ax,40h
; apelul functiei pentru afisare
mov bx,stdout
; pe ecran
mov cx,mes_len
; lungimea mesajului
mov dx,offset mes
; adresa mesajului
int 21h
; inchiem programul
mov ah,4ch
int 21h
end Start
5. Concluzie:
Din lucrarea data noi am însusit ciclul întreg de asamblare a programelor, sistemele de comenzi si metodele de adresare a operantilor procesoarelor în regim real cu ajutorul lui Turbo Debugger
|