Answer from cs61c-ep (Hao Wen Vivian Chong 0) for Question 1 There are a few ways to interpret this question and I am not exactly sure what "translated directly" means, and if you are asking for the purpose of the non-translation or the purpose of the parts being available in C, so I will try to interpret as best I can. In C, one can just say something like x = y[3] + 10 which is a memory to memory operation. In assembly language code, this doesn't exist. First, the value must be loaded from memory into a register, then operated upon, and then stored back into memory. Obviously, this manual loading and storing does not appear in C so that programmers can have an easier time of writing programs. Another feature in C that does not directly correspond to assembly is that there are many different types of variables in c (int, char, etc.) whereas registers in assembly language have no type. Rather, the operations executed determine how the data inside the registers are treated. Again, for C this is used so that the programmer can easily know what kind of operations they can/should perform on the data.