Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
08/11/07 11:35
Read: times


 
#143101 - Assembler codes
Responding to: ???'s previous message
I know 51 asm but it is a few years when I am programming only in C. It is very difficult to write code about 50kB in asm and it is also difficult to find solution in listing from compiler.

Here is the first code in C:
Line 105:
for (c = 0; (c <calib_table_def[calib_table].curves_count) && (c < CALIB_MAX_CURVES_COUNT); c++) {
Line 106:
   for ( p = 1; (p < calib_points_count[calib_table].curve[c]-1) && (p < CALIB_MAX_CURVES_POINTS_COUNT-1); p++) {
Line 107:
      if ( calib_x < calib_tables[calib_table].curve[c].point[p].x) break;
Line 108:
   }

Here is asm listing:
--------------------
                                           ; SOURCE LINE # 105 
0236 E4             CLR    A
0237 900000  R      MOV    DPTR,#c
023A F0             MOVX   @DPTR,A
023B         ?FOR4:
023B E500    R      MOV    A,calib_table
023D 25E0           ADD    A,ACC
023F 25E0           ADD    A,ACC
0241 2400    R      ADD    A,#LOW calib_table_def+003H
0243 F8             MOV    R0,A
0244 F582           MOV    DPL,A
0246 E4             CLR    A
0247 3400    R      ADDC   A,#HIGH calib_table_def+003H
0249 F583           MOV    DPH,A
024B E4             CLR    A
024C 93             MOVC   A,@A+DPTR
024D FB             MOV    R3,A
024E F5F0           MOV    B,A
0250 900000  R      MOV    DPTR,#c
0253 E0             MOVX   A,@DPTR
0254 FA             MOV    R2,A
0255 B5F000         CJNE   A,B,?LAB33
0258         ?LAB33:
0258 4003           JC     $ + 5
025A 020000  R      LJMP   ?NXT64
025D B40F00         CJNE   A,#00FH,?LAB35
0260         ?LAB35:
0260 4003           JC     $ + 5
0262 020000  R      LJMP   ?NXT64
                                           ; SOURCE LINE # 106 
0265 7401           MOV    A,#001H
0267 900000  R      MOV    DPTR,#p
026A F0             MOVX   @DPTR,A
026B         ?FOR5:
026B 900000  R      MOV    DPTR,#c
026E E0             MOVX   A,@DPTR
026F FB             MOV    R3,A
0270 E500    R      MOV    A,calib_table
0272 75F00F         MOV    B,#00FH
0275 A4             MUL    AB
0276 FD             MOV    R5,A
0277 2400    R      ADD    A,#LOW calib_points_count
0279 F8             MOV    R0,A
027A F582           MOV    DPL,A
027C E4             CLR    A
027D 3400    R      ADDC   A,#HIGH calib_points_count
027F F583           MOV    DPH,A
0281 EB             MOV    A,R3
0282 2582           ADD    A,DPL
0284 FC             MOV    R4,A
0285 F582           MOV    DPL,A
0287 E4             CLR    A
0288 3583           ADDC   A,DPH
028A F583           MOV    DPH,A
028C E4             CLR    A
028D 93             MOVC   A,@A+DPTR
028E 24FF           ADD    A,#0FFH
0290 FB             MOV    R3,A
0291 E4             CLR    A
0292 34FF           ADDC   A,#0FFH
0294 FA             MOV    R2,A
0295 F5F0           MOV    B,A
0297 900000  R      MOV    DPTR,#p
029A E0             MOVX   A,@DPTR
029B FF             MOV    R7,A
029C 7E00           MOV    R6,#000H
029E B2F7           CPL    B.7
02A0 7480           MOV    A,#080H
02A2 B5F006         CJNE   A,B,?LAB38
02A5 8BF0           MOV    B,R3
02A7 EF             MOV    A,R7
02A8 B5F000         CJNE   A,B,?LAB38
02AB         ?LAB38:
02AB 5053           JNC    ?NXT66
02AD E0             MOVX   A,@DPTR
02AE B41300         CJNE   A,#013H,?LAB40
02B1         ?LAB40:
02B1 504D           JNC    ?NXT66
                                           ; SOURCE LINE # 107 
02B3 C000    R      PUSH   calib_x
02B5 C000    R      PUSH   calib_x+01H
02B7 C000    R      PUSH   calib_x+02H
02B9 C000    R      PUSH   calib_x+03H
02BB 900000  R      MOV    DPTR,#p
02BE E0             MOVX   A,@DPTR
02BF 75F010         MOV    B,#010H
02C2 A4             MUL    AB
02C3 C0F0           PUSH   B
02C5 C0E0           PUSH   ACC
02C7 A3             INC    DPTR
02C8 E0             MOVX   A,@DPTR
02C9 FD             MOV    R5,A
02CA 8500F0  R      MOV    B,calib_table
02CD 900000  R      MOV    DPTR,#calib_tables
02D0 7E12           MOV    R6,#012H
02D2 7FC0           MOV    R7,#0C0H
02D4 120000  R      LCALL  ?C_CBADDMUL
02D7 8DF0           MOV    B,R5
02D9 7E01           MOV    R6,#001H
02DB 7F40           MOV    R7,#040H
02DD 120000  R      LCALL  ?C_CBADDMUL
02E0 D0E0           POP    ACC
02E2 2582           ADD    A,DPL
02E4 F582           MOV    DPL,A
02E6 D0E0           POP    ACC
02E8 3583           ADDC   A,DPH
02EA F583           MOV    DPH,A
02EC 120000  R      LCALL  MV4_CD2RG?C
02EF 120000  R      LCALL  ?COMPIEEE
02F2 BFFF02         CJNE   R7,#0FFH,?NXT67
02F5 8009           SJMP   ?NXT66
02F7         ?NXT67:
                                           ; SOURCE LINE # 106 
02F7 900000  R      MOV    DPTR,#p
02FA E0             MOVX   A,@DPTR
02FB 04             INC    A
02FC F0             MOVX   @DPTR,A
02FD 020000  R      LJMP   ?FOR5
0300         ?NXT66:
                                           ; SOURCE LINE # 110 
0300 AC00    R      MOV    R4,calib_x
0302 AD00    R      MOV    R5,calib_x+01H
0304 AE00    R      MOV    R6,calib_x+02H
0306 AF00    R      MOV    R7,calib_x+03H
0308 900000  R      MOV    DPTR,#x_value
030B 120000  R      LCALL  MV4_RG2XD?C 

----------------------------------------------------------------

Here is second C code:
Line 63:
for (c=0;c < calib_table_def[CALIB_TABLE_2].curves_count; c++) {
Line 64:
   if(c >= CALIB_MAX_CURVES_COUNT) break;
Line 65:

Line 66:
   for(p=1;p<calib_points_count[CALIB_TABLE_2].curve[c]-1;p++) {
Line 67:
      if(p >=  CALIB_MAX_CURVES_POINTS_COUNT-1) break;
Line 68:
      if(calib_x<calib_tables[CALIB_TABLE_2].curve[c].point[p].x) break;
Line 69:
   }   

- Here are different line numbers due to delete some comments above function.

Asm listing of this part of code:
---------------------------------
                                           ; SOURCE LINE # 63 
0179 E4             CLR    A
017A 900000  R      MOV    DPTR,#c
017D F0             MOVX   @DPTR,A
017E         ?FOR4:
017E 900000  R      MOV    DPTR,#calib_table_def+0BH
0181 E4             CLR    A
0182 93             MOVC   A,@A+DPTR
0183 F5F0           MOV    B,A
0185 900000  R      MOV    DPTR,#c
0188 E0             MOVX   A,@DPTR
0189 B5F000         CJNE   A,B,?LAB28
018C         ?LAB28:
018C 4003           JC     $ + 5
018E 020000  R      LJMP   ?NXT60
                                           ; SOURCE LINE # 64 
0191 B40F00         CJNE   A,#00FH,?LAB30
0194         ?LAB30:
0194 4003           JC     ?NXT62
0196 020000  R      LJMP   ?NXT60
0199         ?NXT62:
                                           ; SOURCE LINE # 66 
0199 7401           MOV    A,#001H
019B 900000  R      MOV    DPTR,#p
019E F0             MOVX   @DPTR,A
019F         ?FOR5:
019F 900000  R      MOV    DPTR,#c
01A2 E0             MOVX   A,@DPTR
01A3 2400    R      ADD    A,#LOW calib_points_count+01EH
01A5 F582           MOV    DPL,A
01A7 E4             CLR    A
01A8 3400    R      ADDC   A,#HIGH calib_points_count+01EH
01AA F583           MOV    DPH,A
01AC E4             CLR    A
01AD 93             MOVC   A,@A+DPTR
01AE 24FF           ADD    A,#0FFH
01B0 FB             MOV    R3,A
01B1 E4             CLR    A
01B2 34FF           ADDC   A,#0FFH
01B4 FA             MOV    R2,A
01B5 900000  R      MOV    DPTR,#p
01B8 E0             MOVX   A,@DPTR
01B9 FD             MOV    R5,A
01BA 8AF0           MOV    B,R2
01BC B2F7           CPL    B.7
01BE 7480           MOV    A,#080H
01C0 B5F006         CJNE   A,B,?LAB32
01C3 8BF0           MOV    B,R3
01C5 ED             MOV    A,R5
01C6 B5F000         CJNE   A,B,?LAB32
01C9         ?LAB32:
01C9 5047           JNC    ?NXT63
                                           ; SOURCE LINE # 67 
01CB E0             MOVX   A,@DPTR
01CC B41300         CJNE   A,#013H,?LAB34
01CF         ?LAB34:
01CF 4002           JC     ?NXT65
01D1 803F           SJMP   ?NXT63
01D3         ?NXT65:
                                           ; SOURCE LINE # 68 
01D3 900000  R      MOV    DPTR,#calib_x
01D6 120000  R      LCALL  MV4_XD2SN?C
01D9 900000  R      MOV    DPTR,#p
01DC E0             MOVX   A,@DPTR
01DD 75F010         MOV    B,#010H
01E0 A4             MUL    AB
01E1 C0F0           PUSH   B
01E3 C0E0           PUSH   ACC
01E5 A3             INC    DPTR
01E6 E0             MOVX   A,@DPTR
01E7 F5F0           MOV    B,A
01E9 900000  R      MOV    DPTR,#calib_tables+02580H
01EC 7E01           MOV    R6,#001H
01EE 7F40           MOV    R7,#040H
01F0 120000  R      LCALL  ?C_CBADDMUL
01F3 D0E0           POP    ACC
01F5 2582           ADD    A,DPL
01F7 F582           MOV    DPL,A
01F9 D0E0           POP    ACC
01FB 3583           ADDC   A,DPH
01FD F583           MOV    DPH,A
01FF 120000  R      LCALL  MV4_CD2RG?C
0202 120000  R      LCALL  ?COMPIEEE
0205 BFFF02         CJNE   R7,#0FFH,?NXT64
0208 8008           SJMP   ?NXT63
020A         ?NXT64:
                                           ; SOURCE LINE # 66 
020A 900000  R      MOV    DPTR,#p
020D E0             MOVX   A,@DPTR
020E 04             INC    A
020F F0             MOVX   @DPTR,A
0210 808D           SJMP   ?FOR5
0212         ?NXT63:
                                           ; SOURCE LINE # 71 
0212 900000  R      MOV    DPTR,#calib_x
0215 120000  R      LCALL  MV4_XD2RG?C
0218 900000  R      MOV    DPTR,#x_value
021B 120000  R      LCALL  MV4_RG2XD?C


I am sorry for a huge message but it wasn't possible to pack source codes :)

List of 32 messages in thread
TopicAuthorDate
for(;;) anomally            01/01/70 00:00      
   How to post code:            01/01/70 00:00      
   re: for(;;) anomaly            01/01/70 00:00      
      malloc() on 8051?!?            01/01/70 00:00      
         Yes.            01/01/70 00:00      
            Off topic: Mixed 51 and PC mind :)            01/01/70 00:00      
         You are right            01/01/70 00:00      
   Probably this miight be happening            01/01/70 00:00      
      This sounds as a reason but...            01/01/70 00:00      
         asm            01/01/70 00:00      
            I think the same            01/01/70 00:00      
               the asm will maybe help            01/01/70 00:00      
                  Assembler codes            01/01/70 00:00      
                     Michal, you are cheating! :-)            01/01/70 00:00      
                        This was the reason :)            01/01/70 00:00      
                     ... but it's easy to do it in C :-)            01/01/70 00:00      
                        I dont trust to any any any compiler :)            01/01/70 00:00      
            Stack overflow?            01/01/70 00:00      
               I think this will be complicated            01/01/70 00:00      
                  1 of 2 ways            01/01/70 00:00      
                     Thx            01/01/70 00:00      
         The Compiler does not protect you            01/01/70 00:00      
            Like SDCC...            01/01/70 00:00      
               Better?            01/01/70 00:00      
                  option --main-return            01/01/70 00:00      
                     SDCC function startup code            01/01/70 00:00      
                        use a cookie near the end of the stack?            01/01/70 00:00      
                           rock bottom            01/01/70 00:00      
                           Why only 0xF8?            01/01/70 00:00      
                              paranoia!)            01/01/70 00:00      
               also Keil?            01/01/70 00:00      
            I have while(1) loop in main()            01/01/70 00:00      

Back to Subject List