Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC: Ejemplos de ASM

Ejemplos de ASM 8 months 2 weeks ago #8256

  • kirstein
  • kirstein's Avatar Topic Author
  • Offline
  • Profesor
  • Profesor
  • Posts: 2618
  • Karma: 666
  • Thank you received: 1535
Hola,

+ Un par de ejemplos de trozos de código.
+ Y el ejemplo de eco de clases.

Saludos,
Kirstein
b) Escriba un trozo de código que calcule el factorial.
   Vamos a trabajar con números de 16 bits.
   El número lo recibimos en el BX.
   La respuesta la vamos a dejar en el AX.
   Usaremos el CX como contador.
   

   ...
   mov cx, 1
   mov ax, 1
ciclo: cmp cx, bx
   ja salir
   mul cx
   inc cx
   jmp ciclo 
salir:
   ...
---------------------------------------------------------------
C) Escriba un trozo de código que calcule el Fibonacci de un N.
   Usaremos Conejas.   
   En DX se recibe el número al que queremos calcular el Fibonacci.
   En AX se generará la respuesta.
   Utilizaremos dos registros auxiliares para almacenar:
   El último     di
   El penúltimo  si
   utilizaremos al cx como contador.  
   
   ...
   mov di, 1
   mov si, 1   
   xor cx,cx ; mov cx, 0
ciclo: cmp cx, dx   
   jb salir
   mov ax, di ; ultimo
   add ax, si ; penultimo     
   mov si, di ; penúltimo pasa a ser el último
   mov di, ax ; último pasa a ser la suma de los dos anteriores
   inc cx ; cx le sumo 1.
   jmp ciclo    
salir:
   ...

0  1
1  1
2  2
3  3
4  5
5  8
6  13
7  21
 ; Este es el segundo programa de ASM
 ; Despliega N veces a la salida estándar lo que recibe en la línea de comandos


 datos segment

    rotulo db 128 dup ( ? )
    N dw 3

 datos ends

                  
 pila segment stack 'stack'

    dw 256 dup (?)

 pila ends


 codigo segment

    assume  cs:codigo, ds:datos, ss:pila

                                                                             
 inicio: mov ax, ds    ; guardo en el es la dirección del PSP
         mov es, ax

         mov ax, datos
         mov ds, ax

         mov ax, pila
         mov ss, ax

         mov si, 80h
         mov cl, byte ptr es:[si]
         xor ch, ch

         xor di, di

  ciclo: inc si
         mov al, byte ptr es:[si]
         mov byte ptr rotulo[di], al
         inc di
         loop ciclo


         mov byte ptr rotulo[di], 0Dh
         inc di
         mov byte ptr rotulo[di], 0Ah
         inc di
         mov byte ptr rotulo[di],'$'

         mov cx, N

         mov ah,09h
         lea dx, rotulo
 ciclo2: int 21h
         loop ciclo2

         mov ax, 4C00h
         int 21h

     
 codigo ends

 end inicio
The following user(s) said Thank You: davquiros, armorales

Please Identificarse to join the conversation.

Last Edit: by kirstein.
  • Page:
  • 1
  • Not Allowed: to create new topic.
  • Not Allowed: to reply.
  • Not Allowed: to add attachements.
  • Not Allowed: to edit your message.
Time to create page: 0.144 seconds
Powered by Kunena Forum