Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .MODEL SMALL ;declaracion del modelo de memoria
- .DATA
- N DW 4
- RPTA DW 0
- NUM DB 10,13,' ',10,13,'$'
- .STACK ;Declare stack segment
- DB 128 DUP(?) ;reserve 128 bytes for stack
- .CODE
- mov ax,@data
- mov ds,ax ;inicializo el segmento de datos
- mov ax, N ;paso el valor de N al procedimiento
- call factorial ;ejecuto el procedimiento
- mov RPTA,bx ;salvo la respuesta en la memoria
- call display_BX ;muestra la respuesta en la pantalla
- mov ax,4C00h ;fin del programa
- int 21H
- ;procedimiento factorial
- factorial proc
- push ax ; salvo el registro que usare en el procedimiento
- cmp ax, 0 ; comparo n con cero
- je esCero
- dec ax ; ajusto parámetro para la invocación
- call factorial ; realizo la llamada recursiva
- mul bx ; calculo el paso recursivo
- mov bx,ax ; asigno el resultado del paso recursivo
- jmp fin
- esCero:
- mov bx,1 ; asigno el resultado del paso base
- fin:
- pop ax ; recupero el registro que salvado previamente para
- ; que al salir en el procedimiento tenga el mismo valor
- ; con el cual entro
- ret ; retorno del procedimiento
- endp factorial
- ;procedimiento que muestra en la pantalla el numero contenido en bx
- display_BX proc
- ; ponga aca su codigo
- ;mov bx,10
- mov ax,bx
- mov cx, 0
- mov bx, 10
- mascapo:
- mov dx, 0
- div bx ;divide by ten
- ; now ax <-- ax/10
- ; dx <-- ax % 10
- ; print dx
- ; this is one digit, which we have to convert to ASCII
- ; the print routine uses dx and ax, so let's push ax
- ; onto the stack. we clear dx at the beginning of the
- ; loop anyway, so we don't care if we much around with it
- push ax
- add dl, '0' ;convert dl to ascii
- pop ax ;restore ax
- push dx ;digits are in reversed order, must use stack
- inc cx ;remember how many digits we pushed to stack
- cmp ax, 0 ;if ax is zero, we can quit
- jnz mascapo
- ;cx is already set
- mov ah, 2 ;2 is the function number of output char in the DOS Services.
- brenda:
- pop dx ;restore digits from last to first
- int 21h ;calls DOS Services
- loop brenda
- ret
- endp display_BX
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement