Advertisement
Adijata

vjezba 3

Oct 25th, 2014
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %include "asm_io.inc"
  2. segment .data
  3. sum dd  0
  4.  segment .bss
  5. input resd 1
  6. ;
  7. ; algoritam
  8. ; i = 1;
  9. ; sum = 0;
  10. ; while( get_int(i, &input),    input != 0 )    {
  11. ; sum += input;
  12. ; i++;
  13. ; }
  14. ; print_sum(num);
  15. segment .text
  16. global  _asm_main
  17. _asm_main:
  18.     enter   0,0 ; startna rutina
  19.     pusha
  20.     mov edx, 1  ; edx je ’i’ u pseudokodu
  21. while_loop:
  22.     push    edx ; sacuvaj i na steku
  23.     push    dword input ; sacuvaj adresu input na steku
  24.     call    uzmi_cijeli
  25.     add esp, 8  ; ukloni i kao i &input sa steka
  26.     mov eax, [input]
  27.     cmp eax, 0
  28.     je  end_while
  29.     add [sum], eax  ; sum += input
  30.     inc edx
  31.     jmp short while_loop
  32. end_while:
  33.     push    dword [sum] ; stavi vrijednost  sum na stek
  34.     call    print_sum
  35.     pop ecx ; ukloni [sum] sa steka
  36.     popa
  37.     leave
  38.     ret
  39. ; podprogram get_int
  40. ; Parametri (u redoslijedu na steku)
  41. ; redni broj ulaza (na [ebp + 12])
  42. ; adresa rijeci gdje se smjesta ulaz (na [ebp   + 8])
  43. ; Napomene:
  44. ; vrijednosti eax i ebx su unistene
  45. segment .data
  46. prompt db   ") Unesi cijeli broj (0 za izlaz):",0
  47. segment .text
  48. uzmi_cijeli:
  49.     push    ebp
  50.     mov ebp, esp
  51.     mov eax, [ebp + 12]
  52.     call    stampaj_sumu
  53.     mov eax, prompt
  54.     call    print_string
  55.     call    read_int
  56.     mov ebx, [ebp + 8]
  57.     mov [ebx], eax  ; Smjesti ulaz u memoriju
  58.     pop     ebp
  59.     ret     ; povratak  iz posprograma
  60.  
  61. ; Podprogram stampaj_sumu
  62. ; stampa sumu
  63. ; Parametar:
  64. ; suma koja se stampa (na [ebp+8])
  65. ; Napomena: brise vrijednost registra eax
  66. ;
  67. segment .data
  68. result db   "Suma je ", 0
  69. segment .text
  70.     stampaj_sumu
  71.     push    ebp
  72.     mov     ebp, esp
  73.     mov     eax, result
  74.     call    print_string
  75.     mov     eax, [ebp+8]
  76.     call    print_int
  77.     call    print_nl
  78.     pop     ebp
  79.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement