10/19/2006
A student writes: Dr. Patt, I apologize if you have answered this in class No apologize necessary. ...but yup, we did do this in class. or in your book, Yup, it is there also. Look at the character counting example in Chapter 5. Figure 5.16, for example. but I have gone through my notes and the book and cannot find my answer. I was wondering(and maybe I am so far off base I don't need this) if it was possible to write a branch within a brach, and how that would work. Recall in the example we went through in class we had a loop. Before entering the loop, we set the counter to the number of data values we were going to examine. If not zero, we went through ONE iteration and then tested again. So, here is our branch: the BRz instruction is testing to see if n=0 and we are done. If not zero, we went through ONE iteration. What did we do in that iteration? First, we got the next value. Then we tested to see if that value was negative. Aha! Our second branch, and this one is inside the first branch (using your terminology). Answer: Yup, we can have a branch inside a branch. BUT, I would rather you not MEMORIZE that. What is important here? Answer: to systematically decompose the program you are working on into smaller and simpler blocks. Three ways to decompose. Sequential, Conditional, Iteration. Figure 6.1. Each of the blocks in the decomposition can be further decomposed into one of the three blocks. ...and on and on and on. So, whether you end up with a branch within a branch depends on the application you are programming, and whether a conditional is inside the body of an iteration, or an iteration is inside the body of one of the paths from the conditional. Got it? My second question is a very basic, silly, stupid one, that you will probably laugh at. No, I do not laugh at sincere questions. They come from a lack of understanding, and we are here to change that, assuming you are doing your share: coming to class, not listening to music on your ipod in class, or in a chat room, and coming to discussion session and reading the book. If I learn that my faith in your commitment to the course is misplaced, then I will feel differently. But, until then... So I am making fun of myself before you can. Then only one of us is making fun of you. In this program, are the numbers binary, or 2's compliment. If they aren't 2's compliment, how do I distinguish what the 15th bit is? We have discussed this in class also. The number could be a 2's complement (note the spelling), or it could be two ASCII codes, or it could simply be a bit vector. There is no guarantee that it is 2's complement. THEN, you ask, how does the condition code settings know what it is so it can know how to set N,Z,P. Answer: it doesn't. The only thing the condition code logic knows is that it is being presented with 16 bits that it is writing to one of the registers. It sets N,Z,P on the basis of those 16 bits, IF taken as a 2's complement value is negative, zero, or positive. The logic can't know how you are using those 16 bits. The logic only knows that it is being presented with 16 bits, and it sets N,Z,P according to what we just said. If it happens to be the two ASCII codes AB (x4142), then N,Z,P will be set to 001 because the logic only knows that it is x4142 and that (if it were a 2's complement integer) would be positive. I apologize for any unclear points in this email, but somewhere along the line I got very confused with branches and their use. Thanks for your time as I know you probably get a lot of questions. I do have a lot of questions. Doing the best I can to respond to them. Good luck finishing the program. Yale Patt