I appreciate all the tremendous help. I have some great examples and tutorials from piclist and some from others that are invaluable to me in trying to learn the right way to program assembly. I have now had a chance to get through my first pass of the Data sheet for my 16f876 and now can understand a good deal of it given the great help here. This raised a few questions that I can't answer myself as they are related to "thinking ahead" to more complex programs something only experience can give you. Now that all of you helped me get my binary counter working with two different code examples I have a few questions. Although I know these are simple I am trying to understand the basic foundation of "good practice" and "plan for the future" to avoid problems. Please also correct any misstatements I may have made based on my "understanding" I can see how these both do the same thing by telling the compiler to switch to bank1 where the trisa register is. I verified for myself that indeed the program does not work without this information First method: banksel trisa ;switch to bank1 sets status to b'01' Second method: BSF STATUS,RP0 ;switch to bank1 sets status to b'01' Question: I could not find reference to where someone knew to use the "banksel trisa" line of code where does this come from? Wondering if there are other such commands that are useful? Is there an advantage/importance of one way over the other? Both of the following work for my simple binary counter: First method: incf portb_tmp,w ;inc portb_tmp and move to W. movwf portb_tmp ;save incremented value movwf portb ; move to LEDs. Second method: incf portb,f ;add 1 to port B, (next binary byte) Question I see many talk about the use of shadow variables like "portb_tmp" but not sure when it should be used? It was explaind some to me before but I just still do not understand but know it must be important in more complex programs. Now I think I know this one but want to make sure. Both of the following do the same thing if all I want to do is set all PORTA pins to all outputs so there is no advantage of one of these over the other in this case. Is this correct? The first method would allow for me to set some of the PORTA as input by using say movlw B'00001111' so I am not setting all PORTA as output where "clrf trisa" I can not do this. Method 1: movlw B'00000000' BSF STATUS,RP0 ;switch to bank1 sets status to b'01' MOVWF TRISA ; make all bit of PORT A outputs Method 2: banksel trisa ;switch to bank1 clrf trisa ;set as all outputs Thanks for the help sorry for so many basic questions. I just want to make sure I have a sound foundation to move on with. Regards, Richard -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details.