~~TOC~~ \\ Corning Community College Computer Organization \\ End of Course Experience ======Rules====== Presented within will be various questions evaluating your knowledge and experience gained this semester. In places where you are able, the more you write and explain topics the better the chance you will have of receiving full credit (and alternatively, the more credit you will receive should something be incorrect). The questions on this experience are open resource with the exception of other individuals. In that respect, it is CLOSED PERSON. This means you are not to communicate with other people (either in the class or otherwise), in real life or electronically. Use your own knowledge, use your skills, and use your ability to access the allowed resources to aid you in coming up with your well thought out answers to each question. You are allowed, and expected, to ask me questions, so that a problem can be better clarified. There are three parts to this experience: * Part I: 8 questions, covering various concepts we've encountered during the semester. * Part II: 3 programs, involving some assembly language or pseudo-assembly language coding. * Part III: 5 questions, involving the course and various perspectives you got out of it. You are to do **all** questions. Submission is preferred in a plain text electronic format, such as in an e-mail with program attachments on Lab46. You have until 11:59:59pm (that's 23:59:59 in 24-hour time) Wednesday, May 18th, 2011 to complete and submit this to me. If desired, you are also welcome to come to the BDC, Room **B003** for questions/to work on projects on: * Tuesday, May 17th from 8am-2:15pm * Wednesday, May 18th from 11:15am-2:15pm Good luck! ======Part I: Questions====== =====Question 0x0: Registers===== What are registers? How do they differ from 'variables' in higher level language? =====Question 0x1: Registers===== What registers are available on the 8085 and 6502 CPUs? What are their storage capacities? =====Question 0x2: Registers===== Do registers have data types? =====Question 0x3: Stacks===== How does the notion of a stack work in regards to instructions and memory? Demonstrate the operation of a stack in assembly. =====Question 0x4: Branching===== What use do branches/jumps have in assembly? How do conditional jumps know when to act? =====Question 0x5: Flags/Status Register===== What are the status flags on the 8085 and 6502 CPUs? Pick one flag on one of the CPUs and explain how it works? (What events trigger it, and what states are set) =====Question 0x6: Indexing/Indirect access===== Explain the purpose of indexing/indirect memory access (you can explain it in terms of a particular CPU- 8085 or 6502 if you wish). =====Question 0x7: Registers vs. Memory===== What are some pros and cons of registers and memory (have at least 3 pros/cons for each). ======Part II: Programs====== =====Program 0x8: Adding without Addition===== Computers don't actually know how to do math. They just know how to do logic. Write an assembly program (pick your CPU; 8085 or 6502)/pseudo code that does the following: * has 2 values (via input, stored in memory, registers, whatever) * using logic, do the appropriate processing to get a resulting number that would be the sum * display/store the result This program doesn't have to deal with anything greater than 9 as a result. =====Program 0x9: Swapping values===== Write an assembly program/pseudo code that does the following: * has 2 values (doesn't have to numeric, but still single-digit) * swaps the values (so what is in location 1 is now in 2, and 2 in 1) * output/store the result =====Program 0xa: Uppercasing a letter===== Write an assembly program/pseudo code that does the following: * have a lowercase ASCII letter in some location (register, memory, whatever) * perform an operation to make it uppercase * display/store the result * this must be able to transparently work for ANY lowercase letter ======Part III: Wrapping up====== =====Question 0xb: The bottom-up approach===== We took a bottom-up approach to Computer Organization-- starting with some basic components (logic gates), building additional components (flip-flops), which led into registers, and built more and more logic on top of all these components to end up with our attempts at the various CPU simulators. * Pick an instruction on one of the CPUs (8085, 6502) and pick it apart, tracing its internal workings down to base component logic. * How does this bottom-up approach influence the coding design of the simulator? * If we were to approach this from a top-down approach (starting with implementing the instructions), what difficulties do you think would be encountered? =====Question 0xc: 8-bit vs. higher-bit===== With our experiences implementing the simulator this semester, take a moment to reflect upon the nature of the CPU. We purposefully chose to implement simpler 8-bit CPUs. * What design decisions would you reconsider if we were to implement a modern-day 32- or 64-bit CPU? * In terms of the simulator coding, what does the thought of implementing a 64-bit CPU mean to you? * Even though different CPUs have unique instruction sets, resources, and capabilities, explain how all conventional CPUs are alike. =====Question 0xd: The Philosophical Impact of Assembly Language===== It is said that, that by and large, most areas of programming will not require specific assembly language coding (there are exceptions-- compiler algorithm development, embedded systems programming, high-performance code customization). Just because it won't specifically be used, however, that does not mean that assembly language is a useless nor "dead" language. * Why is it important that a computing curriculum include assembly language? * What benefit does it possess for your understanding and programming ability? * How has it changed your perspective with regard to writing programs and algorithms? =====Question 0xe: The Assembly Language Paradox===== All things considered, Assembly Language is a rather simple language- the instructions are very direct and single purpose in nature. With this simplicity, however, comes work. * How is assembly language both simpler yet more work than a higher level language? * Why is the devil in the details? =====Question 0xf: Your Perspective===== After an exciting and intellectually challenging run, we're arriving at the end of this semester's journey. The course as we all experienced it, unfolds in a manner pertaining in part to how you respond to concepts and topics (do we need more time, can I crank it up a couple notches, etc.) so each semester and each class is entirely different from any other- because of each of you, and all of us, working together and learning together. So, searching deep down within your soul- balancing reason with emotion, and considering attendance and timeliness; answer me the following: * What grade do you feel you deserve for this course? * Why do you feel you deserve this mark? (Justify your answer based on your own perceived performance, not on need.) * How did you feel about the course? * Was it useful/interesting to you? * What was your least favorite aspect, and why? * What was something meaningful to you with respect to the course? Why does this stick out in your mind? * Any other comments or suggestions?