Assignment 2 Assembly
Assignment 2 Assembly
Part A: Bitwise Logical and Shift Operations Create a SPARC assembly language program that extracts a bit-field from the contents of register %l0. The position of the rightmost bit of the field is indicated in register %l1, and the number of bits in the field is indicated in register %l2. The extracted field should be put into register %l3, right-shifted so that field starts at bit 0; any bits outside of the extracted field should be set to 0. Structure your program so that it operates on 3 separate inputs, each with different input data, field positions, and field widths. Your TA will provide the inputs to work with. Do not hard code any bit masks; your program should create them using the appropriate bitwise operations. Optimize your program, eliminating nop instructions where possible. Do not use m4. Use printf() to display in hexadecimal the contents of registers %l0, %l1, %l2 before each extraction, and %l3 afterwards. Also run your program in gdb, displaying the contents of registers %l0, %l1, %l2 before each extraction, and %l3 afterwards. Capture the gdb session using script. On a separate piece of paper, show the bit pattern for each hexadecimal number for the registers %l0 and %l3, circling the extracted field. Part B: Integer Multiplication using Add and Shift Operations Write a SPARC assembly language program that implements the following integer multiplication algorithm:
negative = multiplier >= 0 ? 0 : 1; product = 0; for (i = 0; i < 32; i++) { if (multiplier & 1) product += multiplicand; (product and multiplier registers combined as a unit) >> 1; } if (negative) product -= multiplicand;
Structure your program so that it shows 3 different multiplications: the first should multiply two positive numbers together, the second should multiply a positive number by a negative number, and the third should multiply two negative numbers together. Your TA will provide the input data to work with. Since we dont yet know how to create subroutines, you can simply cut and paste the multiplication code to do each multiplication. Use printf() to display in hexadecimal the contents of the product, multiplier and multiplicand registers before and after each multiplication. Optimize your program, eliminating nop instructions where possible. Do not use m4. Also run the program in gdb, displaying the contents of key registers as the program executes; you should show that the algorithm is working as expected. Capture the gdb session using script. On a separate piece of paper, show the bit pattern (binary number) for each hexadecimal number, and its decimal equivalent (in other words, show the binary and decimal values of the multiplier, multiplicand, and product). Other Requirements Make sure your code is properly formatted into columns, is readable and fully documented, and includes identifying information at the top of each file. You must comment each line of assembly
code. Your code should also be well designed: make sure it is well organized, clear, and concise. Your TA will specify the inputs to use for the above two programs. New Skills Needed for this Assignment: Use of bitwise logical and shift operations Use of branching and condition code tests Understanding of hexadecimal and binary numbers
Submit the following: 1. A hard copy of both programs. Make sure your name, UNIX login name, ID, tutorial number, and TA's name appear on the title page. 2. A hard copy of the paper showing the bit patterns for both programs (and the equivalent decimal numbers for Part B). 3. Your assembly source code files for both programs and 2 scripts via electronic submission. Use the submit command to submit electronically. The TA will assemble and run your programs to test them. Name your programs a2p1.s, and a2p2.s, and your scripts script1 and script2.
Computing Machinery I
Assignment 2 Grading
Student:__________________________________________ Part A: Correct extraction of bit field Use of bit masking Use of shift instructions Shows 3 separate extractions Display to screen Optimization Separate paper showing bit patterns Part B: Correct calculation of product Use of bit masking Use of shift instructions Shows 3 separate multiplies Display to screen Optimization Separate paper showing bit patterns 2 Scripts showing gdb session Complete documentation and commenting Design quality Total 4 4 ______ 2 2 3 2 1 3 ______ 4 2 44 ______ ______ ___________% ______ ______ ______ ______ ______ ______ 4 2 2 3 2 1 3 ______ ______ ______ ______ ______ ______ ______