Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small ;un segment de cod, un segment de date
- .stack ; inceputul segmentului de stiva;
- .data ; inceputul segmentului de date;
- a db 0ah, 10d, 10, 12q, 1010b ;a: 0Ah 0Ah 0Ah 0Ah 0Ah
- b dw 10Ah, 10Bh, 10Ch, ;b: 0Ah 01h 0Bh 01h 0Ch 01h )little endian
- c db ? ;c: --
- d db 3 dup(0Bh), 0Ch, 'abc' ;d: 0Bh 0Bh 0Bh 0Ch 61h 62h 63h
- e db 01h, 02h, 03h, 04h ;e: 01h 02h 03h 04h
- f dw 040Ah, 050Bh, 060Ch ;f: 0Ah 04h 0Bh 05h 0Ch 06h
- x dw ? ;x: -- --
- y dw ? ;y: -- --
- .code ;inceputul segmentului de cod
- start: ;o eticheta - marcheaza o pozitie (offset) in segment de cod
- mov ax,@data ;"data" e o constanta (operand imediat_ si nu poate fi atribuita direct unui registru segment
- mov ds, ax ;
- mov es, ax ;acum DS, ES pointeaza catre acelasi segment ax
- ;;;;;;;;;;;;;;; diverse instructiuni: ;;;;;;;;;;;;;;;
- mov ax,f ;ax: 040Ah; nu merge mov ax,e (tipuri diferite)
- mov ah,e ;ax: 010Ah ("al" ramane 0Ah dinainte)
- mov ax, 00ffh ;al: FFh, ah:00h, ax:00FFh
- mov a,al ;a: FFh 0Ah 0Ah 0Ah 0Ah; nu merge mov b,al (tipuri diferite)
- mov byte ptr b,al ;b: FFh 01h 0Bh 01h 0Ch 01h
- mov ax,b ;ax:01FFh
- mov word ptr c,ax ;c: FFh d: 01h 0Bh 0Bh 0Ch 61h 62h 63h
- ;;;;;;;;;;;;;;; exemple de adresare: ;;;;;;;;;;;;;;;
- ;adresa imediata: valoarea este inclusa la compilare in codul instructiunii
- mov ax,5 ;ax: 5d
- mov ax,seg b ; in ax ajunge adresa segmentului lui "b", adica segmentul de date
- mov bx,@data ;acum bx=ax
- mov ax,offset b ;in ax ajunge offsetul lui "b" in segment sau, adica 5 (00005h)
- ;adresa prin registri: valoarea este intr-un registru
- mov cx,ax
- mov dl,al
- ;adresa directa: operangul este in memorie, in instriuctiune apare adresa sa
- mov ax,b
- mov b,ax
- mov ax,word ptr a
- mov word ptr a,ax
- mov al,e+2 ;al: 03h (octetul aflat la distanta 2 de "e")
- mov e+2,al
- mov al,byte ptr f+3 ;al: 05h (octetul aflat la distanta 3 fata de "f")
- mov byte ptr f+3,al
- mov ax,word ptr e+1 ;ax: 0302h (wordul aflat la 1 octet distanta de "e")
- mov word ptr e+1,ax
- ;adresa bazata: operandul este in memorie iar in instructiune apare adresa sa prin registrul BX sau BP;
- ;forma adresarii este "[reg]" sau "[reg+val]", unde "reg" este BX sau BP iar "val" o valoare inclusa la compilare in codul instructiunii
- ;daca nu precizam segmentul, el este implicit cel pointat de DS in cazul BX si cel pointat de SS in cazul BP;
- ;adresele bazare se folosesc pt a referi elementul unei structuri(BX sau BP va contine offsetul structurii iar "val" deplasamentul)
- ;elentului in cadrul ei
- mov bx,offset f ;pregatire
- mov ax, [bx+2] ;ax: 050Bh (de la f pointat de BX se mai parcurg 2 octeti)
- mov ax,ds:[bx+2] ;la fel ca mai sus (ds este considerat implicit)
- mov ax,es:[bx+2] ;aici e acelasi lucru caci am facut inainte ca es = ds;
- ;daca "f" era untr-un segment pointat de es, altul decat cel pointat de ds, trebuie pecizat "mov ax,es:[bx+2]"
- ; caci "mov ax,[bx+2] foloseste implicit ds
- mov [bx+2],ax
- mov ds:[bx+2],ax
- mov es:[bx+2],ax
- push ax ;pregatire: in stiva este scris continului lui ax (050Bh), iar SP contine offsetul word-ului scris (deci al octetului low 0Bh)
- ; in segmentul pointat de SS
- mov bp,sp ;pregatire
- mov al,[BP+1] ;al: 05h, deci ax:0505h
- mov bx,2 ;pregatire
- mov ax,[bx+offset f] ;la fel ca dupa primele doua instr. din acest grup
- ;adr. indexata: e la fel ca cea bazata, dar se foloseste SI, DI in loc de
- ; BX si BP; registrul segment implicit este in ambele cazuri DS;
- ;adr. indexate se folosesc pt. a referi elementele unui vector;
- mov si,offset f ;pregatire
- mov ax,[si+2] ;ax: 050Bh
- mov ax,ds:[si+2] ;idem
- mov [si+2],ax
- mov ds:[si+2],ax
- mov si,2 ;pregatire
- mov ax,[si+offset f] ;la fel ca dupa primele doua instr. din acest grup
- ;adr. bazata si indexata; operandul este in mem. iar in instructiune apare
- ; adresa sa prin intermediul unuia din reg. BX, BP si unuia din reg. SI, DI;
- ;forma adresarii este "[reg1+reg2]" sau "[reg1+reg2+val]", unde "reg1" este
- ; BX sau BP, reg2 este SI sau DI iar "val" o valoare inclusa la compilare in
- ; codul instructiunii;
- ;daca nu precizam segmentul, el este implicit cel pointat de DS in cazul BX
- ; si cel pointat de SS in cazul BP;
- ;adr. bazate si indexate se fol. pt. a referi elem. unei structuri din stiva
- ; sau dintr-un vector de structuri (BX sau BP va contine offsetul
- vectorului,
- ; SI sau DI va contine indicele in vector al structurii, iar "val"
- ; deplasamentul elementului in structura respectiva
- mov bx,offset f ;pregatire
- mov si,2
- mov al,byte ptr [bx+si+1] ;al: 05h
- mov al,ds:byte ptr [bx+si+1] ;idem
- mov ah, 4ch ;incarcam AH cu 4Ch si apelam intreruperea 21h (ea preia ca
- int 21h ; param. val. din AH); efect: reda controlul sistemului DOS
- end start ;sfarsitul programului; programul va incepe de la eticheta
- ; mentionata aici, "start"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement