abc Asembler - elektronski priručnik
XVII dio Procedure

Procedure

Procedure ili potprogrami (subroutines) su veoma važne u asemblerskom jeziku, pošto su programi u asemblerskom jeziku obično obimni po veličini. Procedure se identifikuju po imenu. Nakon imena, opisano je tijelo procedure koje izvršava dobro definisani posao. Kraj procedure je indiciran naredbom vraćanja (return).

Sintaksa
Slijedi sintaksa koja definiše proceduru:

proc_name:
     procedure body
     ...
     ret

Procedura se poziva iz druge funkcije pomoću CALL instrukcije. CALL instrukcija mora imati ime pozvane procedure kao argument, kao što je prikazano ovdje:

CALL   proc_name

Pozvana procedura vraća kontrolu pozivajućoj proceduri pomoću RET instrukcije.

Primjer
Napisaćemo vrlo jednostavnu proceduru imena sum koja sabira varijable spremljene u ECX i EDX registru i koja vraća sumu u EAX registar:

section    .text
      global _start 	;must be declared for using gcc
_start: 			    ;tell linker entry point
        mov   ecx, '4'
        sub   ecx, '0'
        mov   edx, '5'
        sub   edx, '0'
        call  sum 		;call sum procedure
        mov   [res], eax
        mov   ecx, msg
        mov   edx, len
        mov   ebx, 1 	;file descriptor (stdout)
        mov   eax, 4 	;system call number (sys_write)
        int   0x80   	;call kernel
        mov   ecx, res
        mov   edx, 1
        mov   ebx, 1 	;file descriptor (stdout)
        mov   eax, 4 	;system call number (sys_write)
        int   0x80 	    ;call kernel
        mov   eax, 1 	;system call number (sys_exit)
        int   0x80    	;call kernel
sum:
        mov   eax, ecx
        add   eax, edx
        add   eax, '0'
        ret
section    .data
msg  db   "Suma je:",  0xA, 0xD
len    equ $- msg
segment  .bss
res  resb  1

Kada se gore navedeni kod kompajlira i izvrši, on će proizvesti sljedeći rezultat:

Suma je:
9

Nizovi (arrays)    <    Index    >    Stek kao struktura podataka