This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Dual DPTR push in ISR - why?

I'm looking to optimize an ISR written in C and wondered why version 6.21 pushes both DPTR when it doesn't use them both?

Parents
  • Why would that get me into trouble?

    The code seems ok when dual DPTR is off, but it is pretty inefficient when dual DPTR is on and they aren't used as show below in the two examples:

    ;DUAL DPTR OFF
    
    0000 C0E0              PUSH    ACC
    0002 C083              PUSH    DPH
    0004 C082              PUSH    DPL
    0006 C0D0              PUSH    PSW
    0008 75D000            MOV     PSW,#00H
    000B C002              PUSH    AR2
    000D C005              PUSH    AR5
    000F C006              PUSH    AR6
    0011 C007              PUSH    AR7
    
    0013 7E00        R     MOV     R6,#HIGH x
    0015 7F00        R     MOV     R7,#LOW x
    0017 7D01              MOV     R5,#01H
    0019         ?C0005:
    0019 0F                INC     R7
    001A EF                MOV     A,R7
    001B AA06              MOV     R2,AR6
    001D 7001              JNZ     ?C0022
    001F 0E                INC     R6
    0020         ?C0022:
    0020 14                DEC     A
    0021 F582              MOV     DPL,A
    0023 8A83              MOV     DPH,R2
    0025 7401              MOV     A,#01H
    0027 F0                MOVX    @DPTR,A
    0028 0D                INC     R5
    0029 BD0AED            CJNE    R5,#0AH,?C0005
    002C         ?C0008:
    002C D007              POP     AR7
    002E D006              POP     AR6
    0030 D005              POP     AR5
    0032 D002              POP     AR2
    0034 D0D0              POP     PSW
    0036 D082              POP     DPL
    0038 D083              POP     DPH
    003A D0E0              POP     ACC
    003C 32                RETI    
    
    
    
    ;DUAL DPTR ON
    
    0000 C0E0              PUSH    ACC
    0002 C083              PUSH    DPH
    0004 C082              PUSH    DPL
    0006 C085              PUSH    DPH1
    0008 C084              PUSH    DPL1
    000A C086              PUSH    DPS
    000C 758600            MOV     DPS,#00H
    000F C0D0              PUSH    PSW
    0011 75D000            MOV     PSW,#00H
    0014 C002              PUSH    AR2
    0016 C005              PUSH    AR5
    0018 C006              PUSH    AR6
    001A C007              PUSH    AR7
    001C 7E00        R     MOV     R6,#HIGH x
    001E 7F00        R     MOV     R7,#LOW x
    0020 7D01              MOV     R5,#01H
    0022         ?C0005:
    0022 0F                INC     R7
    0023 EF                MOV     A,R7
    0024 AA06              MOV     R2,AR6
    0026 7001              JNZ     ?C0022
    0028 0E                INC     R6
    0029         ?C0022:
    0029 14                DEC     A
    002A F582              MOV     DPL,A
    002C 8A83              MOV     DPH,R2
    002E 7401              MOV     A,#01H
    0030 F0                MOVX    @DPTR,A
    0031 0D                INC     R5
    0032 BD0AED            CJNE    R5,#0AH,?C0005
    0035         ?C0008:
    0035 D007              POP     AR7
    0037 D006              POP     AR6
    0039 D005              POP     AR5
    003B D002              POP     AR2
    003D D0D0              POP     PSW
    003F D086              POP     DPS
    0041 D084              POP     DPL1
    0043 D085              POP     DPH1
    0045 D082              POP     DPL
    0047 D083              POP     DPH
    0049 D0E0              POP     ACC
    004B 32                RETI    
    
    

Reply
  • Why would that get me into trouble?

    The code seems ok when dual DPTR is off, but it is pretty inefficient when dual DPTR is on and they aren't used as show below in the two examples:

    ;DUAL DPTR OFF
    
    0000 C0E0              PUSH    ACC
    0002 C083              PUSH    DPH
    0004 C082              PUSH    DPL
    0006 C0D0              PUSH    PSW
    0008 75D000            MOV     PSW,#00H
    000B C002              PUSH    AR2
    000D C005              PUSH    AR5
    000F C006              PUSH    AR6
    0011 C007              PUSH    AR7
    
    0013 7E00        R     MOV     R6,#HIGH x
    0015 7F00        R     MOV     R7,#LOW x
    0017 7D01              MOV     R5,#01H
    0019         ?C0005:
    0019 0F                INC     R7
    001A EF                MOV     A,R7
    001B AA06              MOV     R2,AR6
    001D 7001              JNZ     ?C0022
    001F 0E                INC     R6
    0020         ?C0022:
    0020 14                DEC     A
    0021 F582              MOV     DPL,A
    0023 8A83              MOV     DPH,R2
    0025 7401              MOV     A,#01H
    0027 F0                MOVX    @DPTR,A
    0028 0D                INC     R5
    0029 BD0AED            CJNE    R5,#0AH,?C0005
    002C         ?C0008:
    002C D007              POP     AR7
    002E D006              POP     AR6
    0030 D005              POP     AR5
    0032 D002              POP     AR2
    0034 D0D0              POP     PSW
    0036 D082              POP     DPL
    0038 D083              POP     DPH
    003A D0E0              POP     ACC
    003C 32                RETI    
    
    
    
    ;DUAL DPTR ON
    
    0000 C0E0              PUSH    ACC
    0002 C083              PUSH    DPH
    0004 C082              PUSH    DPL
    0006 C085              PUSH    DPH1
    0008 C084              PUSH    DPL1
    000A C086              PUSH    DPS
    000C 758600            MOV     DPS,#00H
    000F C0D0              PUSH    PSW
    0011 75D000            MOV     PSW,#00H
    0014 C002              PUSH    AR2
    0016 C005              PUSH    AR5
    0018 C006              PUSH    AR6
    001A C007              PUSH    AR7
    001C 7E00        R     MOV     R6,#HIGH x
    001E 7F00        R     MOV     R7,#LOW x
    0020 7D01              MOV     R5,#01H
    0022         ?C0005:
    0022 0F                INC     R7
    0023 EF                MOV     A,R7
    0024 AA06              MOV     R2,AR6
    0026 7001              JNZ     ?C0022
    0028 0E                INC     R6
    0029         ?C0022:
    0029 14                DEC     A
    002A F582              MOV     DPL,A
    002C 8A83              MOV     DPH,R2
    002E 7401              MOV     A,#01H
    0030 F0                MOVX    @DPTR,A
    0031 0D                INC     R5
    0032 BD0AED            CJNE    R5,#0AH,?C0005
    0035         ?C0008:
    0035 D007              POP     AR7
    0037 D006              POP     AR6
    0039 D005              POP     AR5
    003B D002              POP     AR2
    003D D0D0              POP     PSW
    003F D086              POP     DPS
    0041 D084              POP     DPL1
    0043 D085              POP     DPH1
    0045 D082              POP     DPL
    0047 D083              POP     DPH
    0049 D0E0              POP     ACC
    004B 32                RETI    
    
    

Children