Advertisement
Guest User

tasm

a guest
Jan 15th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model small ;un segment de cod, un segment de date
  2. .stack ; inceputul segmentului de stiva;
  3. .data ; inceputul segmentului de date;
  4. a db 0ah, 10d, 10, 12q, 1010b ;a: 0Ah 0Ah 0Ah 0Ah 0Ah
  5. b dw 10Ah, 10Bh, 10Ch, ;b: 0Ah 01h 0Bh 01h 0Ch 01h )little endian
  6. c db ? ;c: --
  7. d db 3 dup(0Bh), 0Ch, 'abc' ;d: 0Bh 0Bh 0Bh 0Ch 61h 62h 63h
  8. e db 01h, 02h, 03h, 04h ;e: 01h 02h 03h 04h
  9. f dw 040Ah, 050Bh, 060Ch ;f: 0Ah 04h 0Bh 05h 0Ch 06h
  10. x dw ? ;x: -- --
  11. y dw ? ;y: -- --
  12. .code ;inceputul segmentului de cod
  13. start: ;o eticheta - marcheaza o pozitie (offset) in segment de cod
  14. mov ax,@data ;"data" e o constanta (operand imediat_ si nu poate fi atribuita direct unui registru segment
  15. mov ds, ax ;
  16. mov es, ax ;acum DS, ES pointeaza catre acelasi segment ax  
  17.      
  18. ;;;;;;;;;;;;;;; diverse instructiuni: ;;;;;;;;;;;;;;;
  19.  
  20. mov ax,f ;ax: 040Ah; nu merge mov ax,e (tipuri diferite)
  21. mov ah,e ;ax: 010Ah ("al" ramane 0Ah dinainte)
  22. mov ax, 00ffh ;al: FFh, ah:00h, ax:00FFh
  23. mov a,al ;a: FFh 0Ah 0Ah 0Ah 0Ah; nu merge mov b,al (tipuri diferite)
  24. mov byte ptr b,al ;b: FFh 01h 0Bh 01h 0Ch 01h
  25. mov ax,b ;ax:01FFh
  26. mov word ptr c,ax ;c: FFh d: 01h 0Bh 0Bh 0Ch 61h 62h 63h
  27.  
  28. ;;;;;;;;;;;;;;; exemple de adresare: ;;;;;;;;;;;;;;;
  29. ;adresa imediata: valoarea este inclusa la compilare in codul instructiunii
  30. mov ax,5 ;ax: 5d
  31. mov ax,seg b ; in ax ajunge adresa segmentului lui "b", adica segmentul de date
  32. mov bx,@data ;acum bx=ax
  33. mov ax,offset b ;in ax ajunge offsetul lui "b" in segment sau, adica 5 (00005h)
  34.    
  35. ;adresa prin registri: valoarea este intr-un registru
  36.  
  37. mov cx,ax
  38. mov dl,al
  39.  
  40. ;adresa directa: operangul este in memorie, in instriuctiune apare adresa sa
  41.  
  42. mov ax,b
  43. mov b,ax
  44. mov ax,word ptr a
  45. mov word ptr a,ax
  46. mov al,e+2 ;al: 03h (octetul aflat la distanta 2 de "e")
  47. mov e+2,al
  48. mov al,byte ptr f+3 ;al: 05h (octetul aflat la distanta 3 fata de "f")
  49. mov byte ptr f+3,al
  50. mov ax,word ptr e+1 ;ax: 0302h (wordul aflat la 1 octet distanta de "e")
  51. mov word ptr e+1,ax
  52.  
  53. ;adresa bazata: operandul este in memorie iar in instructiune apare adresa sa prin registrul BX sau BP;
  54. ;forma adresarii este "[reg]" sau "[reg+val]", unde "reg" este BX sau BP iar "val" o valoare inclusa la compilare in codul instructiunii
  55. ;daca nu precizam segmentul, el este implicit cel pointat de DS in cazul BX si cel pointat de SS in cazul BP;
  56. ;adresele bazare se folosesc pt a referi elementul unei structuri(BX sau BP va contine offsetul structurii iar "val" deplasamentul)
  57. ;elentului in cadrul ei
  58.  
  59. mov bx,offset f ;pregatire
  60. mov ax, [bx+2] ;ax: 050Bh (de la f pointat de BX se mai parcurg 2 octeti)
  61. mov ax,ds:[bx+2] ;la fel ca mai sus (ds este considerat implicit)
  62. mov ax,es:[bx+2] ;aici e acelasi lucru caci am facut inainte ca es = ds;
  63.                  ;daca "f" era untr-un segment pointat de es, altul decat cel pointat de ds, trebuie pecizat "mov ax,es:[bx+2]"
  64.                  ; caci "mov ax,[bx+2] foloseste implicit ds
  65. mov [bx+2],ax
  66. mov ds:[bx+2],ax
  67. mov es:[bx+2],ax
  68. push ax ;pregatire: in stiva este scris continului lui ax (050Bh), iar SP contine offsetul word-ului scris (deci al octetului low 0Bh)
  69.         ; in segmentul pointat de SS
  70. mov bp,sp ;pregatire
  71. mov al,[BP+1] ;al: 05h, deci ax:0505h
  72. mov bx,2     ;pregatire
  73. mov ax,[bx+offset f] ;la fel ca dupa primele doua instr. din acest grup
  74. ;adr. indexata: e la fel ca cea bazata, dar se foloseste SI, DI in loc de
  75. ; BX si BP; registrul segment implicit este in ambele cazuri DS;
  76. ;adr. indexate se folosesc pt. a referi elementele unui vector;
  77. mov si,offset f ;pregatire
  78. mov ax,[si+2] ;ax: 050Bh
  79. mov ax,ds:[si+2] ;idem
  80. mov [si+2],ax
  81. mov ds:[si+2],ax
  82. mov si,2 ;pregatire
  83. mov ax,[si+offset f] ;la fel ca dupa primele doua instr. din acest grup
  84. ;adr. bazata si indexata; operandul este in mem. iar in instructiune apare
  85. ; adresa sa prin intermediul unuia din reg. BX, BP si unuia din reg. SI, DI;
  86. ;forma adresarii este "[reg1+reg2]" sau "[reg1+reg2+val]", unde "reg1" este
  87. ; BX sau BP, reg2 este SI sau DI iar "val" o valoare inclusa la compilare in
  88. ; codul instructiunii;
  89. ;daca nu precizam segmentul, el este implicit cel pointat de DS in cazul BX
  90. ; si cel pointat de SS in cazul BP;
  91. ;adr. bazate si indexate se fol. pt. a referi elem. unei structuri din stiva
  92. ; sau dintr-un vector de structuri (BX sau BP va contine offsetul
  93. vectorului,
  94. ; SI sau DI va contine indicele in vector al structurii, iar "val"
  95. ; deplasamentul elementului in structura respectiva
  96. mov bx,offset f ;pregatire
  97. mov si,2
  98. mov al,byte ptr [bx+si+1] ;al: 05h
  99. mov al,ds:byte ptr [bx+si+1] ;idem
  100. mov ah, 4ch ;incarcam AH cu 4Ch si apelam intreruperea 21h (ea preia ca
  101. int 21h ; param. val. din AH); efect: reda controlul sistemului DOS
  102. end start ;sfarsitul programului; programul va incepe de la eticheta
  103.  ; mentionata aici, "start"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement