duminică, 3 iulie 2016

Exemplu aplicaţii "asamblare".

 Aplicaţii
Se cere obţinerea fişierului executabil pentru următoarea porţiune de cod şi rularea apoi pas cu pas.
.model small
.stack 100
.data
tabel db 1, 2, 3, 4, 5, 10 dup(?)
tabel1 dw 1, 2, 3, 12H, 12
tabel2 dd 1, 2, 1234H
tabel3 dq 1, 2, 12345678H
tabel4 dt 1, 2,, 1234567890H
.code

start: mov ax, @data
 mov ds, ax
 mov ax, 14h ;adresare imediată
 mov ax, 14
 mov al, tabel ;adresare directă
 mov al, tabel[1] ;adresare directă
 mov ax, word ptr tabel ;adresare directă - operatorul ptr este necesar,
 mov ax, word ptr tabel[2] ;tabel fiind definit cu directiva DB
 mov bx, offset tabel
 mov al, [bx+1] ;adresare indirectă
 mov al, [bx] ;adresare indirectă
 mov bx, 5
 mov al, tabel[bx] ;adresare bazată
 mov si, 1
 mov al, [bx][si] ;adresare bazată şi indexată
 mov si, 6
 mov byte ptr [bx][si],2 ;adresare bazată şi indexată
 mov bp, offset tabel
 mov al, [bp] ;adresare bazată cu deplasament nul
 mov byte ptr ds:[bp][si][1], 7
 mov word ptr ds:[bp][si][1], 19H ;adresare bazată şi indexată
 mov ah, 4ch
 int 21h
 end start
Indicaţii
Pentru obţinerea fişierului executabil se va utiliza mediul Borland C sau Borland Pascal de dezvoltare a
programelor. Fazele de obţinere a programului executabil din fişierul ASCII salvat cu extensia *.asm sunt:
• asamblarea: tasm *.asm/zi/la
- zi este folosită pentru includerea opţiunilor de depanare;
- la este folosită pentru obţinerea unui fişier listing util în depanare;
• linkeditarea: tlink *.obj/v
- v este folosită pentru includerea opţiunilor de depanare;
• depanarea: td *.exe
După obţinerea fişierului executabil acesta va fi executat pas cu pas în mediul de depanare. Se va
vizualiza conţinutul memoriei (View/Dump) şi al registrelor (View/Registers) înainte şi după executarea
fiecărei instrucţiuni. Se va verifica pentru fiecare dată definită numărul octeţilor alocaţi în memorie şi
respectarea convenţiei Intel pentru memorarea acestora.
Probleme propuse spre rezolvare
1. În aplicaţia de mai sus, care sunt instrucţiunile care modifică conţinutul unei locaţii de memorie?
2. În aplicaţia de mai sus să se determine care este adresa la care se încarcă segmentul de date. Pentru
aceasta se vor executa primele două instrucţiuni ale programului.
3. Pentru aplicaţia de mai sus să se specifice pentru fiecare zonă a programului (date, cod, stivă) care este
adresa de segment şi care este adresa de offset la începutul execuţiei programului.
4. Pentru aplicaţia de mai sus să se determine care este adresa fizică a locaţiei de memorie la care se
memorează valoarea 5 din tabel. Fiecare student va determina această adresă pentru contextul de pe
calculatorul pe care lucrează.
5. Pentru aplicaţia de mai sus să se determine câţi octeţi s-au alocat pentru memorarea datelor. Să se
verifice şi numărând octeţii în fereastra Dump.
6. Specificaţi adresa efectivă şi adresa fizică a locaţiei de memorie modificată de instrucţiunile:
• mov byte ptr [bx][si], 2
• mov byte ptr ds:[bp][si][1], 7
• mov word ptr ds:[bp][si][1], 19H
7. Motivaţi apariţia valorii 00H (în loc de 01H) în registrul AL, în urma execuţiei instrucţiunii:


mov al, [bp].

Niciun comentariu:

Trimiteți un comentariu