~~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 all the various concepts we've covered throughout the semester. * Part II: 4 questions, involving some assembly language coding. * Part III: 4 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) Thursday, May 20th, 2010 to complete and submit this to me. If desired, our scheduled finals week meeting time is: **Thursday, May 20th, 2010** from **11:15am-2:15pm** in **C002** (our regular room). Good luck! =====Part I: Questions===== ====Question 0x0: System Calls==== What is a 'System Call'? And why are they important? Show an example of a system call. ====Question 0x1: Registers==== What are registers? How do they differ from 'variables' in higher level language? ====Question 0x2: Registers==== What are the registers available for general use on the x86 architecture? How big are they? ====Question 0x3: Registers==== Do registers have data types? ====Question 0x4: Stacks==== How does the notion of a stack work in regards to instructions and memory? Demonstrate the operation of a stack in assembly. ====Question 0x5: Branching==== What use do branches/jumps have in assembly? How do conditional jumps know when to act? ====Question 0x6: Labels==== What use do labels have in assembly? What instructions can use them? ====Question 0x7: Labels==== What is the importance of having a starting symbol? What two common names are typically used (thinking assembly and C/C++/Java) as starting symbols? =====Part II: Programs===== ====Question 0x8: Adding without Addition==== Computers don't actually know how to do math. They just know how to do logic. Write an assembly program that does the following: * prompts the user to enter 2 values (assume they'll always put in a single-digit integer value) * stores those two values appropriately * using logic, do the appropriate processing to get a resulting number that would be the sum * display the result This program doesn't have to deal with anything greater than 9 as a result. ====Question 0x9: Swapping values==== Write an assembly program that does the following: * prompts the user to enter 2 values (doesn't have to numeric, but still single-digit) * stores the two values appropriately * swaps the values (so what is in location 1 is now in 2, and 2 in 1) * output the result ====Question 0xa: Reversing strings==== Write an assembly program that does the following: * prompts the user to enter a string (let's say, a max of 8 characters for buffer size) * establishes access to that string via indirect register access (pointers) * stores the string in reverse in another variable in memory * be sure the reversed string has a new line and null terminator AT THE END * display the result * write an equivalent program in C/C++, comment on the resulting source code size ====Question 0xb: Uppercasing a string==== Write an assembly program that does the following: * prompts the user to enter a string (20 chars max buffer size) * makes use of indirect register access (pointers) * for any letters which are not uppercase, make them uppercase * display the result * write an equivalent program in C/C++, comment on the resulting assembled/compiled object size =====Part III: Wrapping up===== ====Question 0xc: FAQ==== A big part of our explorations this semester involved discovering knowledge, both the intrinsics that make assembly make more sense in general, and knowledge that the greater internets seem to have forgotten about in specific. The class wiki has been a centralized place for the collection of this data, and now I'd like to fine tune it a bit, and perhaps create a resource that others on the internet can use when exploring assembly language. Located at [[lab46>faq:asm]] is the FAQ list I've created for this class and EoCE. I would like for EACH of you to come up with 8 questions and answers to contribute to the FAQ. These can include any aspect of exploring and utilizing assembly language this semester (setting up system calls, what are the system calls, using the debugger, how to assemble, how to link, how to use a given instruction, etc.). But 8 distinct questions/answers from EACH person in the class. The FAQ page contains some additional syntax for use with FAQ lists (even though it may not display in any unique way-- yet). Be sure to, as content develops, to organize/categorize as appropriate under subsections (perhaps have a basic instruction usage, syscall usage, using the debugger, etc. -- but in a form that makes sense to how the content is developing). The intent is to try and make this document what something that would have been very useful to you when we started out at the beginning of the semester. ====Question 0xd: The Philosophical Impact of Assembly Language==== I've mentioned on a few occasions that although we spend time learning assembly language in this class, 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?