gui_adddecshift.txt
来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 200 行
TXT
200 行
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\gui_adddecshift.o --depend=.\Obj\gui_adddecshift.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_AddDecShift.c]
THUMB
AREA ||i.GUI_AddDecShift||, CODE, READONLY, ALIGN=2
GUI_AddDecShift PROC
;;;103 */
;;;104 void GUI_AddDecShift(I32 v, U8 Len, U8 Shift, char**ps) {
000000 b5f0 PUSH {r4-r7,lr}
000002 2800 CMP r0,#0
000004 da07 BGE |L1.22|
000006 681c LDR r4,[r3,#0]
000008 262d MOVS r6,#0x2d
00000a 1c65 ADDS r5,r4,#1
00000c 601d STR r5,[r3,#0]
00000e 4240 RSBS r0,r0,#0
000010 2501 MOVS r5,#1
000012 7026 STRB r6,[r4,#0]
000014 e000 B |L1.24|
|L1.22|
000016 2500 MOVS r5,#0
|L1.24|
;;;105 char c;
;;;106 long d;
;;;107 #ifndef _CM16C
;;;108 Len -= _Check_NegLong(&v, ps); /* TASKING: Tool internal error S003: asertion failed - please report */
000018 1b49 SUBS r1,r1,r5
00001a b2c9 UXTB r1,r1
;;;109 #else
;;;110 if (v < 0) {
;;;111 *(*ps)++ = '-';
;;;112 v = -v;
;;;113 }
;;;114 #endif
;;;115 if (Shift) {
00001c b10a CBZ r2,|L1.34|
;;;116 Len--;
00001e 1e49 SUBS r1,r1,#1
000020 b2c9 UXTB r1,r1
|L1.34|
;;;117 }
;;;118 #if GUI_DEBUG_LEVEL >1
;;;119 if (Len > 9) {
;;;120 Len = 9;
;;;121 GUI_DEBUG_ERROROUT("Can not display more than 9 dec. digits");
;;;122 }
;;;123 #endif
;;;124 if ((U32)v >= GUI_Pow10[Len])
000022 4e13 LDR r6,|L1.112|
000024 f8564021 LDR r4,[r6,r1,LSL #2]
000028 4284 CMP r4,r0
00002a d800 BHI |L1.46|
;;;125 v = GUI_Pow10[Len] - 1;
00002c 1e60 SUBS r0,r4,#1
|L1.46|
;;;126 while (Len) {
;;;127 if (Len-- == Shift)
;;;128 *(*ps)++ = GUI_DecChar;
00002e f8dfc044 LDR r12,|L1.116|
;;;129 d = GUI_Pow10[Len];
;;;130 c = (char) (v / d);
;;;131 v -= c * d;
;;;132 *(*ps)++ = c + '0';
000032 e016 B |L1.98|
|L1.52|
000034 460c MOV r4,r1 ;127
000036 1e49 SUBS r1,r1,#1 ;127
000038 b2c9 UXTB r1,r1 ;127
00003a 4294 CMP r4,r2 ;127
00003c d105 BNE |L1.74|
00003e 681c LDR r4,[r3,#0] ;128
000040 f89c7000 LDRB r7,[r12,#0] ;128 ; GUI_DecChar
000044 1c65 ADDS r5,r4,#1 ;128
000046 601d STR r5,[r3,#0] ;128
000048 7027 STRB r7,[r4,#0] ;128
|L1.74|
00004a f8565021 LDR r5,[r6,r1,LSL #2] ;129
00004e fb90f4f5 SDIV r4,r0,r5 ;130
000052 b2e4 UXTB r4,r4 ;130
000054 fb040015 MLS r0,r4,r5,r0 ;131
000058 681d LDR r5,[r3,#0]
00005a 3430 ADDS r4,r4,#0x30
00005c 1c6f ADDS r7,r5,#1
00005e 601f STR r7,[r3,#0]
000060 702c STRB r4,[r5,#0]
|L1.98|
000062 2900 CMP r1,#0 ;126
000064 d1e6 BNE |L1.52|
;;;133 }
;;;134 **ps = 0;
000066 6819 LDR r1,[r3,#0]
000068 2000 MOVS r0,#0
00006a 7008 STRB r0,[r1,#0]
;;;135 }
00006c bdf0 POP {r4-r7,pc}
;;;136
ENDP
00006e 0000 DCW 0x0000
|L1.112|
DCD ||.constdata||
|L1.116|
DCD GUI_DecChar
AREA ||i.GUI_AddSign||, CODE, READONLY, ALIGN=1
GUI_AddSign PROC
;;;80 */
;;;81 long GUI_AddSign(long v, char**ps) {
000000 b510 PUSH {r4,lr}
;;;82 char c;
;;;83 if (v < 0) {
000002 2800 CMP r0,#0
000004 da02 BGE |L2.12|
;;;84 c = '-';
000006 222d MOVS r2,#0x2d
;;;85 v = -v;
000008 4240 RSBS r0,r0,#0
00000a e000 B |L2.14|
|L2.12|
;;;86 } else {
;;;87 c = '+';
00000c 222b MOVS r2,#0x2b
|L2.14|
;;;88 }
;;;89 *(*ps)++ = c;
00000e 680b LDR r3,[r1,#0]
000010 1c5c ADDS r4,r3,#1
000012 600c STR r4,[r1,#0]
000014 701a STRB r2,[r3,#0]
;;;90 **ps = '\0';
000016 6809 LDR r1,[r1,#0]
000018 2200 MOVS r2,#0
00001a 700a STRB r2,[r1,#0]
;;;91 return v;
;;;92 }
00001c bd10 POP {r4,pc}
;;;93
ENDP
AREA ||i.GUI_Long2Len||, CODE, READONLY, ALIGN=2
GUI_Long2Len PROC
;;;64 */
;;;65 int GUI_Long2Len(I32 vSign) {
000000 1e01 SUBS r1,r0,#0
000002 b510 PUSH {r4,lr}
;;;66 int Len = 1;
000004 f04f0001 MOV r0,#1
;;;67 I32 v = (vSign > 0) ? vSign : -vSign;
000008 460b MOV r3,r1
00000a dc00 BGT |L3.14|
00000c 424b RSBS r3,r1,#0
|L3.14|
;;;68 while (( ((U32)v) >= GUI_Pow10[Len]) && (Len < 9)) {
00000e 4a06 LDR r2,|L3.40|
;;;69 Len++;
000010 e000 B |L3.20|
|L3.18|
000012 1c40 ADDS r0,r0,#1
|L3.20|
000014 f8524020 LDR r4,[r2,r0,LSL #2] ;68
000018 429c CMP r4,r3 ;68
00001a d801 BHI |L3.32|
00001c 2809 CMP r0,#9 ;68
00001e dbf8 BLT |L3.18|
|L3.32|
;;;70 }
;;;71 if (vSign < 0) {
000020 2900 CMP r1,#0
000022 da00 BGE |L3.38|
;;;72 Len++;
000024 1c40 ADDS r0,r0,#1
|L3.38|
;;;73 }
;;;74 return Len;
;;;75 }
000026 bd10 POP {r4,pc}
;;;76
ENDP
|L3.40|
DCD ||.constdata||
AREA ||.constdata||, DATA, READONLY, ALIGN=2
GUI_Pow10
DCD 0x00000001
DCD 0x0000000a
DCD 0x00000064
DCD 0x000003e8
DCD 0x00002710
DCD 0x000186a0
DCD 0x000f4240
DCD 0x00989680
DCD 0x05f5e100
DCD 0x3b9aca00
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?