Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern printf
- section .bss
- vetor resd 20 ; reserva 20 espaços de 4 bytes pros primeiros 20 numeros.
- segment .data
- n_pt_s db `asm: x%.8X `,10,0
- segment .txt
- global multiplied
- multiplied: ;; in C it will look like this: void multiplied(int number)
- enter 0,0
- mov eax, 1
- mov ecx, 0
- mov ebx, [ebp+8] ;; only 1 argument in this function (number)
- mov edi, vetor ;; this is 20 dwords for taking in the geometric series of some
- mplied_loop: call mult_eax_ebx
- mov [edi+04*ecx], eax
- inc ecx
- cmp ecx, 20
- jge mplied_done
- jmp mplied_loop
- mplied_done: call p_o_numbers
- leave
- ret
- mult_eax_ebx:
- enter 4,0
- pusha
- mov edx, 0
- cmp eax, ebx
- jg m_ecxset
- mov ecx, eax
- mov eax, ebx
- jmp m_mult
- m_ecxset: mov ecx, ebx
- m_mult: dec ecx
- cmp ecx, 0
- jl mee_done
- add edx, eax
- jmp m_mult
- mee_done: mov [ebp-4], edx
- popa
- mov eax, [ebp-4]
- leave
- ret
- p_o_numbers:
- mov ecx, 0
- p_o_loop: mov eax, [edi+04*ecx]
- call num_print
- inc ecx
- cmp ecx, 20
- jge p_o_done
- jmp p_o_loop
- p_o_done: ret
- num_print: pusha
- push eax
- push n_pt_s
- call printf
- add esp, 8 ;remove 2 pushes on stack
- popa
- ret
Advertisement
Add Comment
Please, Sign In to add comment