Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %include "asm_io.inc"
- segment .data
- sum dd 0
- segment .bss
- input resd 1
- ;
- ; algoritam
- ; i = 1;
- ; sum = 0;
- ; while( get_int(i, &input), input != 0 ) {
- ; sum += input;
- ; i++;
- ; }
- ; print_sum(num);
- segment .text
- global _asm_main
- _asm_main:
- enter 0,0 ; startna rutina
- pusha
- mov edx, 1 ; edx je ’i’ u pseudokodu
- while_loop:
- push edx ; sacuvaj i na steku
- push dword input ; sacuvaj adresu input na steku
- call uzmi_cijeli
- add esp, 8 ; ukloni i kao i &input sa steka
- mov eax, [input]
- cmp eax, 0
- je end_while
- add [sum], eax ; sum += input
- inc edx
- jmp short while_loop
- end_while:
- push dword [sum] ; stavi vrijednost sum na stek
- call print_sum
- pop ecx ; ukloni [sum] sa steka
- popa
- leave
- ret
- ; podprogram get_int
- ; Parametri (u redoslijedu na steku)
- ; redni broj ulaza (na [ebp + 12])
- ; adresa rijeci gdje se smjesta ulaz (na [ebp + 8])
- ; Napomene:
- ; vrijednosti eax i ebx su unistene
- segment .data
- prompt db ") Unesi cijeli broj (0 za izlaz):",0
- segment .text
- uzmi_cijeli:
- push ebp
- mov ebp, esp
- mov eax, [ebp + 12]
- call stampaj_sumu
- mov eax, prompt
- call print_string
- call read_int
- mov ebx, [ebp + 8]
- mov [ebx], eax ; Smjesti ulaz u memoriju
- pop ebp
- ret ; povratak iz posprograma
- ; Podprogram stampaj_sumu
- ; stampa sumu
- ; Parametar:
- ; suma koja se stampa (na [ebp+8])
- ; Napomena: brise vrijednost registra eax
- ;
- segment .data
- result db "Suma je ", 0
- segment .text
- stampaj_sumu
- push ebp
- mov ebp, esp
- mov eax, result
- call print_string
- mov eax, [ebp+8]
- call print_int
- call print_nl
- pop ebp
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement