CSC231 Review Parameter Passing
--D. Thiebaut 10:31, 16 November 2012 (EST)
;;; reviewSumTwoVars.asm
;;; D. Thiebaut
;;;
;;; in C++
;;; ======
;;;
;;; int a = 2, b = 3, res = 0;
;;; sum( a, b, &res );
;;;
;;; void sum( int x, int y, int* z ) {
;;; *z = x + y;
;;; }
;;;
;;; same code in assembly: look below
;;;
%include "dumpRegs.asm"
section .data
a dd 2
b dd 3
res dd 0
section .text
global _start
_start:
;;; example of passing by value and by reference via registers
;;; ----------------------------------------------------------
mov eax, [a]
mov ebx, [b]
mov ecx, res
call sum1
mov edx, [res]
call dumpRegs
;;; example of passing by value and by reference via the stack
;;; ----------------------------------------------------------
mov dword[res], 0 ;reset what's in res
push dword [a]
push dword [b]
push dword res
call sum2
mov edx, [res]
call dumpRegs
;;; exit
mov eax, 1
mov ebx, 0
int 0x80
;;; ----------------------------------------------------------
;;; sum1: gets 2 values in eax and ecx, and stores their sum
;;; at dword [ecx]
;;; Does not modify registers
;;; ----------------------------------------------------------
sum1: mov [ecx], eax
add [ecx], ebx
ret
;;; ----------------------------------------------------------
;;; sum2: gets 2 values in the stack and a reference and
;;; stores the sum of the values at that reference.
;;; Does not modify registers
;;; ----------------------------------------------------------
sum2: push ebp
mov ebp, esp
push eax
push ebx
mov eax, [ebp + 12]
add eax, [ebp + 16]
mov ebx, [ebp + 8]
mov [ebx], eax
pop ebx
pop eax
pop ebp
ret 3*4