CSC231 Exercises On Functions
Back to Weekly Schedule.
Note: For some exercises, highlight the white section on the right hand-side of each code section to see the solution.
Contents
Exercise 1
- Write a program that prints all the letters of the alphabet in a loop. All the characters appear on the same line. Do not use a function yet! Use ecx and loop to control the looping. Make your program print 1 letter per loop.
- use int 0x80 to print the character (which you'll store in a string).
Exercise 2
- Same exercise, but this time use a function that receives the character to be printed in al.
- Explore ways to save ecx in a temporary variable
- Explore alternative ways using the push and pop operations
Exercise 3
- Print all the characters on separate lines. You cannot use a library function for printing the 0x0a line-feed character.
- Explore a solution where the new-line character is printed at the same time the letter of the alphabet is printed.
- Explore a solution where you have a separate myPrintLn function that prints a new-line character.
Exercise 4
- What is the behavior of the stack, and the resulting values in the registers as this program is executing:
mov eax, 0x01234567
mov ebx, 0x89ABCDEF
xor ecx, ecx
push ax
pop cx
push ax
push bx
pop ecx
call next
next: pop ecx
Exercise 5
What is the behavior of this program?
mov eax, 0
mov ecx, 10
for: call func1
func1: add eax, 1
ret
;;; exit code
mov ebx, 0
mov eax, 1
int 0x80
|
|
Exercise 6
What is the behavior of this program? 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
|
|
Exercise 7
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
|
|
Exercise 8 (Push and Pop)
What are the numbers stored in eax and ebx when the loop terminates? If we assume that the default stack is 2 KB long, what is the largest number of times the loop can iterate before the stack overflows (trick question :-)?
mov eax, 0
mov ebx, 0
mov ecx, 10
for: push ebx
call func1
pop ebx
loop for
...
func1: add eax, 1
call func2
ret
func2: add ebx, 1
ret
|
|
Exercise 9
Same question, but now observe that we pop eax, not ebx...
mov eax, 0
mov ebx, 0
mov ecx, 10
for: push ebx
call func1
pop eax
loop for
...
func1: add eax, 1
call func2
ret
func2: add ebx, 1
ret
|
|
Exercise 10
What do these 2 code sections do?
push eax
mov eax, ebx
pop ebx
and xor eax, ebx
xor ebx, eax
xor eax, ebx
|
|