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.