I'm sure I'm overstepping the bounds by sending this email, but I have been a long time (forever) assembly programmer, primarily using the Atmel AVR uP, so my references are to that uP and it's tools.

I have just started a development project using the sdcc assembler and linker and have run not into a problem, but more a difficulty using bits.

Is there a reason/rule that does not allow you to use a label to specify a bit within a register or I/O port?

It seems that a program is considerably more readable and therefore easier to support when you can use labels to indicate a bit or register whenever possible. This is especially helpful when dealing with really large programs. It's a lot easier to remember a label then it is to remember the bit position for the 'test' you're trying to perform, especially when you are testing dozens and dozens of memory locations for status.

So basically my question is... Is there a way to 'assign' a label to a bit so that the 'label' can be used instead of a bit number? 

Below is a small program that I hope illustrates my question, where any bit that is defined with a label does not assembly properly, yet no error is indicated.

Again, I wasn't sure where to ask my question and any help would be greatly appreciated.
Kenny


ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999  (Intel 8051), page 1.



                              1     .module   MAIN.ASM
                              2    
                              3     .area     MAIN (ABS, CODE)
                              4
                              5     .globl    Idle
                              6
                              7 ;-------------------------------------------------------------------------------
                              8
                    0080      9 P0             = 0x80
                    00E0     10 ACC            = 0xE0
                    0004     11 StatusBit      = 4
                    00E4     12 ACCStatusBit   = 0xE4
                    00E4     13 ACC_StatusBit  = 0xE4
                             14
                    00D8     15 CCON           = 0xD8
                    00DD     16 CCON_StatusBit = 0xDD
                             17
                             18 ;-------------------------------------------------------------------------------
                             19
   0000                      20 Idle:
   0000 D2 00                21     setb    P0.StatusBit
   0002 D2 84                22     setb    P0.4
                             23    
   0004 C2 00                24     clr    P0.StatusBit
   0006 C2 84                25     clr    P0.4
                             26
   0008 90 00 00             27     mov    DPTR,#Status
   000B 74 00                28     mov    A,#0
   000D E0                   29     movx    A,@DPTR
   000E 30 00 11             30     jnb    A.StatusBit,Not_Idle
                             31    
   0011 30 00 0E             32     jnb    A.4,Not_Idle
   0014 30 E4 0B             33     jnb    ACCStatusBit,Not_Idle
   0017 30 E4 E6             34     jnb    ACC_StatusBit,Nowhere
                             35    
   001A 20 00 E3             36     jb    CCON.StatusBit,Idle
   001D 20 DD E0             37     jb    CCON_StatusBit,Idle
                             38    
   0020 80 DE                39     sjmp    Idle
                             40    
   0022                      41 Not_Idle:
                             42
   0022 80 DC                43     sjmp    Idle
                             44    
                             45
                             46     .area        XSEG (ABS, XDATA)
                             47    
   0000                      48 Status:
                             49
   0000                      50     .ds    1
                             51    
                             52    
                             53