📄 level2.lst
字号:
302:level2.c **** if ( byte == 0x50 )
849 .stabn 68,0,302,.LM118-SearchValidBit
850 .LM118:
851 032c 8035 cpi r24,lo8(80)
852 032e 31F4 brne .L91
303:level2.c **** if ( ( ( *ptr ) & 0xF0 ) == 0 )
853 .stabn 68,0,303,.LM119-SearchValidBit
854 .LM119:
855 0330 8C91 ld r24,X
856 0332 807F andi r24,lo8(-16)
857 0334 19F4 brne .L91
304:level2.c **** return 3;
858 .stabn 68,0,304,.LM120-SearchValidBit
859 .LM120:
860 0336 83E0 ldi r24,lo8(3)
861 0338 90E0 ldi r25,hi8(3)
305:level2.c **** byte = valid & 0x78;
306:level2.c **** if ( byte == 0x28 )
307:level2.c **** if ( ( ( *ptr ) & 0x78 ) == 0 )
308:level2.c **** return 4;
309:level2.c **** }
310:level2.c **** return 255; //no valid bit
311:level2.c **** }
862 .stabn 68,0,311,.LM121-SearchValidBit
863 .LM121:
864 033a 0895 ret
865 .L91:
866 .stabn 68,0,305,.LM122-SearchValidBit
867 .LM122:
868 033c 9877 andi r25,lo8(120)
869 .stabn 68,0,306,.LM123-SearchValidBit
870 .LM123:
871 033e 9832 cpi r25,lo8(40)
872 0340 61F4 brne .L90
873 .stabn 68,0,307,.LM124-SearchValidBit
874 .LM124:
875 0342 8C91 ld r24,X
876 0344 9927 clr r25
877 0346 8877 andi r24,lo8(120)
878 0348 9070 andi r25,hi8(120)
879 034a 892B or r24,r25
880 034c 31F4 brne .L90
881 .stabn 68,0,308,.LM125-SearchValidBit
882 .LM125:
883 034e 84E0 ldi r24,lo8(4)
884 0350 90E0 ldi r25,hi8(4)
885 .stabn 68,0,311,.LM126-SearchValidBit
886 .LM126:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s page 22
887 0352 0895 ret
888 .L97:
889 .stabn 68,0,287,.LM127-SearchValidBit
890 .LM127:
891 0354 842F mov r24,r20
892 0356 9927 clr r25
893 .stabn 68,0,311,.LM128-SearchValidBit
894 .LM128:
895 0358 0895 ret
896 .L90:
897 .stabn 68,0,310,.LM129-SearchValidBit
898 .LM129:
899 035a 8FEF ldi r24,lo8(255)
900 035c 90E0 ldi r25,hi8(255)
901 .stabn 68,0,311,.LM130-SearchValidBit
902 .LM130:
903 035e 0895 ret
904 .LBE8:
905 /* epilogue: frame size=0 */
906 /* epilogue: noreturn */
907 /* epilogue end (size=0) */
908 /* function SearchValidBit size 73 (73) */
909 .size SearchValidBit, .-SearchValidBit
910 .stabs "bitcnt:r(4,2)",64,0,275,21
911 .stabs "byte:r(4,2)",64,0,276,24
912 .stabs "valid:r(4,2)",64,0,277,25
913 .stabs "ptr:r(1,1)",64,0,278,26
914 .stabn 192,0,0,.LBB8-SearchValidBit
915 .stabn 224,0,0,.LBE8-SearchValidBit
916 .Lscope7:
917 .stabs "",36,0,0,.Lscope7-SearchValidBit
918 .stabs "ExtractData:F(4,2)",36,0,319,ExtractData
919 .stabs "size:P(4,2)",64,0,318,28
920 .global ExtractData
921 .type ExtractData, @function
922 ExtractData:
312:level2.c ****
313:level2.c ****
314:level2.c **** // ==================================================================
315:level2.c **** // Extracts decoded data to bytes accroding to start position
316:level2.c **** // valid start range is < 255
317:level2.c ****
318:level2.c **** uint8_t ExtractData( uint8_t size )
319:level2.c **** {
923 .stabn 68,0,319,.LM131-ExtractData
924 .LM131:
925 /* prologue: frame size=0 */
926 0360 0F93 push r16
927 0362 1F93 push r17
928 0364 CF93 push r28
929 /* prologue end (size=3) */
930 0366 C82F mov r28,r24
320:level2.c **** uint8_t value = 0;
931 .stabn 68,0,320,.LM132-ExtractData
932 .LM132:
933 .LBB9:
934 0368 10E0 ldi r17,lo8(0)
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s page 23
321:level2.c **** uint8_t valid;
322:level2.c **** uint8_t pom;
323:level2.c **** uint8_t start;
324:level2.c **** uint8_t bitcnt;
325:level2.c **** uint8_t ptr = 0;
935 .stabn 68,0,325,.LM133-ExtractData
936 .LM133:
937 036a 012F mov r16,r17
326:level2.c **** uint8_t running_one;
327:level2.c **** pom = SearchValidBit( 0 , 7 ); //find the first valid bit in 0th byte of capture_va
938 .stabn 68,0,327,.LM134-ExtractData
939 .LM134:
940 036c 67E0 ldi r22,lo8(7)
941 036e 812F mov r24,r17
942 0370 B0DF rcall SearchValidBit
328:level2.c **** if ( pom == 255 )
943 .stabn 68,0,328,.LM135-ExtractData
944 .LM135:
945 0372 8F3F cpi r24,lo8(-1)
946 0374 09F4 brne .+2
947 0376 4BC0 rjmp .L102
329:level2.c **** return size;
330:level2.c **** start = pom;
948 .stabn 68,0,330,.LM136-ExtractData
949 .LM136:
950 0378 482F mov r20,r24
331:level2.c ****
332:level2.c **** bitcnt = start % 8; //set the pointers
951 .stabn 68,0,332,.LM137-ExtractData
952 .LM137:
953 037a 682F mov r22,r24
954 037c 6770 andi r22,lo8(7)
333:level2.c **** start = start / 8;
955 .stabn 68,0,333,.LM138-ExtractData
956 .LM138:
957 037e 4695 lsr r20
958 0380 4695 lsr r20
959 0382 4695 lsr r20
334:level2.c **** running_one = 1 << ( 7 - bitcnt );
960 .stabn 68,0,334,.LM139-ExtractData
961 .LM139:
962 0384 27E0 ldi r18,lo8(7)
963 0386 30E0 ldi r19,hi8(7)
964 0388 261B sub r18,r22
965 038a 3109 sbc r19,__zero_reg__
966 038c 81E0 ldi r24,lo8(1)
967 038e 90E0 ldi r25,hi8(1)
968 0390 02C0 rjmp 2f
969 0392 880F 1: lsl r24
970 0394 991F rol r25
971 0396 2A95 2: dec r18
972 0398 E2F7 brpl 1b
973 039a 582F mov r21,r24
335:level2.c ****
336:level2.c **** pom = capture.capture_data[ start ] & running_one; //check the 1st bit is '1'
974 .stabn 68,0,336,.LM140-ExtractData
975 .LM140:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s page 24
976 039c E42F mov r30,r20
977 039e FF27 clr r31
978 03a0 E050 subi r30,lo8(-(capture))
979 03a2 F040 sbci r31,hi8(-(capture))
980 03a4 8081 ld r24,Z
981 03a6 8523 and r24,r21
337:level2.c ****
338:level2.c **** if ( pom == 0 )
982 .stabn 68,0,338,.LM141-ExtractData
983 .LM141:
984 03a8 91F1 breq .L102
339:level2.c **** return size;
340:level2.c ****
341:level2.c **** while ( size > 0 )
985 .stabn 68,0,341,.LM142-ExtractData
986 .LM142:
987 03aa CC23 tst r28
988 03ac 81F1 breq .L102
989 .L108:
342:level2.c **** {
343:level2.c **** if ( bitcnt == 7 ) //increment position to next bit
990 .stabn 68,0,343,.LM143-ExtractData
991 .LM143:
992 03ae 6730 cpi r22,lo8(7)
993 03b0 21F4 brne .L104
344:level2.c **** {
345:level2.c **** bitcnt = 0;
994 .stabn 68,0,345,.LM144-ExtractData
995 .LM144:
996 03b2 60E0 ldi r22,lo8(0)
346:level2.c **** running_one = 0x80;
997 .stabn 68,0,346,.LM145-ExtractData
998 .LM145:
999 03b4 50E8 ldi r21,lo8(-128)
347:level2.c **** start++;
1000 .stabn 68,0,347,.LM146-ExtractData
1001 .LM146:
1002 03b6 4F5F subi r20,lo8(-(1))
1003 03b8 02C0 rjmp .L105
1004 .L104:
348:level2.c **** }
349:level2.c **** else
350:level2.c **** {
351:level2.c **** bitcnt++;
1005 .stabn 68,0,351,.LM147-ExtractData
1006 .LM147:
1007 03ba 6F5F subi r22,lo8(-(1))
352:level2.c **** running_one >>= 1;
1008 .stabn 68,0,352,.LM148-ExtractData
1009 .LM148:
1010 03bc 5695 lsr r21
1011 .L105:
353:level2.c **** }
354:level2.c ****
355:level2.c **** pom = capture.capture_data[ start ] & running_one;
1012 .stabn 68,0,355,.LM149-ExtractData
1013 .LM149:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s page 25
1014 03be E42F mov r30,r20
1015 03c0 FF27 clr r31
1016 03c2 E050 subi r30,lo8(-(capture))
1017 03c4 F040 sbci r31,hi8(-(capture))
1018 03c6 8081 ld r24,Z
1019 03c8 8523 and r24,r21
356:level2.c **** value >>= 1;
1020 .stabn 68,0,356,.LM150-ExtractData
1021 .LM150:
1022 03ca 0695 lsr r16
357:level2.c **** if ( pom != 0 )
1023 .stabn 68,0,357,.LM151-ExtractData
1024 .LM151:
1025 03cc 8111 cpse r24,__zero_reg__
358:level2.c **** value |= 0x80;
1026 .stabn 68,0,358,.LM152-ExtractData
1027 .LM152:
1028 03ce 0068 ori r16,lo8(-128)
1029 .L106:
359:level2.c ****
360:level2.c **** valid = capture.capture_valid[ start ] & running_one;
1030 .stabn 68,0,360,.LM153-ExtractData
1031 .LM153:
1032 03d0 E058 subi r30,lo8(-(128))
1033 03d2 FF4F sbci r31,hi8(-(128))
1034 03d4 8081 ld r24,Z
1035 03d6 8523 and r24,r21
361:level2.c **** if ( valid != 0 )
1036 .stabn 68,0,361,.LM154-ExtractData
1037 .LM154:
1038 03d8 D1F4 brne .L102
362:level2.c **** break;
363:level2.c **** size--;
1039 .stabn 68,0,363,.LM155-ExtractData
1040 .LM155:
1041 03da C150 subi r28,lo8(-(-1))
364:level2.c **** data_buffer[ ptr / 8 ] = value >> ( 7 - ( ptr & 7 ) ); //always store the byte
1042 .stabn 68,0,364,.LM156-ExtractData
1043 .LM156:
1044 03dc 812F mov r24,r17
1045 03de 8695 lsr r24
1046 03e0 8695 lsr r24
1047 03e2 8695 lsr r24
1048 03e4 E82F mov r30,r24
1049 03e6 FF27 clr r31
1050 03e8 E050 subi r30,lo8(-(data_buffer))
1051 03ea F040 sbci r31,hi8(-(data_buffer))
1052 03ec 202F mov r18,r16
1053 03ee 3327 clr r19
1054 03f0 812F mov r24,r17
1055 03f2 9927 clr r25
1056 03f4 8095 com r24
1057 03f6 9095 com r25
1058 03f8 8770 andi r24,lo8(7)
1059 03fa 9070 andi r25,hi8(7)
1060 03fc 02C0 rjmp 2f
1061 03fe 3595 1: asr r19
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s page 26
1062 0400 2795 ror r18
1063 0402 8A95 2: dec r24
1064 0404 E2F7 brpl 1b
1065 0406 2083 st Z,r18
365:level2.c **** ptr++;
1066 .stabn 68,0,365,.LM157-ExtractData
1067 .LM157:
1068 0408 1F5F
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -