Introducere in limbajul de asamblare 8086 - laboratorul 1a
1. Utilizarea programelor tasm, tlink, td
tasm - este un asamblor, traduce un program scris in limbaj de asamblare in
format obiect (fisier.asm -> fisier.obj)
- lansat fara parametri furnizeaza sintaxa corecta
- exemplu de utilizare : tasm exemplu sau tasm exemplu.asm
tlink - editor de legaturi transforma un fisier din format obj in format executabil.
Poate sa grupeze mai multe fisiere obj intr-un singur program executabil.
- fis1.obj + fis2.obj + ... -> fisier.exe (sau fisier.com)
- lansat fara parametri furnizeaza sintaxa corecta
- ex. de utilizare : tlink exemplu sau tlink exemplu.obj
- optiuni mai importante: /v, /t
Odata obtinut programul executabil, acesta se poate lansa in executie.
td - este un depanator, un program care permite rularea pas cu pas a programelor
executabile.
- ex. de utilizare td exemplu sau td exemplu.exe
- TD permite doua tipuri de depanare:
1. Depanare la nivel de limbaj masina - aceasta este posibila pentru orice program
executabil, exe sau com.
2. Depanare la nivel de limbaj sursa - posibila pentru acele programe executabile
care includ informatii de depanare si pentru care este prezent fisierul sursa.
OBSERVATIE
Pentru depanare la nivel de limbaj masina vom folosi:
...> tasm exemplu
...> tlink exemplu
...> td exemplu
Pentru depanare la nivel de limbaj sursa vom folosi:
...> tasm /zi exemplu
...> tlink /v exemplu
...> td exemplu
Urmarirea programului cu Turbo Debugger se va face in fereastra CPU (se deschide
din meniul View|CPU).
Aici avem continutul registrilor si flagurilor procesorului si programul ce
se executa.Acesta este prezentat atat in limbaj de asamblare cat si direct in
cod masina (adica, octet cu octet, continutul memoriei), continutul segmentului
de date (in hexa) si continutul stivei.
Putem pozitiona zona vizibila din program, zona de date si stiva folosind comanda
Go to din meniul local al ferestrei (meniul activat cu Alt-F10).
De asemenea, putem afla sau modifica valoarea unei variabile, folosind fereastra
de dialog Evaluate/Modify (deschisa cu Ctrl-F4)
--------------------------------------------------------------------------------
2.Un exemplu minimal de program in limbaj de asamblare
; spunem asamblorului care sunt segmentele folosite de noi
ASSUME cs: code, ds:data
; data - segmentul de date in care vom defini variabilele
data SEGMENT
a db 7 ; a este un octet(byte)
b dw 10 ; b este un cuvant (word -2 bytes)
c db 3,5,6,1 ; c e un sir de octeti
data ENDS
;code - numele segmentului de cod
code SEGMENT
start:
mov ax,data ; pentru a sti care e segmentul de date, mutam in registrul ds
mov ds,ax ; adresa segmentului de date, si pentru ca nu putem face asta direct
folosim intermediar registrul ax
; .......
;aici avem instructiunile programului nostru
;........
mov ax,4C00h
int 21h
; e apelata intreruperea 21, cu ah incarcat cu 4C,adica sfarsitul executiei,
si se returneaza codul de eroare al=00, adica
; executie cu succes
code ENDS
END start
Pentru neclaritati privind instructiunile si directivele consultati Norton Guide-ul.
--------------------------------------------------------------------------------
3. Un exemplu concret : evaluarea expresiei aritmetice a*b+c.
; Sa se evalueze expresia a*b+c
; am considerat a si b ca fiind octeti iar c cuvant, rezultatul tinandu-l in rez , si acesta cuvant.
ASSUME cs:text_,ds:data_
data_ SEGMENT
a db 4
b db 4
c dw 123
rez dw ?
data_ ENDS
text_ SEGMENT
start:
mov ax, data_
mov ds, ax
; Evaluarea propriu-zisa a expresiei
mov al, a ; al = a
mul b ; ax = a*b
add ax, c ; ax = a*b+c
mov rez, ax ; rez= a*b+c
; Terminarea programului
mov ax, 4c00h
int 21h
text_ ENDS
END start
; cazuri de utilizare : a=3,b=5,c=12-->rez=27
--------------------------------------------------------------------------------
4. Cerinte la laborator:
1. Generati program executabil din sursa prezentata in mai sus.
2. Urmariti pas cu pas executia programului (in Turbo Debugger). Urmariti continutul
registrilor in acest timp.
3. Tot in executia pas cu pas a programului, urmariti continutul segmentului
de date. Pentru aceasta, activati (cu Shift-sageata jos) zona de date a ferestrei
CPU, activatati meniul local (Alt-F10) si dati comanda Go to. In fereastra ce
se deschide, dati ds:0. Urmariti primii octeti din segmentul de date pe parcursul
executiei programului.
4. Pozitionati afisarea zonei de date pe cs:0 Comparati cu ceea ce se afiseaza
in zona de cod.
5. Modificati programul in asa fel incat variabilele sa fie reprezentate pe
16 biti si initializati-le cu valori mai mari (de ordinul 1000). Repetati exercitiile
1-4.