CMPS 2240 Computer Architecture I: Assembly Language
Semester Project discussion...
The project was apparently difficult, or at least time consuming for casual
students. Some students tried hard, so I bumped the value of phases up by 10%.
This seemed fair and helped the class average rise to about 80% overall.
Final exam discussion...
The exam is here
The most difficult questions were: 6, 8, 9, 10, 12, 14, 16, 20
Discussion...
1. This was not difficult. Some careless errors were made.
2. The right-most bit is shifted out of the register, and lost.
The right-most bit is also referred to as the least significant bit.
Several students made careless errors here.
3. Apply a two's compliment to the number. Now you know the value, but the
value stored is the negative of that number. Less than half the class
remembered this. Half credit for positive answer. Generous.
4. jmp is not a command. jr returns to an address not necessarily a label.
jr can be used to jump long distances in program memory.
5. Simply requires a logical OR operation.
6. C. Nested memory allocation can be done. ???
Nested memory allocation is not really a thing. Allocating memory to nested
structures does not require a stack-frame. If you got the rest of the
question correct, I did not deduct points.
A stack frame does not speed up a program. If anything it runs a little
slower because of it.
7. sw $t0, 8($sp)
This is the only MIPS instruction that goes from left to right. It stores
a word of memory into the right operand. $sp is being de-referenced to get
an address, and the address is offset by 8 bytes. The value of $t0 is
written there. Because $sp is being used, it is considered a memory
location on the stack. $sp is the stack pointer.
8. The stack pointer is being de-referenced only and does not change.
9. Just before calling a function, a program should save important register
values that the function might change during its processing.
10. The requirement here was to show that you understand sign extension. Sign
extension means that all of the leading digits of a binary number indicate
the sign of the number. Because the number is being stored in a 32-bit
register, all the bits on the left must be set to indicate the sign.
11. Your answer will show that you understand hexadecimal numbers, and that
you know what hexadecimal format is.
12. 256 is the quantity of numbers, not the range.
After review, this question was not stated clearly enough. I will give all
students credit. Those who got it correct most likely found the answer
online. We did not discuss it much.
13. Two to the 15th power is correct, and one of the other answer was the
number 32768 which is also correct. 2 answers.
14. Each byte of memory can be addressed.
15. Most students got this. I gave extra credit to several students who did
2 pushes followed by 2 pops. This indicates knowledge of how a stack gives
pushed items back in reverse order when popping.
16. You end up with a 1 followed by 8 zeros. There were some careless errors
converting this binary number to decimal.
17. We did this in class together. ESI is being de-referenced, so it surely
holds an address. ESI is a 32-bit register, and you can only use a 32-bit
register to address memory in a 32-bit operating system.
18. $2 is the number 2. Moving left to right, the value is moved into the
register shown.
19. The question is asking what is the largest number that can be stored using
20 binary bits. Accepted answers were...
1MB, one megabyte, 2^20 bytes, 1,048,576 bytes, etc.
20. You must show the bit pattern of all 32 bits.
The sign bit
The exponent
The mantissa
Your work should have shown some calculation of the fractional part of
the binary value for 0.32.
Also showing that you know the exponent is 5, then add it to the bias.
Your answer should take this form...
x xxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
showing all 32 bits.