Advertisement
juanjo12x

L_Pg2

Sep 5th, 2014
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .MODEL SMALL ;declaracion del modelo de memoria
  2. .DATA
  3.   N DW 4
  4.   RPTA DW 0
  5.   NUM DB 10,13,' ',10,13,'$'
  6. .STACK ;Declare stack segment
  7.   DB 128 DUP(?) ;reserve 128 bytes for stack
  8. .CODE
  9.   mov ax,@data
  10.   mov ds,ax ;inicializo el segmento de datos
  11.  
  12.   mov ax, N ;paso el valor de N al procedimiento
  13.   call factorial ;ejecuto el procedimiento
  14.   mov RPTA,bx ;salvo la respuesta en la memoria
  15.  
  16.   call display_BX ;muestra la respuesta en la pantalla
  17.  
  18.   mov ax,4C00h ;fin del programa
  19.   int 21H
  20.  ;procedimiento factorial
  21.  factorial proc
  22.   push ax ; salvo el registro que usare en el procedimiento
  23.   cmp ax, 0 ; comparo n con cero
  24.   je esCero
  25.   dec ax ; ajusto parámetro para la invocación
  26.   call factorial ; realizo la llamada recursiva
  27.   mul bx ; calculo el paso recursivo
  28.   mov bx,ax ; asigno el resultado del paso recursivo
  29.   jmp fin
  30.   esCero:
  31.    mov bx,1 ; asigno el resultado del paso base
  32.    fin:
  33.    pop ax ; recupero el registro que salvado previamente para
  34.  ; que al salir en el procedimiento tenga el mismo valor
  35. ; con el cual entro
  36.  ret ; retorno del procedimiento
  37. endp factorial
  38.  
  39.  ;procedimiento que muestra en la pantalla el numero contenido en bx
  40.  display_BX proc
  41.  ; ponga aca su codigo
  42.     ;mov bx,10
  43.     mov ax,bx
  44.     mov cx, 0
  45.     mov bx, 10
  46. mascapo:
  47.     mov dx, 0
  48.     div bx                          ;divide by ten
  49.  
  50.     ; now ax <-- ax/10
  51.     ;     dx <-- ax % 10
  52.  
  53.     ; print dx
  54.     ; this is one digit, which we have to convert to ASCII
  55.     ; the print routine uses dx and ax, so let's push ax
  56.     ; onto the stack. we clear dx at the beginning of the
  57.     ; loop anyway, so we don't care if we much around with it
  58.  
  59.     push ax
  60.    add dl, '0'                     ;convert dl to ascii
  61.  
  62.     pop ax                          ;restore ax
  63.     push dx                         ;digits are in reversed order, must use stack
  64.     inc cx                          ;remember how many digits we pushed to stack
  65.     cmp ax, 0                       ;if ax is zero, we can quit
  66.     jnz mascapo
  67.  
  68.     ;cx is already set
  69.     mov ah, 2                       ;2 is the function number of output char in the DOS Services.
  70. brenda:
  71.     pop dx                          ;restore digits from last to first
  72.     int 21h                         ;calls DOS Services
  73.     loop brenda
  74.  
  75.  ret
  76.  endp display_BX
  77. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement