Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
04/16/08 10:42
Read: times


 
#153455 - No !!!
Responding to: ???'s previous message
AJMP and ACALL support target addresses within the same physical 2K addressable page as the following instruction. Calling the operand byte of an AJMP or an ACALL an offset may be what is confusing you. When you combine 3-bits from the opcode and the 8-bit operand you get an 11-bit value that replaces the low 11-bits of the program counter. The program counter (PC) value to which this replacement is made is the PC value that is two address locations up from the opcode location.

So these 11 bits are a PAGE address and not really an offset. The use of the term offset should be carefully used for relative addressed type instructions where the operand value is added to a post fetch PC value. (And depending upon the MCU type instruction set such adding may be signed or unsigned). This is the type of behavior you get in the 8051 instruction set for the SJMP where the value of the instruction operand is a signed 8-bit offset.

What this all means is that if you position an ACALL or AJMP opcode right at the beginning of a 2K boundary of the CODE space then the target address can be any address from the ACALL/AJMP opcode up to and including any address within that 2K page.

If you place the ACALL/AJMP someplace within a 2K page (but not right near the end) the target address can be anywhere within that same 2K page.

If you position the ACALL or AJMP opcode right at the last address or second to last address of a 2K page then the target address of the instruction is within the next 2K page.

Michael Karas


List of 42 messages in thread
TopicAuthorDate
Problem with ACALL instruction            01/01/70 00:00      
   It is an absolute paged call...            01/01/70 00:00      
      my question is different            01/01/70 00:00      
         The Opcode is Selected...            01/01/70 00:00      
   not using an assembler?            01/01/70 00:00      
      still confused...            01/01/70 00:00      
         Not possible, use LCALL            01/01/70 00:00      
            Why should anyone WANT to know the hex            01/01/70 00:00      
               he'd want to know it because ...            01/01/70 00:00      
                  Unnecessary complication            01/01/70 00:00      
         compiler results error            01/01/70 00:00      
            There is no compiler involved. Just an assembler.            01/01/70 00:00      
         3 top bits of 11-bit address            01/01/70 00:00      
            only good for calls within the same 2K block            01/01/70 00:00      
            one more question...            01/01/70 00:00      
               Read your instruction set            01/01/70 00:00      
                  i am making an assembler.            01/01/70 00:00      
                     Now I understand. Far more interesting.            01/01/70 00:00      
                        Absolute Assembler            01/01/70 00:00      
                           what is an absolute assembler            01/01/70 00:00      
                              Which do you love.            01/01/70 00:00      
                                 actually I didn't            01/01/70 00:00      
                                    Linking assemblers are more complicated            01/01/70 00:00      
                     why not?            01/01/70 00:00      
               ajmp            01/01/70 00:00      
                  Reconsider Robert....            01/01/70 00:00      
                     positive offset...            01/01/70 00:00      
                        No !!!            01/01/70 00:00      
                           let's try this way            01/01/70 00:00      
                              abc?            01/01/70 00:00      
                                 I do not know how micro            01/01/70 00:00      
                                    can any1 tell abc??            01/01/70 00:00      
                                       As easy as 'abc'            01/01/70 00:00      
                                       How to get ABC            01/01/70 00:00      
                           whats the operand here?            01/01/70 00:00      
                              neither!!!!            01/01/70 00:00      
                                 is that an error?            01/01/70 00:00      
                                    error, not necessarily, but ..            01/01/70 00:00      
                                    it is not an error, but it is poor practice            01/01/70 00:00      
                        Not offset            01/01/70 00:00      
                           Oops, I was wrong earlier            01/01/70 00:00      
   Problem solved            01/01/70 00:00      

Back to Subject List