My Project
CS270 Fall 2014
Programming Assignment PA3: CS 270 Computer Organization

Programming Assignment PA3 - Bit Fields in C

Programming due Sunday, Sep. 14 at 5:00pm, no late submission.


This assignment has four objectives:
  1. to write a C program that manipulates the bits of integer values,
  2. to learn the C language operators for binary numbers,
  3. to build a more complex C program with multiple files,
  4. to see if you can follow directions!

About The Assignment

This assignment will serve as the basis for future assignments. You will learn how to use the C language operators for binary and (&), binary or (|), and binary not (~). You will also use the C language bit shift operators (<< and >>).

The goal of the assignment is to implement a small C library (5 functions) that enables getting and setting bits and fields in a binary number. This is especially useful for playing around with numerical representations, for example you could build a new floating point number from scratch by setting the sign bit, exponent, and mantissa, or you could analyze an existing floating point number by extracting the same fields. We will use it later in this class for understanding number representations and for converting LC3 assembly code into machine code. To get started, read the Getting Started section below and then study the documentation for field.h in the Files tab to understand the details of the assignment.


Getting Started

Perform the following steps
  1. Create a directory for this assignment. A general scheme might be to have a directory for each CS class you are taking and beneath that, a directory for each assignment. The name of the directory is arbitrary, but you may find it useful to name it for the assignment (e.g. PA3).
  2. Copy the four files into this directory. It is easiest to right click on the link, and use Save Link As ... to save the file in your directory. While you may use copy/paste to save the file, it may convert the required tabs of Makefile into spaces.
    1. field.h (do not modify)
    2. field.c (complete this file)
    3. Makefile (do not modify)
    4. testField.c (do not modify)
  3. Open a terminal and make sure you are in the directory you created. The cd command can be used for this.
  4. In the terminal type the 'make' command and you should see the following output:
    
        $ make
        gcc -g -std=c99 -Wall -c testField.c
        gcc -g  -Wall -c field.c
        gcc -g  testField.o field.o -o testField
        
  5. In the terminal type testField and read how to run the the program.
  6. In the terminal type testField bin 11259375 and you should see the output:
    
        dec: 11259375  hex: 0xABCDEF  bin: 0000-0000-1010-1011-1100-1101-1110-1111
        

You now have a functioning program. All the commands work, however, only bin will produce correct results at this point.


Completing the Code

Before attempting to write any of the functions of field.c, study the documentation in found in the files tab. Plan what you need to do before writing code.

The best way to complete the code is to follow a write/compile/test sequence. Do not attempt to write everything at once. Rather choose one function and do the following steps:

  1. Write one of the functions in field.c using your favorite editor.
  2. Save your changes and recompile field.c using make.
  3. You may find it convenient to work with both a terminal and editor window at the same time.
  4. Repeat steps 1 and 2 until there are no errors or warnings.
  5. Test the function you have been working on using the command line.
  6. Warning: Do not attempt to move on until you complete and thoroughly test a function!
  7. Repeat steps 1 thru 7 for the remaining functions.
  8. Relax, you are done with your assignment!

Specifications

Your program must meet the following specifications:

Grading Criteria

Submit the single file field.c to the Checkin tab on the course website, as you were shown in the recitation, and read the syllabus for the late policy (if necessary).

© 2014 CS270 Colorado State University. All Rights Reserved.