Back to Weekly Schedule.
Exercise 1
What is the behavior of this loop?
|
|
mov eax, 0
mov ecx, 10
for: call func1
...
loop for
func1: add eax, 1
ret
|
The loop goes 10 times and the function is called 10 times, adding 1 to eax every time. Eax ends with 10 in it.
|
Exercise 2
Same question:
|
|
mov eax, 0
mov ecx, 10
for: call func1
...
loop for
func1: sub ecx, 1
ret
|
The function decrements ecx by 1 every time through the loop. The loop is going to go twice as fast.
|
Exercise 3
Draw the stack as the processor executes this program:
|
|
mov eax, 0
mov ebx, 0
mov ecx, 10
for: call func1
...
loop for
func1: add eax, 1
call func2
ret
func2: add ebx, 1
ret
|
Just go through the motion and draw the stack. The return address of the instruction after the call gets pushed in the stack every time the processor executes a call. It is popped out of the stack every time the processor executes a ret.
|
Exercise 4
Same question, but now observe that the programmer forgot the ret instruction at the end of the first function.
mov eax, 0
mov ebx, 0
mov ecx, 10
for: call func1
...
loop for
func1: add eax, 1
call func2
func2: add ebx, 1
ret