Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;CALCULATRICE ASM v0.2
- org 100h
- ;Parametres entre
- mov ax, 43
- mov bx, 3
- mov cx, 6
- ;rapasser le binaire dans la pile en decimal ?
- ;0= Non | 1= Oui
- mov conVB,0
- ;Enregistrement A et B dans la pile
- push ax
- push bx
- ;MENU
- cmp cx,1
- je addit
- cmp cx,2
- je soust
- cmp cx,3
- je multi
- cmp cx,4
- je divis
- cmp cx,5
- je puiss
- cmp cx,6
- je binai
- ;FIN MENU
- ;OPERATIONS
- addit: ;bloc addition
- call addition
- jmp fin
- soust: ;bloc soustraction
- call soustraction
- jmp fin
- multi: ;bloc multiplication
- call multiplication
- jmp fin
- divis: ;bloc division
- call division
- jmp fin
- puiss: ;bloc puissance
- call puissance
- jmp fin
- binai:;bloc binaire
- call binaire
- jmp fin
- decim: ;bloc decimal
- call decimal
- jmp fin
- ;FINOPERATIONS
- fin:
- ret
- ;-------------------Fin ORG----------------------
- ; ;-----------;
- ; ;PROCEDURES ;
- ; ;-----------;
- ;------------------------------------------------
- addition proc
- ;bloc stack
- mov bp,sp
- mov ax,[bp+4]
- mov bx,[bp+2]
- ;fin bloc stack
- add ax,bx ;ax=ax+bx
- ret
- addition endp
- ;-------------------------------------------------
- soustraction proc
- ;bloc stack
- mov bp,sp
- mov ax,[bp+4]
- mov bx,[bp+2]
- ;fin bloc stack
- sub ax,bx ;ax=ax-bx
- ret
- soustraction endp
- ;-------------------------------------------------
- multiplication proc
- ;bloc stack
- mov bp,sp
- mov ax,[bp+4]
- mov bx,[bp+2]
- ;fin bloc stack
- cmp ax,bx;Test ax>bx
- jg alt ;si oui aller altern
- ;multiplication si ax<bx
- mov cx, ax
- mov ax,0
- debut: add ax,bx
- loop debut
- jmp finmulti
- ;Fin cas1
- ;multiplication si ax>bx
- alt:mov cx, bx
- mov bx,0
- debu2: add bx,ax
- loop debu2
- mov ax,bx
- ;fin cas2
- finmulti:ret
- multiplication endp
- ;-------------------------------------------------
- division proc
- ;bloc stack
- mov bp,sp
- mov ax,[bp+4]
- mov bx,[bp+2]
- ;fin bloc stack
- div bx ;ax=ax/bx
- ret
- division endp
- ;-------------------------------------------------
- puissance proc
- ;bloc stack
- mov bp,sp
- mov ax,[bp+4]
- mov bx,[bp+2]
- ;fin bloc stack
- ;test puissance particulieres.
- cmp bx,0
- je puisZero ;Car x^0=1 dans tous les cas
- cmp bx,1
- je finpuiss ;Car x^1=x dans tous les cas
- cmp bx,2
- je puisDEUX ;Probleme de boucle sinon
- ;fin test
- ;preparation
- dec bx ;decrementation bx car sinon il fait la boucle 1x en trop
- push bx;enregistrement de bx pour compteur doubleB
- mov dx,ax;sauvegarde ax en dx
- mov cx,ax;maj compteur
- mov bx,ax;maj additioneur
- mov ax,0 ;mise a 0 pour l'addition
- jmp start;passage directe a la bcl multi
- doubleB:
- push cx ;enregistrement de la valeur du compteur doubleB
- mov cx,dx ;maj compteur pour boucle "start"
- mov ax,0 ;mise a 0
- ;boucle "start" ajoute bx a ax ,cx fois (bcl multi)
- start:
- add ax,bx
- loop start
- mov bx,ax;passage du resultat en additioneur
- pop cx ;sortie valeur compteur doubleB
- loop doubleB
- jmp finpuiss
- ;CAS PARTICULIERS
- puisZero: mov ax,1
- jmp finpuiss
- puisDEUX: mov cx,ax;maj compteur
- mov bx,ax;maj additioneur
- mov ax,0 ;mise a 0 pour l'addition
- startD:
- add ax,bx
- loop startD
- jmp finpuiss
- ;FINCASPARTICULIERS
- finpuiss: ret
- puissance endp
- ;-------------------------------------------------
- binaire proc
- ;bloc stack
- mov bp,sp
- mov ax,[bp+4]
- mov bx,[bp+2]
- ;fin bloc stack
- ;preparation
- mov bx,2
- mov cx,0
- mov dx,0
- startdec:
- ;On verifie si ax != 0
- cmp al,0
- je findec
- diviz:
- mov dx,0
- div bx ;on divise ax soit ax/2
- inc cl;on incremente cl
- ;On verifie s'il y a un reste
- cmp dx,0
- je jumpE
- cmp dx,1
- je jumpNE
- jumpE: push 0
- jmp startdec
- jumpNE:push 1
- jmp startdec
- ;fin "startdec"
- findec:
- cmp ah,0
- jne diviz
- ;Binaire dans la pile
- cmp conVB,1
- call decimal
- mov sp,bp ;remet le pointeur sur l'adresse
- ret
- binaire endp
- ;--------------------------
- decimal proc
- mov dx,0
- mov bx,2;binaire = ^2
- add sp,2
- ;cx est egal au nombre de 0 et 1
- passDecimal:pop ax
- push cx ;on sors de la pile
- puissA:
- mul bx
- loop puissA
- pop cx
- add resultat,al
- loop passDecimal
- mov sp,bp ;on remet le stack pointer sur l'addresse de "binaire"
- ret
- decimal endp
- ;--------------------------
- ; VARIABLES
- conVB DB ?
- resultat DB ?
Add Comment
Please, Sign In to add comment