Передача результата процедуры

Для передачи результата процедуры обычно используется регистр EAX. Этот способ используется не только в программах на языке ассемблера, но и в программах на языке С++. Объекты, имеющие размер не более 8 байт, могут передаваться через регистровую пару EDX:EAX. Вещественные числа передаются через вершину стека вещественных регистров. Если эти способы не подходят, то следует передать в качестве параметра адрес ячейки памяти, куда будет записан результат.

; Передача параметров через стек, возврат результата через регистр EAX

.686

.model flat, c

option casemap: none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

includelib \masm32\lib\kernel32.lib

.data

a dd 76

b dd -8

c dd?

.code

program:

push b; Кладём параметры в стек

push a

call Procedure

add esp, 8; Освобождаем 8 байт стека

mov c, eax; c = a – b

push 0

call ExitProcess

Procedure proc

mov eax, [esp + 4]; Заносим в регистр EAX первый параметр

mov edx, [esp + 8]; Заносим в регистр EDX второй параметр

sub eax, edx; В регистре EAX получилась разность параметров

ret

Procedure endp

end program

; Передача параметров через стек, возврат результата по адресу

.686

.model flat, c

option casemap: none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

includelib \masm32\lib\kernel32.lib

.data

a dd 76

b dd -8

c dd?

.code

program:

push offset c; Кладём в стек адрес переменной, куда будет записан результат

push b

push a

call Procedure

add esp, 8; Освобождаем 8 байт стека

push 0

call ExitProcess

Procedure proc

mov eax, [esp + 4]; Заносим в регистр EAX первый параметр

mov edx, [esp + 8]; Заносим в регистр EDX второй параметр

sub eax, edx; В регистре EAX получилась разность параметров

mov edx, [esp + 12]; Заносим в регистр EDX третий параметр – адрес результата

mov [edx], eax; Записываем результат по адресу в регистре EDX

ret

Procedure endp

end program


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: