Name | Section |
These lab exercises are intended to show you how to run a C program on the EECS instructional computers, to introduce you to the gdb debugger, and to get you thinking about the internal representations of numbers.
You need to have an EECS instructional account (cs61c-*) in order to do your lab work. Most importantly, you will need to log in to this account in order to enroll in the class. Don't forget to change your password once you have logged in.
Copy the contents of ~cs61c/labs/01 to a suitable location in your home directory.
$ mkdir ~/lab $ gcp -R ~cs61c/labs/01/ ~/lab
Fill in the blank in the following C program, also in output0.c, so that its output is a line containing 0. Don't change anything else in the program.
#include <stdio.h> int main ( ) { int n; n = _____; printf ("%c\n", n); return 0; }
To verify your solution, compile it and run the resulting binary:
$ gcc -c output0.c $ gcc output0.o -o output0 $ ./output0 0
Show your TA how you run output0. |
Compile your solution to exercise 1 with the "-g" option. This causes gcc to store information in the executable program for gdb to make sense of it. Then single-step through the whole program by:
Type help from within gdb to find out the commands to do these things.
Set the breakpoint at main, and show your TA how you run upto that breakpoint. | |
Show your TA how you single step a program. |
The program mysteryout apparently produces a blank line as output when it is executed. Find out what it really prints using the od (octal dump) command. Running "man od" will give you information on how it works. Print the output as hexadecimal numbers (hex). You will learn more about hex numbers in next lecture. Hint: The output is a sequence of 5 bytes. Therefore, it is best to look at the output byte by byte using -t switch of od.
Show the output of mysteryout in hexadecimal numbers. | |
Show the output of mysteryout in decimal numbers. |
In Friday's class, we will discuss number representation. In particular, we are going to discuss unsigned integers and two's complement, the almost ubiquitous format for signed integers. Look at biggestInt.c. You may wish to read through the comments but at this point it is not critical that you understand exactly how the program works. Basically, it is a C program that will tell you some useful information about certain C data types. It does this by exploiting the fact that C does not check for overflow and wrap around conditions. Compile and run the program and answer the following questions:
Answer to question 1 | |
Answer to question 2 | |
Answer to question 3 | |
Answer to question 4 |