Vulpes

multiplied_asm

Nov 1st, 2011
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. extern printf
  2.  
  3. section     .bss
  4. vetor       resd        20      ; reserva 20 espaços de 4 bytes pros primeiros 20 numeros.
  5.  
  6.  
  7.  
  8. segment .data
  9.                 n_pt_s          db      `asm: x%.8X `,10,0
  10.  
  11. segment     .txt
  12.         global      multiplied
  13.  
  14. multiplied:                 ;; in C it will look like this: void multiplied(int number)
  15.         enter       0,0
  16.         mov     eax,        1
  17.         mov     ecx,        0      
  18.         mov     ebx,        [ebp+8] ;; only 1 argument in this function (number)
  19.         mov     edi,        vetor   ;; this is 20 dwords for taking in the geometric series of some
  20. mplied_loop:    call        mult_eax_ebx   
  21.         mov     [edi+04*ecx],   eax
  22.         inc     ecx    
  23.         cmp     ecx,        20
  24.         jge     mplied_done
  25.         jmp     mplied_loop
  26. mplied_done:    call        p_o_numbers
  27.         leave
  28.         ret
  29.  
  30.  
  31.  
  32.  
  33.  
  34. mult_eax_ebx:  
  35.         enter       4,0
  36.         pusha
  37.         mov     edx,        0
  38.         cmp     eax,        ebx
  39.         jg      m_ecxset
  40.         mov     ecx,        eax
  41.         mov     eax,        ebx
  42.         jmp     m_mult
  43. m_ecxset:   mov     ecx,        ebx
  44. m_mult:     dec     ecx
  45.         cmp     ecx,        0
  46.         jl      mee_done
  47.         add     edx,        eax
  48.         jmp     m_mult
  49. mee_done:   mov     [ebp-4],    edx
  50.         popa
  51.         mov     eax,        [ebp-4]
  52.         leave
  53.         ret
  54.  
  55.  
  56. p_o_numbers:   
  57.         mov     ecx,        0
  58. p_o_loop:   mov     eax,        [edi+04*ecx]
  59.         call        num_print
  60.         inc     ecx
  61.         cmp     ecx,        20
  62.         jge     p_o_done
  63.         jmp     p_o_loop
  64. p_o_done:   ret
  65.  
  66. num_print:      pusha
  67.  
  68.                 push            eax
  69.                 push            n_pt_s
  70.                        
  71.                 call            printf
  72.                 add             esp,    8  ;remove 2 pushes on stack
  73.                
  74.                 popa
  75.                 ret
Advertisement
Add Comment
Please, Sign In to add comment