Dear all, I would like someone to confirm this bug:
unsigned long b, d; unsigned long Round2(unsigned long value) { unsigned long WholePart; unsigned char Remainder; WholePart = value / 10L; Remainder = (unsigned char)(value % 10L); if (Remainder > 4) { WholePart++; } return (WholePart); } void main(void) { b = Round2(456756); d = Round2(456751); do {} while (1); }
; FUNCTION _Round2 (BEGIN) ; SOURCE LINE # 3 0000 8F00 R MOV value+03H,R7 0002 8E00 R MOV value+02H,R6 0004 8D00 R MOV value+01H,R5 0006 8C00 R MOV value,R4 ; SOURCE LINE # 4 ; SOURCE LINE # 8 0008 E4 CLR A 0009 7B0A MOV R3,#0AH 000B FA MOV R2,A 000C F9 MOV R1,A 000D F8 MOV R0,A 000E 120000 E LCALL ?C?ULDIV 0011 8F00 R MOV WholePart+03H,R7 0013 8E00 R MOV WholePart+02H,R6 0015 8D00 R MOV WholePart+01H,R5 0017 8C00 R MOV WholePart,R4 ; SOURCE LINE # 9 0019 E4 CLR A 001A 7B0A MOV R3,#0AH 001C FA MOV R2,A 001D F9 MOV R1,A 001E F8 MOV R0,A 001F AF00 R MOV R7,value+03H 0021 AE00 R MOV R6,value+02H 0023 AD00 R MOV R5,value+01H 0025 AC00 R MOV R4,value 0027 120000 E LCALL ?C?ULDIV ;---- Variable 'Remainder' assigned to Register 'R7' ---- ; SOURCE LINE # 11 002A EB MOV A,R3 002B D3 SETB C 002C 9404 SUBB A,#04H 002E 4015 JC ?C0001 ; SOURCE LINE # 12 ; SOURCE LINE # 13 0030 E500 R MOV A,WholePart+03H 0032 2401 ADD A,#01H 0034 F500 R MOV WholePart+03H,A 0036 E4 CLR A 0037 3500 R ADDC A,WholePart+02H 0039 F500 R MOV WholePart+02H,A 003B E4 CLR A 003C 3500 R ADDC A,WholePart+01H 003E F500 R MOV WholePart+01H,A 0040 E4 CLR A 0041 3500 R ADDC A,WholePart 0043 F500 R MOV WholePart,A ; SOURCE LINE # 14 0045 ?C0001: ; SOURCE LINE # 16 0045 AF00 R MOV R7,WholePart+03H 0047 AE00 R MOV R6,WholePart+02H 0049 AD00 R MOV R5,WholePart+01H 004B AC00 R MOV R4,WholePart ; SOURCE LINE # 17 004D ?C0002: 004D 22 RET ; FUNCTION _Round2 (END)
002A EB MOV A,R7