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 + -
显示快捷键?