Totusi, cititi si NG:)

Instructiuni aritmetice

Inmultirea:
= op1 * op2, unde op1 si op2 sunt BYTE:
    - se pune op1 in AL
    - se exec instructiunea MUL op2
    - rezultatul e in AX (WORD)

= op1 * op2, unde op1 si op2 sunt WORD:
    - se pune op1 in AX
    - se exec. instructiunea MUL op2
    - rezultatul e in DX:AX

Impartirea:
= op1 / op2, unde op1 este WORD, op2 este BYTE:
    - se pune op1 in AX
    - se executa instructiunea DIV op2
    - catul este in AL, restul este in AH
= op1 / op2, unde op1 este DOUBLE WORD, op2 este WORD:
    - se pune op1 in DX:AX
    - se executa instructiunea DIV op2
    - catul este in AX restul este in DX
ATENTIE!!! - daca vreti sa impartiti byte la byte sau word la word, amintiti-va de CBW, respectiv CWD

LOOP:
Forma generala:

     eticheta_revenire:
         instructiuni
     LOOP eticheta_revenire
    
- in cazul general, se repeta instructiunile de CX ori (valoarea depusa dinainte in CX)
- daca se vrea o conditie de revenire mai detaliata, se pot utiliza variantele LOOPE (LOOP While Equal), LOOPNE (LOOP While Not Equal) (daca inainte de LOOP* avem o instructiune aritmetica, comparatie, s.a. - se iese din LOOP cand CX devine 0 sau cand se intalneste o "nepotrivire", la LOOPE, respectiv o "egalitate" pt. LOOPNE)
(pt. exemplificare, vezi exemplul din lab6)


Proceduri


nume_procedura PROC
    instructiuni...
    RET
nume_procedura ENDP

Apel: (in general)


CALL nume_procedura

Exemplu:

 

;Se da un sir de octeti sa se creeze un nou sir de aceasi lungime, care va

;contine doar acei octeti din primul sir care au numarul de biti 1 mai mare

;decat numarul de biti 0… si asa mai departe…

 

assume ds:data,cs:code

data segment

     a db 47h,65h,35h,41h

     d equ $-a

     r db d dup(0h)

data ends

code segment

start:

     ;incarcare registri cu adresele necesare…

 

     mov ax,data

     mov ds,ax

     mov es,ax

     mov si,offset a

     mov di,offset r

     mov cx,d

     cld

again:

     lodsb

 

     call numara

     mov bh,8

     sub bh,bl  ;bh=nr 0, bl=nr 1

     cmp bl,bh

    

loop again

 

     jmp sf

 

numara proc          ;numara bitii 1 din AL

     push cx         ;salvare CX

     mov cx,8

     xor bx,bx

iar:

     rol al,1

     adc bl,0

loop iar

;in BL s-a obtinut numarul de biti “1”

 

     pop cx          ;refacere CX

     ret  ;revenire din procedura…

numara endp

sf: 

     mov ax,4C00h

     int 21h

code ends

end start