Monday, May 2, 2011

To find nCr

Share Orkut
n & r should be less than 8, since from 9! onwards we need more than 16 bits to store it.
print macro msg lea dx,msg mov ah,09h int 21h endm read macro n,j1,j2 mov cx,0ah j1:mov ah,01h int 21h cmp al,0dh je j2 sub al,30h mov bl,al mov ax,n mul cx xor bh,bh add ax,bx mov n,ax jmp j1 j2 :nop endm .model small .stack 100h .data msg1 db 10,13,'Enter n: $' msg2 db 10,13,'Enter r: $' msg3 db 'C$' msg4 db ' = $' err db 10,13,'Math Error. n should not be less than r $' newline db 10,13,' $' n dw 0 r dw 0 nfact dw 0 rfact dw 0 nminur dw 0 temp dw 0 .code main proc mov ax,@data mov ds,ax print msg1 ;reading n read n,jump1,jump2 print msg2 ;reading n read r,jump11,jump21 ;find n! mov ax,n mov temp,ax call fact mov nfact,ax ;find r! mov ax,r mov temp,ax call fact mov rfact,ax ;find (n-r)! mov ax,n sub ax,r jc error1 mov temp,ax call fact mov nminur,ax ;find n!/(r!*(n-r)!) mov ax,rfact mov bx,nminur mul bx mov bx,ax mov ax,nfact div bx mov temp,ax print newline mov ax,n call printmul print msg3 mov ax,r call printmul print msg4 mov ax,temp jump3:call printmul jmp finish error1:print err finish:mov ah,4ch int 21h main endp printmul proc mov bx,000ah xor cx,cx ;push into stack l2:xor dx,dx div bx push dx inc cx cmp ax,0000h jne l2 ;pop from stack l3:pop dx add dl,30h mov ah,02h int 21h loop l3 ret printmul endp fact proc mov ax,01 loop1:cmp temp,00 je ju12 mul temp dec temp jmp loop1 ju12:ret fact endp end

No comments:

Post a Comment