📄 lcd_gbk.lst
字号:
324 014c 6C01 movw r22,r10
83:LCD\LCD_GBK.c **** sector_offset = temp1/BytesPerSector;
325 ,r16
326 movw r18,r14
327 014e 8091 0000 call __udivmodsi4
328 0152 9091 0000 movw r6,r18
329 0156 7C01 clr r8
330 0158 00E0 clr r9
331 015a 10E0 lds r22,GBK12
84:LCD\LCD_GBK.c **** byte_offset = temp1%BytesPerSector;
85:LCD\LCD_GBK.c **** if(FAT_ReadSector(GBK12 + sector_offset,buffer))return 1;
332 3,(GBK12)+1
333 lds r24,(GBK12)+2
334 015c C601 lds r25,(GBK12)+3
335 015e B501 add r22,r6
336 0160 A801 adc r23,r7
337 0162 9701 adc r24,r8
338 0164 0E94 0000 adc r25,r9
339 0168 3901 lds r30,FAT_ReadSector
340 016a 8824 lds r31,(FAT_ReadSector)+1
341 016c 9924 movw r4,r28
342 016e 6091 0000 sec
343 0172 7091 0000 adc r4,__zero_reg__
344 0176 8091 0000 adc r5,__zero_reg__
345 017a 9091 0000 movw r20,r4
346 017e 660D icall
347 0180 771D tst r24
348 0182 881D breq .+2
349 0184 991D rjmp .L9
351 018a F091 0000 .LM23:
352 018e 2E01 movw r24,r12
353 0190 0894 movw r22,r10
354 0192 411C movw r20,r16
355 0194 511C movw r18,r14
356 0196 A201 call __udivmodsi4
357 0198 0995 movw r20,r4
358 019a 8823 add r20,r22
359 019c 01F0 adc r21,r23
361 .LM24:
362 ldi r24,hi8(489)
363 01a0 C601 cpi r22,lo8(489)
364 01a2 B501 cpc r23,r24
365 01a4 A801 brlo .L13
367 01a8 0E94 0000 .LM25:
368 01ac A201 lds r18,BytesPerSector
369 01ae 460F lds r19,(BytesPerSector)+1
370 01b0 571F sub r18,r22
86:LCD\LCD_GBK.c **** if(byte_offset>488)
371 (0)
372 ldi r21,hi8(0)
373 01b2 81E0 rjmp .L15
374 01b4 693E .L16:
375 01b6 7807 subi r30,lo8(-(GBK_Buffer))
376 01b8 00F0 sbci r31,hi8(-(GBK_Buffer))
87:LCD\LCD_GBK.c **** {
88:LCD\LCD_GBK.c **** for(temp2 = 0,temp1 = byte_offset;temp2<(BytesPerSector - byte_offset);temp2++,temp1++)GBK_Buffer
377 4,X+
378 st Z,r24
379 01ba 2091 0000 .L15:
380 01be 3091 0000 mov r17,r20
381 01c2 261B subi r20,lo8(-(1))
382 01c4 370B sbci r21,hi8(-(1))
383 01c6 DA01 mov r30,r17
384 01c8 40E0 ldi r31,lo8(0)
385 01ca 50E0 cp r30,r18
386 01cc 00C0 cpc r31,r19
387 brlo .L16
389 01d0 F040 .LM26:
390 01d2 8D91 lds r22,GBK12
391 01d4 8083 lds r23,(GBK12)+1
392 lds r24,(GBK12)+2
393 01d6 142F lds r25,(GBK12)+3
394 01d8 4F5F subi r22,lo8(-(1))
395 01da 5F4F sbci r23,hi8(-(1))
396 01dc E12F sbci r24,hlo8(-(1))
397 01de F0E0 sbci r25,hhi8(-(1))
398 01e0 E217 add r22,r6
399 01e2 F307 adc r23,r7
400 01e4 00F0 adc r24,r8
89:LCD\LCD_GBK.c **** if(FAT_ReadSector(GBK12 + sector_offset + 1,buffer))return 1;
401 _ReadSector
402 lds r31,(FAT_ReadSector)+1
403 01e6 6091 0000 movw r14,r28
404 01ea 7091 0000 sec
405 01ee 8091 0000 adc r14,__zero_reg__
406 01f2 9091 0000 adc r15,__zero_reg__
407 01f6 6F5F movw r20,r14
408 01f8 7F4F icall
409 01fa 8F4F tst r24
410 01fc 9F4F brne .L9
411 01fe 660D movw r26,r14
412 0200 771D rjmp .L19
413 0202 881D .L20:
415 0206 E091 0000 .LM27:
416 020a F091 0000 mov r30,r17
417 020e 7E01 ldi r31,lo8(0)
418 0210 0894 subi r30,lo8(-(GBK_Buffer))
419 0212 E11C sbci r31,hi8(-(GBK_Buffer))
420 0214 F11C ld r24,X+
421 0216 A701 st Z,r24
422 0218 0995 subi r17,lo8(-(1))
423 021a 8823 .L19:
424 021c 01F4 cpi r17,lo8(24)
425 021e D701 brlo .L20
426 0220 00C0 rjmp .L21
427 .L13:
90:LCD\LCD_GBK.c **** for(temp1 = 0;temp2<24;temp2++,temp1++)GBK_Buffer[temp2] = buffer[temp1];
428 GBK_Buffer)
429 ldi r31,hi8(GBK_Buffer)
430 0222 E12F .L22:
432 0226 E050 .LM28:
433 0228 F040 ld r24,X+
434 022a 8D91 st Z+,r24
435 022c 8083 ldi r24,hi8(GBK_Buffer+24)
436 022e 1F5F cpi r30,lo8(GBK_Buffer+24)
437 cpc r31,r24
438 0230 1831 breq .L21
439 0232 00F0 rjmp .L22
440 0234 00C0 .L9:
441 ldi r24,lo8(1)
442 0236 DA01 ldi r25,hi8(1)
443 0238 E0E0 rjmp .L23
444 023a F0E0 .L21:
445 ldi r24,lo8(0)
91:LCD\LCD_GBK.c **** }
92:LCD\LCD_GBK.c **** else for(temp2 = 0,temp1 = byte_offset;temp2<24;temp2++,temp1++)GBK_Buffer[temp2] = buffer[temp1];
446 23:
447 /* epilogue: frame size=512 */
448 023c 8D91 subi r28,lo8(-512)
449 023e 8193 sbci r29,hi8(-512)
450 0240 80E0 in __tmp_reg__,__SREG__
451 0242 E030 cli
452 0244 F807 out __SP_H__,r29
453 0246 01F0 out __SREG__,__tmp_reg__
454 0248 00C0 out __SP_L__,r28
455 pop r29
456 024a 81E0 pop r28
457 024c 90E0 pop r17
458 024e 00C0 pop r16
459 pop r15
460 0250 80E0 pop r14
461 0252 90E0 pop r13
462 pop r12
463 pop r11
464 0254 C050 pop r10
465 0256 DE4F pop r9
466 0258 0FB6 pop r8
467 025a F894 pop r7
468 025c DEBF pop r6
469 025e 0FBE pop r5
470 0260 CDBF pop r4
471 0262 DF91 ret
472 0264 CF91 /* epilogue end (size=24) */
473 0266 1F91 /* function Read_One_GBK12 size 219 (170) */
481 0276 9F90 .Lscope3:
484 027c 6F90 .global Read_One_GBK16
486 0280 4F90 Read_One_GBK16:
488 .LM29:
489 .LFBB4:
490 /* prologue: frame size=512 */
491 push r12
492 push r13
493 push r14
494 push r15
495 push r16
496 push r17
497 push r28
498 push r29
499 in r28,__SP_L__
500 in r29,__SP_H__
501 subi r28,lo8(512)
502 sbci r29,hi8(512)
93:LCD\LCD_GBK.c **** return 0;
94:LCD\LCD_GBK.c **** }
95:LCD\LCD_GBK.c **** unsigned char Read_One_GBK16(unsigned char *ch)
96:LCD\LCD_GBK.c **** {
503 EG__,__tmp_reg__
504 out __SP_L__,r28
505 /* prologue end (size=17) */
506 movw r30,r24
508 0286 DF92 .LM30:
509 0288 EF92 ld r24,Z
510 028a FF92 mov r18,r24
511 028c 0F93 ldi r19,lo8(0)
513 0290 CF93 .LM31:
514 0292 DF93 ldd r20,Z+1
516 0296 DEB7 .LM32:
517 0298 C050 cpi r18,129
518 029a D240 cpc r19,__zero_reg__
519 029c 0FB6 brsh .+2
520 029e F894 rjmp .L27
522 02a2 0FBE .LM33:
523 02a4 CDBF cpi r20,lo8(64)
524 brsh .+2
525 02a6 FC01 rjmp .L27
97:LCD\LCD_GBK.c **** unsigned int temp1;
98:LCD\LCD_GBK.c **** unsigned char temp2;
99:LCD\LCD_GBK.c **** unsigned int sector_offset;//扇区偏移
100:LCD\LCD_GBK.c **** unsigned int byte_offset;//字节偏移
101:LCD\LCD_GBK.c **** unsigned char buffer[512];
102:LCD\LCD_GBK.c **** temp1=*ch;
526 .LFBB4
527 .LM34:
528 02a8 8081 subi r18,lo8(-(-129))
529 02aa 282F sbci r19,hi8(-(-129))
103:LCD\LCD_GBK.c **** temp2=*(ch+1);
531 :
532 ldi r24,lo8(192)
533 02ae 4181 ldi r25,hi8(192)
104:LCD\LCD_GBK.c **** if(temp1<0x81||temp2<0x40)return 1;//不合法的汉字
534 l r18,r24
535 movw r14,r0
536 02b0 2138 mul r18,r25
537 02b2 3105 add r15,r0
538 02b4 00F4 mul r19,r24
539 02b6 00C0 add r15,r0
540 clr r1
542 02b8 4034 .LM36:
543 02ba 00F4 subi r20,lo8(-(-64))
544 02bc 00C0 add r14,r20
105:LCD\LCD_GBK.c **** temp1-=0x81;//的到类似于2312的区号
545 zero_reg__
547 02be 2158 .LM37:
548 02c0 3040 lds r16,BytesPerSector
106:LCD\LCD_GBK.c **** temp2-=0x40;//位号
107:LCD\LCD_GBK.c **** temp1*=192;//xx7f and xxff are included
549 r17,(BytesPerSector)+1
550 ldi r18,5
551 02c2 80EC 1: lsr r17
552 02c4 90E0 ror r16
553 02c6 289F dec r18
554 02c8 7001 brne 1b
556 02cc F00C .LM38:
557 02ce 389F movw r24,r14
558 02d0 F00C movw r22,r16
559 02d2 1124 call __udivmodhi4
108:LCD\LCD_GBK.c **** temp1+=temp2;//得到偏移
560 8(0)
561 ldi r25,hi8(0)
562 02d4 4054 lds r18,GBK16
563 02d6 E40E lds r19,(GBK16)+1
564 02d8 F11C lds r20,(GBK16)+2
109:LCD\LCD_GBK.c **** //temp1*=24;
110:LCD\LCD_GBK.c **** sector_offset = temp1/(BytesPerSector/32);//算出要读哪个扇区
565 r21,(GBK16)+3
566 add r22,r18
567 02da 0091 0000 adc r23,r19
568 02de 1091 0000 adc r24,r20
569 02e2 25E0 adc r25,r21
570 02e4 1695 lds r30,FAT_ReadSector
571 02e6 0795 lds r31,(FAT_ReadSector)+1
572 02e8 2A95 movw r12,r28
573 02ea 01F4 sec
111:LCD\LCD_GBK.c **** byte_offset = (temp1%(BytesPerSector/32))*32;//算出要读扇区的哪个字节
112:LCD\LCD_GBK.c **** if(FAT_ReadSector(GBK16 + sector_offset,buffer))return 1;//读要读的扇区
574 __zero_reg__
575 adc r13,__zero_reg__
576 02ec C701 movw r20,r12
577 02ee B801 icall
578 02f0 0E94 0000 tst r24
579 02f4 80E0 brne .L27
580 02f6 90E0 movw r24,r14
581 02f8 2091 0000 movw r22,r16
582 02fc 3091 0000 call __udivmodhi4
583 0300 4091 0000 movw r30,r24
584 0304 5091 0000 ldi r25,5
585 0308 620F 1: lsl r30
586 030a 731F rol r31
587 030c 841F dec r25
588 030e 951F brne 1b
589 0310 E091 0000 add r30,r12
590 0314 F091 0000 adc r31,r13
591 0318 6E01 ldi r26,lo8(GBK_Buffer)
592 031a 0894 ldi r27,hi8(GBK_Buffer)
593 031c C11C .L31:
595 0320 A601 .LM39:
596 0322 0995 ld r24,Z+
597 0324 8823 st X+,r24
598 0326 01F4 ldi r24,hi8(GBK_Buffer+32)
599 0328 C701 cpi r26,lo8(GBK_Buffer+32)
600 032a B801 cpc r27,r24
601 032c 0E94 0000 brne .L31
602 0330 FC01 ldi r24,lo8(0)
603 0332 95E0 ldi r25,hi8(0)
604 0334 EE0F rjmp .L33
605 0336 FF1F .L27:
606 0338 9A95 ldi r24,lo8(1)
607 033a 01F4 ldi r25,hi8(1)
608 033c EC0D .L33:
609 033e FD1D /* epilogue: frame size=512 */
610 0340 A0E0 subi r28,lo8(-512)
611 0342 B0E0 sbci r29,hi8(-512)
612 in __tmp_reg__,__SREG__
113:LCD\LCD_GBK.c **** for(temp2 = 0,temp1 = byte_offset;temp2<32;temp2++,temp1++)GBK_Buffer[temp2] = buffer[temp1];//复
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -