Extras din laborator
Exemplu 1. Acest program prezinta citeva tehnici de adresare specifice procesoarelor din familia 8086/88:
title ex1
.model small
.stack 10h
.data
alfa dw 3 dup(?)
.code
begin:
mov ax,@data ;Initializarea registrului
mov ds,ax ;de segment ds
mov ax,17 ;Adresarea imediata a operandului sursa care este o constanta zecimala
mov ax,10001b ;Sursa este o constanta binara
mov ax,11h ;sursa este o constanta hexazecimala
mov alfa,ax ;Adresarea directa a operandului destinatie
mov cx,ax ;Interschimba continuturilor
mov ax,bx ;registrelor ax si bx
mov bx,cx
xchg ax,bx ;Acelasi effect cu secventa anterioara
mov si,2
mov alfa[si],ax ;Adresare relative cu registrul si a operandului destinatie
mov si,2
mov bx,offset alfa ;Adresarea imediata a operandului sursa (adresa variabilei alfa) ; ;datorita operandului OFFSET
lea bx,alfa ;Aceasta instructiune are acelasi effect cu cea anterioara cu toate ca sursa este ;adresata direct
mov cx,[bx][si] ;Adresare bazata indexata a sursei
mov cx,alfa+2 ;Aceasta instructiune are acelasi efect cu cea anterioara, sursa fiind insa adresata ;direct
mov cx,alfa[2] ;Notatii echivalente pentru
mov cx,[alfa+2] ;instructiunea anterioara
mov di,4
mov byte ptr [bx][di],55h ;Se va folosi aceasta varianta cind se doreste o adresare la nivel de ;octet
mov byte ptr alfa+4,55h ;Aceasta instructiune are acelasi efect cu cea anteriora, destinatiea fiind insa ;adresata direft. Deci alfa este definit cu DW, operatiea este realizata la nivel de ;octet.
mov si,2
mov bx,3
mov alfa[bx][si],33h ;Adresare bazata indexata relative a operandului destinatie
mov alfa[bx+si],33h ;Notatii echivalente pentru
mov [alfa+bx+si],33h ;instructiunea anterioara.
mov [bx][si].alfa,33h
mov [bx][si]+alfa,33h
end begin
Exemplu 2: Se considera un vector de trei componente fiecare componenta avind dimensiunea de un cuvint. Sa se permute circular elementele vectorului cu o pozitzii la stinga.
title ex2
dosseg
.model small
.stack 10h
.data
vect dw 100h,200h,300h
.code
start: mov ax,@data ;Initializarea registrului
mov ds,ax ;de segment ds
mov dx,vect ;Salvare in dx a primei componente a vectorului
mov ax,vect+2 ;Transfera a doua
mov vect,ax ;componenta in prima
mov ax,vect+4 ;Transfera a treia
mov vect+2,ax ;componenta in a doua
mov vect+4,dx ;Transfera prima componenta in ultima.
end start
Exemplu 3: Sa se incarce intr-o variabula pointer valoarea propriei adrese, sub forma de offset si segment.
title ex3
.model small
.stack 10h
.data
var_ptr dd ?
.code
begin: mov ax,@data ;Initializare registru
mov ds,ax ;de segment ds
mov ax,offset var_ptr ;In ax se muta adresa var_ptr
mov word ptr var_ptr,ax ;Continutul ax se depune pe operandul de tip cuvint
;Operatorul OFFSET selecteaza componenta de offset unei variabile
mov ax,seg var_ptr
mov word ptr var_ptr+2,ax
;Operatorul SEG selecteaza componenta de segment a adresei unei variabile. O transfera in ax dupa care continutul ;ax se depune pe operatorul de tip cuvint dublat.
end begin
Exemplu 4: Se considera un vector de trei componente cuvinte. Sa se introduca valoarea 55h in actetii superiosi ai elementelor vectorului.
title exe4
.model small
.stack 10h
.data
val equ 55h
vect dw 111h,222h,333h
.code
start:
mov ax,@data ;Initializarea registrului
mov ds,ax ;de segment ds
mov al,val ;Se incarca valoarea dorita in registrul al
mov byte ptr vect[1],al ;Se transfera
Preview document
Conținut arhivă zip
- Laborator 1 - Tehnici de Programare Assembler.doc