Assignment 6: Floating Point
CSE 30: Computer Organization and Systems, Fall 2023
代寫Instructors: Paul Cao and Bryan Chin
代寫Due: Tuesday Nov 14, 2023
代寫Please read over the entire assignment before starting to get a sense of what you will need to
代寫get done in the next week. REMEMBER: Everyone procrastinates but it is important to know
代寫that you are procrastinating and still leave yourself enough time to finish. Start early, start often.
代寫You MUST run the assignment on the pi-cluster. You HAVE to SSH: You will not be able to
代寫compile or run the assignment otherwise.
代寫ACADEMIC INTEGRITY REMINDER: you should do this assignment on your own.
代寫If you work with others, be sure to cite them in your submission. Never copy from
代寫others.
代寫Please read the FAQ and search the existing questions on Edstem before asking for help.
代寫This reduces the load on the teaching staff, and clutter/duplicate questions on Edstem.
代寫Version updates:
代寫● 1.0 [Nov 8] Final Draft
代寫● 1.1 [Nov 8] Fix midpoint due date Sunday -> Friday
代寫● 1.2 [Nov 9] Fix: somehexnums.txt 0x8000 to 0x4000 since it is 15 bit representation.
代寫● 1.3 [Nov 9] Clarify: style won’t be regraded during resubmission
代寫● 1.4 [Nov 10] Prerelease: Midpoint answers are visible before due date.
代寫● 1.5 [Nov 12] Fix git clone link, fix # of bits in mantissas in page 4 table to be 8 bits
代寫Table of Contents
代寫1. Learning Goals
代寫2. Assignment Overview
代寫3. Getting Started
代寫4. How the Program Works
代寫5. Program Implementation
代寫a. Functions to Implement
代寫b. Developing Your Code
代寫c. Testing Your Code
代寫6. Submission and Grading
代寫a. Submitting
代寫b. Grading Breakdown [50 pts]
代寫Learning Goals
代寫● Programming in ARM assembly
代寫○ Bit masking
代寫○ Function call
代寫○ Branching
代寫● Working with floating point numbers
代寫● Coordinating a program with both ARM assembly and C code (you aren’t writing in C)
代寫Assignment Overview
代寫At the peak of time where pirates and bounty hunters are in the air. Porco Rosso makes his
代寫rounds in the vast ocean to capture any air pirates that disturb the peace near Adriano hotel.
代寫On the radio, Porco Rosso tunes in to listen to his next job, however he discovers an issue. The
代寫coordinates given out are in 15-bit floating-point format. He doesn’t know how to convert from
代寫this format and only knows the standardized IEEE 754 format. Gina only has devices that are
代寫written in ARM so Porco plans to rely on your assembly skills to create the conversion function.
代寫Help him write and test code to convert the coordinates into IEEE format!
代寫A note about representing number literals
代寫In the number 8’b1101_0011:
代寫● 8 is the number of binary bits in this number, in base-10.
代寫● b means binary. Other formats are d for decimal, o for octal, and h for hexadecimal.
代寫● To conserve space, we may also write the bits in hexadecimal, 0xd3 is equivalent to
代寫8’b1101_0011.
代寫● _ is a spacer character that is only there to make it easier to read. It has no numerical
代寫meaning. A '_' is usually placed every four digits.
代寫You can read more about where this number literal representation comes from here. (Note:
代寫Anything past the first slide is irrelevant to this course, but will be useful in CSE 140 & 141.)
代寫The 15-bit FP Format
代寫The 15-bit floating-point format is similar to, but not the same as, the one we studied in class. It
代寫has a sign bit, 6 bits of biased exponent, a bias value of 31 (base-10), and 8 bits of mantissa.
代寫Note that we include special cases to represent infinities and subnormal numbers.
代寫The following figure illustrates the bit assignments:
代寫FP Format (15-bit)
代寫sign
代寫(1 bit)
代寫exponent
代寫(6 bits, bias = 31)
代寫mantissa
代寫(8 bits)
代寫Points to note:
代寫1. There is an implied “1.” in front of the mantissa, unless it is a subnormal number.
代寫2. Subnormal numbers have an exponent field of 6’b000000 which represents 2 and
代寫−30
代寫implies a “0.” in front of the mantissa.
代寫3. “Infinite” numbers have an exponent field equal to 6’b111111 with ANY value in the
代寫mantissa.
代寫The following table shows how to interpret the exponent fields and mantissa fields.
代寫Exponent/mantissa represents Notes
代寫111111/mmmmmmm infinity infinity
代寫111110/mmmmmmm 2^31 x 1.mmmmmmm normal number
代寫111100/mmmmmmm 2^29 x 1.mmmmmmm normal number
代寫111000/mmmmmmm 2^25 x 1.mmmmmmm normal number
代寫100000/mmmmmmm 2^1 x 1.mmmmmmm normal number
代寫011111/mmmmmmm 2^0 x 1.mmmmmmm normal number
代寫001111/mmmmmmm 2^-16 x 1.mmmmmmm normal number
代寫000011/mmmmmmm 2^-28 x 1.mmmmmmm normal number
代寫000001/mmmmmmm 2^-30 x 1.mmmmmmm normal number
代寫000000/mmmmmmm 2^-30 x 0.mmmmmmm subnormal number
代寫(no leading 1)
代寫```````````````````````````````````````````````````````````````````````````````````````````````````````````
代寫Exponent bits are shown in purple below to help you distinguish it from the sign bit and
代寫mantissa.
代寫Number Encoding in 15-bits
代寫+0.0 15’b000_0000_0000_0000 (15 bits of 0 in binary)
代寫-0.0 15’b100_0000_0000_0000
代寫Number `15-Bit
代寫Representation
代寫Binary
代寫Representation
代寫Base-10
代寫Representation
代寫+∞
代寫15’b011_1111_xxxx_xxxx +Inf
代寫-∞
代寫15’b111_1111_xxxx_xxxx -Inf
代寫Most positive # 15’b011_1110_1111_1111 2^31
代寫*9’b1.11111111
代寫4286578688
代寫Smallest positive
代寫#
代寫(subnormal)
代寫15’b000_0000_0000_0001 2^-30
代寫*9’b0.00000001
代寫2^-38 ≅
代寫3.637978807e-12
代寫Most negative # 15’b111_1110_1111_1111 -2^31
代寫*9’b1.11111111
代寫-4286578688
代寫Smallest
代寫negative #
代寫(subnormal)
代寫15’b100_0000_0000_0001 -2^-30
代寫*9’b0.00000001
代寫-2^-38 ≅
代寫-3.637978807e-1
代寫2
代寫IEEE-754 Single Precision Format
代寫IEEE-754 Single Precision Format
代寫sign
代寫(1 bit)
代寫exponent
代寫(8 bits, bias = 127)
代寫mantissa
代寫(23 bits)
代寫Subnorms
代寫The bias for the IEEE Format is 127 (base-10) and the format uses an implied “1.” for normal
代寫numbers, as usual. The smallest possible exponent is -126 represented by 8’b0000_0001 for
代寫normal numbers, whereas 8’b0000_0000 represents subnormal numbers. For subnormal
代寫numbers, we prepend the mantissa with “0.” instead of “1.” similar to how subnormal numbers
代寫are evaluated in our 15-bit FP format.
代寫Infinities
代寫In IEEE single precision, any exponent of all 1’s (8’b1111_1111) represents a number too
代寫large to represent. For example, 0xff80_0000 is a number with a negative sign bit, all 1’s for
代寫the exponent and all 0’s for the mantissa. This represents negative infinity (-Inf). Similarly,
代寫0x7f80_0000 represents positive infinity (+Inf). Note that the mantissa bits are all 0. Non-0
代寫mantissa bits represent another kind of IEEE special number (NaN, “not a number”) which is not
代寫required in this assignment since our 15-bit floating point format does not use NaN.
代寫Summary of Select Conversions
代寫FP 15-bit FP IEEE-754 Single
代寫+0 15’b000_0000_0000_0000 0x00000000
代寫-0 15’b100_0000_0000_0000 0x80000000
代寫2^-38 15’b000_0000_0000_0001 0x2c800000
代寫-2^-38 15’b100_0000_0000_0001 0xac800000
代寫4286578688 15’b011_1110_1111_1111 0x4f7f8000
代寫-4286578688 15’b111_1110_1111_1111 0xcf7f8000
代寫+Inf 15’b011_1111_xxxx_xxxx 0x7f800000
代寫-Inf 15’b111_1111_xxxx_xxxx 0xff800000
代寫Getting Started
代寫Developing Your Program
代寫For this class, you MUST compile and run your programs on the pi-cluster.
代寫Need help or instructions? See the Edstem FAQ. (Do NOT wait until the end to try this. There
代寫will be limited or no ETS support on the weekends!)
代寫We’ve provided you with the starter code at the following link:
代寫https://github.com/cse30-fa23/hw6-starter
代寫1. Download the files in the repository.
代寫a. You can either use
代寫git clone https://github.com/cse30-fa23/hw6-starter.git
代寫directly from pi-cluster, or download the repo locally and scp the folder to
代寫pi-cluster if that doesn’t work.
代寫2. Fill out the fields in the README before turning in.
代寫Running Your Program
代寫We’ve provided you with a Makefile so compiling your program should be easy!
代寫Additionally, the reference solution binary will be placed on Saturday 11/11 morning at:
代寫/home/linux/ieng6/cs30fa23/public/bin/fpconvert-a6-ref
代寫Makefile: The Makefile provided will create a fpconvert executable from the source files
代寫provided. Compile it by typing make into the terminal. Run make clean to remove files
代寫generated by make.
代寫How the Program Works
代寫Your program will take a filename as an argument and read it in. This file is a txt file storing the
代寫15 bit FP numbers. The main function (implemented for you in main.c) will parse the input file
代寫and call the fpconvert function which you will implement in assembly on each 15-bit FP
代寫number to convert it into IEEE floating point format, and print the result to stdout.
代寫Once you compiled the program with make, you can run it as follows:
代寫./fpconvert somehexnums.txt
代寫where somehexnums.txt is the name of the input txt file that holds the hex numbers you
代寫want to convert.
代寫Input Guarantees
代寫● fpconvert will be only given valid 15-bit wide numbers.
代寫Program Implementation
代寫Files to Edit
代寫You need to edit fpconvert.S and convert_inf.S
代寫Functions to Implement
代寫You will need to implement 1 function within fpconvert.S:
代寫● fpconvert(n): This is the function that will do most of the floating-point conversion.
代寫○ Argument: n the 15-bit FP number to convert
代寫○ Returns: n’s equivalent IEEE 754 single precision representation.
代寫○ If n is ±infinity, you MUST call convert_infinity(n) to do the conversion
代寫instead.
代寫You need to implement 1 function within convert_inf.S
代寫● convert_infinity(n):
代寫○ Argument: n the 15-bit FP number to convert (should only be ±infinity)
代寫○ Returns: the FP number’s equivalent IEEE 754 single precision representation.
代寫NOTE:
代寫● 32-bit ARM stores arguments passed into the function in registers r0-r3; n only
代寫symbolizes that the function takes in one argument. You cannot directly use n in your
代寫assembly program to refer to the first argument.
代寫● As registers are all 32-bits wide, our 15-bit floating point format will always only occupy
代寫the least significant 15 bits, the upper 17 bits will be padded with 0’s.
代寫● Return value should be stored in r0.
代寫Calling a Function in ARM
代寫To call a function in ARM, you must use the bl “branch and link” instruction. It is not sufficient
代寫or correct to use a regular branch instruction. Without branch-and-link, the return operations in
代寫the epilogue of the function will not work and return as expected.
代寫Developing Your Code
代寫Development Process
代寫To make development easier, you should first implement the conversion of normal numbers.
代寫Test your code on a range of normal numbers (smallest, largest). For the smallest numbers, you
代寫should familiarize yourself with their scientific notation representations. You can also check the
代寫IEEE column of the output to see if it matches the expected IEEE version. Additionally, be sure
代寫to check the special cases of +0.0, -0.0, +Inf, and -Inf.
代寫After thoroughly testing the functionality of your code, you should consider subnormal numbers.
代寫Subnormal numbers are represented when the exponent field is 6’b000000.
代寫After implementing the conversion of subnormal numbers, your code should be able to produce
代寫all of the values in the Summary of Select Conversions table.
代寫Development Tips
代寫Before you write assembly code, think about the algorithm.
代寫● How are the 15-bit format and the 32-bit IEEE format similar and different?
代寫● How do I break down the 15-bit format into the 3 individual fields?
代寫● How does each field convert from the 15-bit format to the 32-bit IEEE format?
代寫You should find the bitwise instructions useful for this assignment. In particular, you will want to
代寫make use of bitmasks.
代寫While an immediate can only be 8 bits wide, you can use left and right shifts to move the mask
代寫into the right position. For example, if you need the bitmask 0xFF00, you can shift the
代寫immediate 0xFF left by 8 bits.
代寫Testing your Code
代寫To run your code you need a txt file that holds the hex numbers that you want to convert,
代寫separated by a new line.
代寫Example text input file, named somehexnums.txt:
代寫0x0000
代寫0x4000
代寫0x3f00
代寫0x7f00
代寫0x3eff
代寫0x0001
代寫0x7eff
代寫0x4001
代寫NOTE: you should make sure each hexadecimal number only has four digits, otherwise you
代寫may get unexpected results.
代寫Checking For Exact Output Match
代寫A common technique is to redirect the outputs to files and compare against the reference
代寫solution
代寫1
代寫:
代寫./your-program args > output; our-reference args > ref
代寫diff -s output ref
代寫This command will output lines that differ with a < or > in front to tell which file the line came
代寫from.
代寫Debugging Tips
代寫The public autograder will only printf test some features. DO NOT RELY ON THE
代寫AUTOGRADER. (Many CSE 30 students have been burned by this.) Test your code using your
代寫own test cases!
代寫GDB treats ARM assembly labels as functions except those that begin with the prefix “.L”. If
代寫you want to use GDB to debug your ARM code, you will need to prefix your labels with “.L”.
代寫1 You might want to check out vimdiff on the pi-cluster (https://www.tutorialspoint.com/vim/vim_diff.htm).
代寫Thus, ARM code for the given C if statement would look like the code snippet on the right, rather
代寫than the snippet on the left.
代寫if (r5 == 99) {
代寫r3 = r3 + 2;
代寫} else {
代寫r3 = r3 + 3;
代寫}
代寫r4 = r4 - 1;
代寫GDB will not recognize labels: GDB will recognize labels:
代寫cmp r5, 99
代寫bne else
代寫add r3, r3, 2
代寫B end_if
代寫else:
代寫add r3, r3, 3
代寫end_if:
代寫sub r4, r4, 1
代寫cmp r5, 99
代寫bne .Lelse
代寫add r3, r3, 2
代寫b .Lend_if
代寫.Lelse:
代寫add r3, r3, 3
代寫.Lend_if:
代寫sub r4, r4, 1
代寫Allowed ARM Instructions
代寫You are only allowed to use the instructions provided in the ARM ISA Green Card. Failure to
代寫comply will result in a score of 0 on the assignment.
代寫Style Requirements
代寫Reading raw assembly is hard and debugging will be nigh impossible if you don’t put comments!
代寫To encourage you to make your life easier, style will be worth 2 points in this assignment on a
代寫holistic readable/unreadable basis. You will get full style points as long as your code is
代寫reasonably commented to be readable (so that someone who doesn’t know ARM can still
代寫roughly understand what it’s doing), so don’t worry if you can’t get all the details right. However,
代寫you will get no style points if it’s not (e.g. very inconsistent indentation, sparse or unreadable
代寫comments). In addition, staff won't be able to provide any assistance other than styling
代寫advice unless code is readable. For reference, here is the Style Guideline for ARM assembly.
代寫We strongly recommend you to use comments after each instruction to help describe what
代寫step occurs like what is done in the style guide. Note: style will not be graded for
代寫resubmission.
代寫Midpoint (5 Points)
代寫This part of the assignment is due earlier than the full assignment, on
代寫Friday 11/10 at 11:59 pm PST. There are no late submissions on the
代寫Midpoint.
代寫Complete the Gradescope assignment “HW6: Checkpoint”, an Online Assignment that is done
代寫entirely through Gradescope. This assignment consists of a few quiz questions and a
代寫free-response question where you will document your algorithm in plain English or C code.
代寫Discuss your implementations of the following functions: fpconvert and
代寫convert_infinity. Your fpconvert should call convert_infinity when appropriate.
代寫Submission and Grading
代寫Submitting
代寫1. Submit your files to Gradescope under the assignment titled “HW6 (Coding): Floating
代寫Point”. You will submit ONLY the following files:
代寫fpconvert.S
代寫convert_inf.S
代寫README.md
代寫Submission will open by Saturday morning. You should test your code extensively on
代寫pi-cluster before submitting to gradescope.
代寫You can upload multiple files to Gradescope by holding CTRL (⌘ on a Mac) while you
代寫are clicking the files. You can also hold SHIFT to select all files between a start point
代寫and an endpoint.
代寫Alternatively, you can place all files in a folder and upload the folder to the assignment.
代寫Gradescope will upload all files in the folder. You can also zip all of the files and upload
代寫the .zip to the assignment. Ensure that the files you submit are not in a nested folder.
代寫2. After submitting, the autograder will run a few tests:
代寫a. Check that all required files were submitted.
代寫b. Check that fpconvert.S and convert_inf.S compiles.
代寫c. Runs some sanity tests on the resulting fpconvert executable.
代寫Grading Breakdown [5 + 45 points]
代寫Make sure to check the autograder output after submitting! We will be running
代寫additional tests after the deadline passes to determine your final grade. Also, throughout this
代寫course, make sure to write your own test cases. It is bad practice to rely on the minimal
代寫public autograder tests as this is an insufficient test of your program.
代寫To encourage you to write your own tests, we are not providing any public tests that have
代寫not already been detailed in this writeup.
代寫The assignment will be graded out of 50 points and will be allocated as follows:
代寫● Midpoint writeup: 5 points. This part of the assignment is due earlier than the full
代寫assignment, on Friday 11/10. Complete the Gradescope assignment “Homework 6:
代寫Checkpoint”.
代寫● Code compiles with no warnings: 1 point
代寫● Style: 2 points
代寫● Public tests with the provided examples.
代寫● Private tests with hidden test cases.
代寫NOTE: The tests expect an EXACT output match with the reference binary. There will be
代寫NO partial credit for any differences in the output. Test your code - do NOT rely on the
代寫autograder for program validation.
代寫Make sure your assignment compiles correctly through the provided Makefile on the
代寫pi-cluster without warnings. Any assignment that does not compile will receive 0 credit.
代寫[Optional] Bells and Whistles
代寫2
代寫(epsilon points)
代寫Write a new function add_fp(a, b) that takes in 2 numbers a and b that are in the 15-bit
代寫floating point format. It should add these 2 numbers together and return the value. However,
代寫what makes this complicated is that a and b may not have the same exponent! You’ll need to
代寫make the exponents the same first before you can add them.
代寫This part of the assignment will NOT be graded - and does not need to be submitted. It is
代寫completely up to you to try writing a program which achieves the above output.
代寫The Bells and Whistles component may be submitted to a separate Gradescope assignment:
代寫Homework 6 Optional: Bells and Whistles.
代寫2
代寫In our experience, students like extra credit. However, we find that extra credit isn't used by students
代寫who need it the most. Thus, we have an extra credit where the number of points assigned is epsilon,
代寫where epsilon is a very small number [0, 1).
代寫代寫
請加QQ:99515681 或郵箱:99515681@qq.com WX:codehelp
代寫代寫