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
|