Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 7 Department of Computer Science and Software Engineering University of Wisconsin-Platteville Stack Structure The stack grows “downwards” Doubleword alignment Register ESP points to the top of stack PUSH and POP manipulate the top of stack The stack can be used as a convenient place to: store data temporarily make subprogram calls Stack Instructions PUSH src src is doubleword push src onto the top of the stack Action: • ESP ESP – 4 • [ESP] src POP dest dest is doubleword pop top of stack into dst and logically remove it from the stack Action: • dest [ESP] • ESP ESP + 4 Example 1- push dword 1 ; 1 stored at 0FFCh, ESP = 0FFCh 2- push dword 2 ; 2 stored at 0FF8h, ESP = 0FF8h 3- push dword 3 ; 3 stored at 0FF4h, ESP = 0FF4h 4- pop eax ; EAX = 3, ESP = 0FF8h 5- pop ebx ; EBX = 2, ESP = 0FFCh 6- pop ecx ; ECX = 1, ESP = 1000h Function Call and Return The x86 uses stack to handle the function (subroutine) call Stack is used to capture return address and recover it parameter passing local variables CALL: call subroutine Syntax: CALL dest Operation (absolute call): PUSH EIP EIP dest RET: return from subroutine Syntax: RET Operation: POP EIP Call Site Caller is responsible for Pushing arguments on the stack from right to left Execute call instruction Pop arguments from stack after return Example Function Source code int sumOf(int x) { int a; a = x*x; a = a + x; return a; } Passing parameters on Stack Parameters are pushed onto the stack before the CALL instruction If the parameter’s size is less than a double word, it must be converted to a double word before being pushed Parameters must be removed from the stack after the CALL instruction Example: C++ : n = sumOf(17); Assembly: push dword 17 ; push parameter call sumOf add esp,4 ; remove parameter A single parameter on stack Callee Called function must do the following Save registers if necessary Allocate stack frame for local variables Execute function body Ensure result of non-void function is in EAX Restore any required registers if necessary Return to caller Local variables on the stack The stack can be used as a convenient location for local variables (subprogram data) Data not stored on the stack is using memory from the beginning of the program until the end of the program (C calls these types of variables global or static) Data stored on the stack only use memory when the subprogram they are defined for is active Problem Parameters and local variables can be access at any place in the subprogram Problem: Using push and pop makes such access very complex Solution: indirect addressing (e.g. [ESP+8], [ESP] ) it can be very error prone to use ESP when referencing data Solution: x86 supplies another stack register for indirect addressing : EBP • But, the original value of EBP must be restored at the end of the subprogram General subprogram form Example void cal_sum( int n, int *sump ) { int i , sum = 0; for ( i=1; i <= n; i++ ) sum += i; *sump = sum; }