CMSC313, Computer Organization & Assembly Language Programming, Fall 2012
Project 2: Hex to Octal
Due: Thursday September 27, 2012, 11:59pm
Objective
The objective of this programming project is to practice designing
your own loops and branching code in assembly language and to gain
greater familiarity with the i386 instructions set.
Assignment
Write an assembly language program that prompts the user to enter
a string to be interpreted as an 8-digit hexadecimal number.
Your program must convert the ASCII string representation of this
hexadecimal number into a 32-bit unsigned binary number. Then, your
program must prepare and store an ASCII string for the octal (base 8)
representation of the same number and print it out.
Your program should generate an error if the input string contains
a character that is not 0 through 9 or A through F (except for the
linefeed at the end). You may disallow lower case 'a' through 'f'
in the hexadecimal representation. You may also assume that any
input string that does not have exactly 8 characters is invalid (not
counting the linefeed).
Example:
Enter an 8-digit hex number: A1B72FE3
Octal: 24155627743
Implementation Issues:
- The user input has a linefeed character at the end.
You do not want to consider this character when you convert from
a hexadecimal (ASCII) string to binary.
- It is OK to print out extra leading zeroes for the
octal representation of the number.
- You will find the shift left and shift right instructions
SHL and SHR especially useful.
- You should use the AND and OR instructions for masking.
- You should not use the MUL or IMUL instructions.
Multiplication is not necessary.
- Note that the character 'A' does not follow the digit
'9' in ASCII. Remember this when you convert the hex string to
binary.
- Eight hexadecimal digits is exactly 32-bits, but
32 bits isn't exactly 11 octal digits (that would be 33 bits).
You should use a special case to process the 2 most significant bits
when you convert from binary to octal (ASCII) string.
- You must use a loop to convert from a hexadecimal (ASCII)
string to binary and a separate loop to convert from binary to a octal
(ASCII) string. I.e., you must not just repeat code 8 times when
converting from hex to binary or repeat code 10 times when converting
from binary to octal.
Turning in your program
Use the UNIX script command to record some sample runs of your
program. You should use inputs that result in a variety of octal
string outputs and also inputs that demonstrate the error checking
features of your program.
Continue running script to record yourself using the
gdb debugger to examine the 32-bit memory location or the
32-bit register that holds the binary equivalent of the user input after
conversion. Print out the value in hexadecimal and in octal.
You should submit two files: 1) your assembly language program and
2) a typescript file of your sample runs and your gdb session.
The UNIX command to do this should look something like:
submit cs313 proj2 hex2oct.asm typescript
Last Modified:
22 Jul 2024 11:28:26 EDT
by
Richard Chang
to Fall 2012 CMSC 313 Homepage