I wrote a program compress time to long. But some output give to much ( outout asm ). How can I reduce unuse code. see output below. my source.
extern unsigned char convBcd2Hex(unsigned char c); void convert( void ) { unsigned long dwTmp; dwTmp = convBcd2Hex( sClock[YEAR] ); // 4 year _lrol_( dwTmp, 4 ); dwTmp = dwTmp | convBcd2Hex( sClock[MONTH] ); // 4 month _lrol_( dwTmp, 5 ); dwTmp = dwTmp | convBcd2Hex( sClock[DAY] ); // 5 day _lrol_( dwTmp, 5 ); dwTmp = dwTmp | convBcd2Hex( sClock[HOUR] ); // 5 hour _lrol_( dwTmp, 6 ); dwTmp = dwTmp | convBcd2Hex( sClock[MINUTE]); // 6 minute _lrol_( dwTmp, 6 ); dwTmp = dwTmp | convBcd2Hex( sClock[SECOND]); // 6 second }
; SOURCE LINE # 140 001F AF00 E MOV R7,sClock+06H 0021 120000 R LCALL _convBcd2Hex 0024 E4 CLR A 0025 8F00 R MOV dwTmp+03H,R7 0027 F500 R MOV dwTmp+02H,A 0029 F500 R MOV dwTmp+01H,A 002B F500 R MOV dwTmp,A ; SOURCE LINE # 141 002D AE00 R MOV R6,dwTmp+02H 002F AD00 R MOV R5,dwTmp+01H 0031 AC00 R MOV R4,dwTmp 0033 7804 MOV R0,#04H 0035 120000 E LCALL ?C?LROL 0038 AF00 E MOV R7,sClock+05H 003A 120000 R LCALL _convBcd2Hex 003D E4 CLR A 003E EF MOV A,R7 003F 4500 R ORL A,dwTmp+03H 0041 F500 R MOV dwTmp+03H,A 0043 E500 R MOV A,dwTmp+02H + 0045 F500 R MOV dwTmp+02H,A | 0047 E500 R MOV A,dwTmp+01H |-- How can I reduct this code? 0049 F500 R MOV dwTmp+01H,A | 004B E500 R MOV A,dwTmp | 004D F500 R MOV dwTmp,A + ; SOURCE LINE # 142 004F AF00 R MOV R7,dwTmp+03H 0051 AE00 R MOV R6,dwTmp+02H 0053 AD00 R MOV R5,dwTmp+01H 0055 FC MOV R4,A 0056 7805 MOV R0,#05H 0058 120000 E LCALL ?C?LROL 005B AF00 E MOV R7,sClock+04H 005D 120000 R LCALL _convBcd2Hex 0060 E4 CLR A 0061 EF MOV A,R7 0062 4500 R ORL A,dwTmp+03H 0064 F500 R MOV dwTmp+03H,A 0066 E500 R MOV A,dwTmp+02H + 0068 F500 R MOV dwTmp+02H,A | 006A E500 R MOV A,dwTmp+01H |-- How can I reduct this code? 006C F500 R MOV dwTmp+01H,A | 006E E500 R MOV A,dwTmp | 0070 F500 R MOV dwTmp,A +