Mechanisms in Procedures

x86-64(64bit) Stack

Region of memory, managed with stack discipline


Example

void multstore(long x, long y, long *dest){
	long t = mult2(x,y);
	*dest = t;
}
long mult2(long a, long b){
	long s = a*b;
	return s;
}

in Assembly:

0000000000400540 <multstore>:
  //x in %rdi, y in %rsi, dest in %rdx
	400540: push %rbx              
	400541: mov %rdx, %rbx         //dest를 rbx에 저장: rdx는 아래 호출에서 또 필요!
	400544: callq 400550<mult2>    //아래 함수 실행
  //t in %rax
	400549: mov %rax, (%rbx)       //계산된 a*b를 *dest에 저장
	40054c: pop %rbx
	40054d: retq
000000000040550 <mult2>
  //a in %rdi, b in %rsi
	400550: mov %rdi, %rax         //rax에 a가 들어감
	400553: imul %rsi, %rax        //a*b를 rax에 저장
  //s in %rax
	400557: retq

Stack Frame

Untitled

Untitled