Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data SEGMENT
- new_print DB 0Ah,0Dh,"$"
- data ENDS
- code SEGMENT
- ASSUME CS:code, DS:data
- rec PROC
- CMP BX, 0 ;verifica daca a ajuns cu contorul la 0
- JE GOBACK
- PUSH BX ;face push la valoarea curenta a contorului
- DEC BX ;decrementeaza contorul
- CALL rec ;apeleaza functia recursiv
- POP BX ; in cazul in care contorul ajunge la 0 se scot valorile salvate pe stiva
- INC DX ; aduna alt contor pe masura sunt scoase val din stiva
- ADD AX, DX ;face efectiv adunarea
- GOBACK: MOV BX, AX ;se copiaza rezultatul in bx
- RET
- rec ENDP
- ; print in hexa
- afis PROC
- MOV AL, BL
- MOV AH, 00h
- MOV CX, 2
- CONVERSIE:
- ROL AL, 4 ;primele 4 caractere se muta la stanga
- PUSH AX
- AND AL, 0Fh; procura primele 4(acum ultimele 4) caractere
- ADD AL, '0' ;converteste in ascii
- CMP AL, '9' ;compara cu 9
- JBE CIFRA ; verif daca e<10 si daca da, sare
- ADD AL, 7;daca nu trateaza cazul A-F
- CIFRA:
- MOV DL, AL ;da store la ASCII in buffer
- MOV AH, 02h
- INT 21h
- POP AX
- DEC CX ; DECREMENTEAZA
- LOOP CONVERSIE
- MOV DL, 0Ah
- MOV AH, 02h ;serviciu de afișare asociat întreruperii INT 21H – Display output
- INT 21h
- RET
- afis ENDP
- start:
- MOV AX, data
- MOV DS, AX
- MOV AX, 0
- MOV BX, 06h
- MOV DX, 0
- call rec
- call afis
- MOV AH, 4Ch
- INT 21h
- code ENDS
- END start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement