📄 gui_bmp_serialize.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\gui_bmp_serialize.o --depend=.\Obj\gui_bmp_serialize.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\Core\GUI_BMP_Serialize.c]
THUMB
AREA ||i.GUI_BMP_Serialize||, CODE, READONLY, ALIGN=1
GUI_BMP_Serialize PROC
;;;128 */
;;;129 void GUI_BMP_Serialize(GUI_CALLBACK_VOID_U8_P * pfSerialize, void * p) {
000000 b57c PUSH {r2-r6,lr}
000002 4605 MOV r5,r0
000004 460e MOV r6,r1
;;;130 GUI_BMP_SerializeEx(pfSerialize, 0, 0, LCD_GetXSize(), LCD_GetYSize(), p);
000006 f7fffffe BL LCD_GetYSize
00000a 4604 MOV r4,r0
00000c f7fffffe BL LCD_GetXSize
000010 e9cd4600 STRD r4,r6,[sp,#0]
000014 4603 MOV r3,r0
000016 2200 MOVS r2,#0
000018 4611 MOV r1,r2
00001a 4628 MOV r0,r5
00001c f7fffffe BL GUI_BMP_SerializeEx
;;;131 }
000020 bd7c POP {r2-r6,pc}
;;;132
ENDP
AREA ||i.GUI_BMP_SerializeEx||, CODE, READONLY, ALIGN=1
GUI_BMP_SerializeEx PROC
;;;67 */
;;;68 void GUI_BMP_SerializeEx(GUI_CALLBACK_VOID_U8_P * pfSerialize, int x0, int y0, int xSize, int ySize, void * p) {
000000 e92d5ffc PUSH {r2-r12,lr}
000004 4607 MOV r7,r0
000006 4688 MOV r8,r1
000008 4691 MOV r9,r2
00000a 469a MOV r10,r3
;;;69 int x, y, i;
;;;70 U32 BitmapOffset, FileSize;
;;;71 int BPP = LCD_GetBitsPerPixel();
00000c 9d0c LDR r5,[sp,#0x30]
00000e f7fffffe BL LCD_GetBitsPerPixel
000012 4606 MOV r6,r0
;;;72 int BytesPerLine = ((BPP > 8) ? (2 * xSize + 2) : (xSize + 3)) & ~3;
000014 f10a0103 ADD r1,r10,#3
000018 2808 CMP r0,#8
00001a dd03 BLE |L2.36|
00001c ea4f014a LSL r1,r10,#1
000020 f1010102 ADD r1,r1,#2
|L2.36|
000024 f0210003 BIC r0,r1,#3
;;;73 int NumColors = (BPP > 8) ? 0 : (1 << BPP);
000028 9000 STR r0,[sp,#0]
00002a f04f0000 MOV r0,#0
00002e dc03 BGT |L2.56|
000030 f04f0001 MOV r0,#1
000034 fa00f006 LSL r0,r0,r6
|L2.56|
;;;74 /* Write BITMAPFILEHEADER */
;;;75 BitmapOffset = SIZEOF_BITMAPFILEHEADER
000038 2136 MOVS r1,#0x36
00003a eb010480 ADD r4,r1,r0,LSL #2
00003e 4683 MOV r11,r0 ;73
;;;76 + SIZEOF_BITMAPINFOHEADER
;;;77 + NumColors * 4;
;;;78 FileSize = BitmapOffset
000040 9800 LDR r0,[sp,#0]
;;;79 + ySize * BytesPerLine;
;;;80 _SendU16(pfSerialize, DIB_HEADER_MARKER, p); /* bfType */
000042 f6445142 MOV r1,#0x4d42
000046 fb054000 MLA r0,r5,r0,r4 ;78
00004a 9001 STR r0,[sp,#4]
00004c 4638 MOV r0,r7
00004e 9a0d LDR r2,[sp,#0x34]
000050 f7fffffe BL _SendU16
;;;81 _SendU32(pfSerialize, FileSize, p); /* bfSize */
000054 4638 MOV r0,r7
000056 9a0d LDR r2,[sp,#0x34]
000058 9901 LDR r1,[sp,#4]
00005a f7fffffe BL _SendU32
;;;82 _SendU32(pfSerialize, 0, p); /* bfReserved1, bfReserved2 */
00005e 2100 MOVS r1,#0
000060 4638 MOV r0,r7
000062 9a0d LDR r2,[sp,#0x34]
000064 f7fffffe BL _SendU32
;;;83 _SendU32(pfSerialize, BitmapOffset, p); /* bfOffBits */
000068 4621 MOV r1,r4
00006a 4638 MOV r0,r7
00006c 9a0d LDR r2,[sp,#0x34]
00006e f7fffffe BL _SendU32
;;;84 /* Write BITMAPINFOHEADER */
;;;85 _SendU32(pfSerialize, SIZEOF_BITMAPINFOHEADER, p); /* biSize */
000072 2128 MOVS r1,#0x28
000074 4638 MOV r0,r7
000076 9a0d LDR r2,[sp,#0x34]
000078 f7fffffe BL _SendU32
;;;86 _SendU32(pfSerialize, xSize, p); /* biWidth */
00007c 4651 MOV r1,r10
00007e 4638 MOV r0,r7
000080 9a0d LDR r2,[sp,#0x34]
000082 f7fffffe BL _SendU32
;;;87 _SendU32(pfSerialize, ySize, p); /* biHeighth */
000086 4629 MOV r1,r5
000088 4638 MOV r0,r7
00008a 9a0d LDR r2,[sp,#0x34]
00008c f7fffffe BL _SendU32
;;;88 _SendU16(pfSerialize, 1, p); /* biPlanes */
000090 2101 MOVS r1,#1
000092 4638 MOV r0,r7
000094 9a0d LDR r2,[sp,#0x34]
000096 f7fffffe BL _SendU16
;;;89 _SendU16(pfSerialize, (BPP <= 8) ? 8 : 16, p); /* biBitCount */
00009a 2108 MOVS r1,#8
00009c 2e08 CMP r6,#8
00009e dd00 BLE |L2.162|
0000a0 2110 MOVS r1,#0x10
|L2.162|
0000a2 4638 MOV r0,r7
0000a4 9a0d LDR r2,[sp,#0x34]
0000a6 f7fffffe BL _SendU16
;;;90 _SendU32(pfSerialize, 0, p); /* biCompression */
0000aa 2100 MOVS r1,#0
0000ac 4638 MOV r0,r7
0000ae 9a0d LDR r2,[sp,#0x34]
0000b0 f7fffffe BL _SendU32
;;;91 _SendU32(pfSerialize, 0, p); /* biSizeImage */
0000b4 2100 MOVS r1,#0
0000b6 4638 MOV r0,r7
0000b8 9a0d LDR r2,[sp,#0x34]
0000ba f7fffffe BL _SendU32
;;;92 _SendU32(pfSerialize, 0, p); /* biXPelsPerMeter */
0000be 2100 MOVS r1,#0
0000c0 4638 MOV r0,r7
0000c2 9a0d LDR r2,[sp,#0x34]
0000c4 f7fffffe BL _SendU32
;;;93 _SendU32(pfSerialize, 0, p); /* biYPelsPerMeter */
0000c8 2100 MOVS r1,#0
0000ca 4638 MOV r0,r7
0000cc 9a0d LDR r2,[sp,#0x34]
0000ce f7fffffe BL _SendU32
;;;94 _SendU32(pfSerialize, NumColors, p); /* biClrUsed */
0000d2 4659 MOV r1,r11
0000d4 4638 MOV r0,r7
0000d6 9a0d LDR r2,[sp,#0x34]
0000d8 f7fffffe BL _SendU32
;;;95 _SendU32(pfSerialize, 0, p); /* biClrImportant */
0000dc 2100 MOVS r1,#0
0000de 4638 MOV r0,r7
0000e0 9a0d LDR r2,[sp,#0x34]
0000e2 f7fffffe BL _SendU32
;;;96 /* Write palette */
;;;97 for (i = 0; i < NumColors; i++) {
0000e6 2400 MOVS r4,#0
0000e8 e00f B |L2.266|
|L2.234|
;;;98 U32 Color;
;;;99 Color = GUI_Index2Color(i);
0000ea 4620 MOV r0,r4
0000ec f7fffffe BL GUI_Index2Color
;;;100 Color = ((Color >> 16) & 255) | (Color & 0xff00) | ((Color & 0xff) << 16);
0000f0 f400417f AND r1,r0,#0xff00
0000f4 f3c04207 UBFX r2,r0,#16,#8
0000f8 4311 ORRS r1,r1,r2
0000fa b2c0 UXTB r0,r0
0000fc ea414100 ORR r1,r1,r0,LSL #16
;;;101 _SendU32(pfSerialize, Color, p);
000100 4638 MOV r0,r7
000102 9a0d LDR r2,[sp,#0x34]
000104 f7fffffe BL _SendU32
000108 1c64 ADDS r4,r4,#1 ;97
|L2.266|
00010a 455c CMP r4,r11 ;97
00010c dbed BLT |L2.234|
|L2.270|
;;;102 }
;;;103 /* Write pixels */
;;;104 for (y = ySize - 1; y >= 0; y--) {
00010e 1e6d SUBS r5,r5,#1
000110 d43a BMI |L2.392|
;;;105 for (x = 0; x < xSize; x++) {
000112 2400 MOVS r4,#0
000114 e02b B |L2.366|
|L2.278|
;;;106 if (BPP <= 8) {
000116 2e08 CMP r6,#8
;;;107 pfSerialize(LCD_GetPixelIndex(x0 + x, y0 + y), p);
000118 eb090105 ADD r1,r9,r5
00011c eb080004 ADD r0,r8,r4
000120 dc05 BGT |L2.302|
000122 f7fffffe BL LCD_GetPixelIndex
000126 b2c0 UXTB r0,r0
000128 990d LDR r1,[sp,#0x34]
00012a 47b8 BLX r7
00012c e01e B |L2.364|
|L2.302|
;;;108 } else {
;;;109 U16 Color16;
;;;110 U32 Color = LCD_GetPixelColor(x0 + x, y0 + y);
00012e f7fffffe BL LCD_GetPixelColor
;;;111 int b = ((Color >> 16) * 31 + 127) / 255;
000132 0c01 LSRS r1,r0,#16
000134 ebc11141 RSB r1,r1,r1,LSL #5
000138 317f ADDS r1,r1,#0x7f
00013a 22ff MOVS r2,#0xff
00013c fbb1f3f2 UDIV r3,r1,r2
;;;112 int g = (((Color >> 8) & 255) * 31 + 127) / 255;
000140 f3c02107 UBFX r1,r0,#8,#8
;;;113 int r = ((Color & 255) * 31 + 127) / 255;
000144 b2c0 UXTB r0,r0
000146 ebc01040 RSB r0,r0,r0,LSL #5
00014a ebc11141 RSB r1,r1,r1,LSL #5 ;112
00014e 307f ADDS r0,r0,#0x7f
000150 317f ADDS r1,r1,#0x7f ;112
000152 fbb0f0f2 UDIV r0,r0,r2
000156 fbb1f1f2 UDIV r1,r1,r2 ;112
;;;114 Color16 = (r << 10) | (g << 5) | b; /* 16 bpp Bitmaps in windows are 555: rrrrrgggggbbbbb */
00015a 0280 LSLS r0,r0,#10
00015c ea401041 ORR r0,r0,r1,LSL #5
000160 4318 ORRS r0,r0,r3
000162 b281 UXTH r1,r0
;;;115 _SendU16(pfSerialize, Color16, p);
000164 4638 MOV r0,r7
000166 9a0d LDR r2,[sp,#0x34]
000168 f7fffffe BL _SendU16
|L2.364|
00016c 1c64 ADDS r4,r4,#1 ;105
|L2.366|
00016e 4554 CMP r4,r10 ;105
000170 dbd1 BLT |L2.278|
;;;116 }
;;;117 }
;;;118 /* Align pointer to next U32 */
;;;119 for (i = BytesPerLine & 3; i > 0; i--) {
000172 9800 LDR r0,[sp,#0]
000174 f0000403 AND r4,r0,#3
000178 e003 B |L2.386|
|L2.378|
;;;120 pfSerialize(0, p);
00017a 2000 MOVS r0,#0
00017c 990d LDR r1,[sp,#0x34]
00017e 47b8 BLX r7
000180 1e64 SUBS r4,r4,#1 ;119
|L2.386|
000182 2c00 CMP r4,#0 ;119
000184 dcf9 BGT |L2.378|
000186 e7c2 B |L2.270|
|L2.392|
;;;121 }
;;;122 }
;;;123 }
000188 e8bd9ffc POP {r2-r12,pc}
;;;124
ENDP
AREA ||i._SendU16||, CODE, READONLY, ALIGN=1
_SendU16 PROC
;;;43 */
;;;44 static void _SendU16(GUI_CALLBACK_VOID_U8_P * pfSerialize, U16 Data, void * p) {
000000 b570 PUSH {r4-r6,lr}
000002 460d MOV r5,r1
000004 4604 MOV r4,r0
000006 4616 MOV r6,r2
;;;45 (*pfSerialize)((U8)Data, p);
000008 4611 MOV r1,r2
00000a b2e8 UXTB r0,r5
00000c 47a0 BLX r4
;;;46 (*pfSerialize)(Data >> 8, p);
00000e 0a28 LSRS r0,r5,#8
000010 4631 MOV r1,r6
000012 46a4 MOV r12,r4
000014 e8bd4070 POP {r4-r6,lr}
000018 4760 BX r12
;;;47 }
;;;48
ENDP
AREA ||i._SendU32||, CODE, READONLY, ALIGN=1
_SendU32 PROC
;;;52 */
;;;53 static void _SendU32(GUI_CALLBACK_VOID_U8_P * pfSerialize, U32 Data, void * p) {
000000 b570 PUSH {r4-r6,lr}
000002 460c MOV r4,r1
000004 4605 MOV r5,r0
000006 4616 MOV r6,r2
;;;54 _SendU16(pfSerialize, (U16)Data, p);
000008 b289 UXTH r1,r1
00000a f7fffffe BL _SendU16
;;;55 _SendU16(pfSerialize, Data >> 16, p);
00000e 0c21 LSRS r1,r4,#16
000010 4632 MOV r2,r6
000012 4628 MOV r0,r5
000014 e8bd4070 POP {r4-r6,lr}
000018 f7ffbffe B.W _SendU16
;;;56 }
;;;57
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -