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

This is a bug


//please compiler this program
//why j equ 0 ?

#pragma src
#prgma OT (8)
unsigned char KeyDisBuf[16];

unsigned char Get_Int_Data(unsigned int i)
{
unsigned char j,k;
for (j=15;;j--)
{
KeyDisBuf[j]=i%10;
i/=10;
if (i==0) break;
}
k=16-j;
for (j=0;j<k;j++)
KeyDisBuf[j+2]=KeyDisBuf[j+16-k];
//this line is error,(j==0) why?
return (k+2);
}

main()
{
unsigned char i;
i=Get_Int_Data(12345);
for (;;);
}



; temp.SRC generated from: temp.c


NAME TEMP

?PR?_Get_Int_Data?TEMP SEGMENT CODE
?DT?_Get_Int_Data?TEMP SEGMENT DATA OVERLAYABLE
?PR?main?TEMP SEGMENT CODE
?DT?main?TEMP SEGMENT DATA OVERLAYABLE
?DT?TEMP SEGMENT DATA
EXTRN CODE (?C?UIDIV)
EXTRN CODE (?C_STARTUP)
PUBLIC KeyDisBuf
PUBLIC main
PUBLIC _Get_Int_Data

RSEG ?DT?main?TEMP
?main?BYTE:
i?143: DS 1

RSEG ?DT?_Get_Int_Data?TEMP
?_Get_Int_Data?BYTE:
i?040: DS 2

RSEG ?DT?TEMP
KeyDisBuf: DS 16
; #pragma src
; unsigned char KeyDisBuf[16];
;
; unsigned char Get_Int_Data(unsigned int i)

RSEG ?PR?_Get_Int_Data?TEMP
_Get_Int_Data:
USING 0
; SOURCE LINE # 4
MOV i?040,R6
MOV i?040+01H,R7
; {
; SOURCE LINE # 5
; unsigned char j,k;
; for (j=15;;j--)
; SOURCE LINE # 7
;---- Variable 'j?041' assigned to Register 'R3' ----
MOV R3,#0FH
?C0001:
; {
; SOURCE LINE # 8
; KeyDisBuf[j]=i%10;
; SOURCE LINE # 9
MOV R6,i?040
MOV R7,i?040+01H
MOV R4,#00H
MOV R5,#0AH
LCALL ?C?UIDIV
MOV A,#LOW (KeyDisBuf)
ADD A,R3
MOV R0,A
MOV @R0,AR5
; i/=10;
; SOURCE LINE # 10
MOV R6,i?040
MOV R7,i?040+01H
MOV R4,#00H
MOV R5,#0AH
LCALL ?C?UIDIV
MOV i?040,R6
MOV i?040+01H,R7
; if (i==0) break;
; SOURCE LINE # 11
MOV A,i?040+01H
ORL A,i?040
JZ ?C0002
; }
; SOURCE LINE # 12
?C0003:
DEC R3
SJMP ?C0001
?C0002:
; k=16-j;
; SOURCE LINE # 13
CLR C
MOV A,#010H
SUBB A,R3
MOV R7,A
;---- Variable 'k?042' assigned to Register 'R7' ----
; for (j=0;j<k;j++)
; SOURCE LINE # 14
CLR A
MOV R3,A
?C0005:
MOV A,R3
CLR C
SUBB A,R7
JNC ?C0006
; KeyDisBuf[j+2]=KeyDisBuf[j+16-k];
; SOURCE LINE # 15
CLR C
MOV A,R3
SUBB A,R7
ADD A,#LOW (KeyDisBuf+010H)
MOV R0,A
MOV A,@R0
MOV R6,A
MOV A,#LOW (KeyDisBuf+02H)
ADD A,R3
MOV R0,A
MOV @R0,AR6
(This line have not " INC R3" ,why?)
SJMP ?C0005
?C0006:
; return (k+2);
; SOURCE LINE # 16
MOV A,R7
ADD A,#02H
MOV R7,A
; }
; SOURCE LINE # 17
?C0008:
RET
; END OF _Get_Int_Data

;
; main()

RSEG ?PR?main?TEMP
main:
USING 0
; SOURCE LINE # 19
; {
; SOURCE LINE # 20
; unsigned char i;
; i=Get_Int_Data(12345);
; SOURCE LINE # 22
MOV R7,#039H
MOV R6,#030H
LCALL _Get_Int_Data
MOV i?143,R7
; for (;;);
; SOURCE LINE # 23
?C0009:
SJMP ?C0009
; END OF main

END

0