⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ggt_func.lst

📁 ARM下的多任务操作系统源码:GogotoOS
💻 LST
📖 第 1 页 / 共 5 页
字号:
*** CODE SEGMENT '?PR?StrToInt?A?GGT_Func':
  254: INT32 StrToInt(UINT8 *pStr)
 00000000  E92D4010  STMDB       R13!,{R4,LR}
 00000004  E1A04000  MOV         R4,R0 ; pStr
 00000008  ---- Variable 'pStr' assigned to Register 'R4' ----
  256:     if('-' == *pStr)
 00000008  E1A00004  MOV         R0,R4 ; pStr
 0000000C  E5D00000  LDRB        R0,[R0,#0x0] ; pStr
 00000010  E350002D  CMP         R0,#0x002D
 00000014  1A000004  BNE         L_40  ; Targ=0x2C
  257:         return(-((int)StrToDWord(pStr + 1)));
 00000018  E1A00004  MOV         R0,R4 ; pStr
 0000001C  E2800001  ADD         R0,R0,#0x0001 ; pStr
 00000020  EBFFFFF6  BL          StrToDWord?A  ; Targ=0x0
 00000024  E2600000  RSB         R0,R0,#0x0000 ; StrToDWord?A
 00000028  EA000001  B           L_41  ; Targ=0x34
 0000002C          L_40:
  259:         return((int)StrToDWord(pStr));
 0000002C  E1A00004  MOV         R0,R4 ; pStr
 00000030  EBFFFFF2  BL          StrToDWord?A  ; Targ=0x0
  260: }
 00000034          L_41:
 00000034  E8BD0010  LDMIA       R13!,{R4}
 00000038  E8BD0008  LDMIA       R13!,{R3}
 0000003C  E12FFF13  BX          R3
 00000040          ENDP ; 'StrToInt?A'


*** CODE SEGMENT '?PR?HexCharToDWord?A?GGT_Func':
  262: UINT32 HexCharToDWord(UINT8 Char)
 00000000  E1A02000  MOV         R2,R0 ; Char
ARM COMPILER V2.32a,  GGT_Func                                                             28/02/08  23:05:55  PAGE 16  

 00000004  ---- Variable 'Char' assigned to Register 'R2' ----
  264:     if(('0' <= Char) && ('9' >= Char))
 00000004  E1A00002  MOV         R0,R2 ; Char
 00000008  E1A01C00  MOV         R1,R0,LSL #24 ; Char
 0000000C  E1A01C21  MOV         R1,R1,LSR #24
 00000010  E3510030  CMP         R1,#0x0030
 00000014  BA000003  BLT         L_43  ; Targ=0x28
 00000018  E3510039  CMP         R1,#0x0039
 0000001C  CA000001  BGT         L_43  ; Targ=0x28
  265:         return(Char - '0');
 00000020  E2410030  SUB         R0,R1,#0x0030
 00000024  EA00000C  B           L_44  ; Targ=0x5C
 00000028          L_43:
  267:     if(('A' <= Char) && ('F' >= Char))
 00000028  E3510041  CMP         R1,#0x0041
 0000002C  BA000003  BLT         L_46  ; Targ=0x40
 00000030  E3510046  CMP         R1,#0x0046
 00000034  CA000001  BGT         L_46  ; Targ=0x40
  268:         return(10 + (Char - 'A'));
 00000038  E2410037  SUB         R0,R1,#0x0037
 0000003C  EA000006  B           L_44  ; Targ=0x5C
 00000040          L_46:
  270:     if(('a' <= Char) && ('f' >= Char))
 00000040  E3510061  CMP         R1,#0x0061
 00000044  BA000003  BLT         L_48  ; Targ=0x58
 00000048  E3510066  CMP         R1,#0x0066
 0000004C  CA000001  BGT         L_48  ; Targ=0x58
  271:         return(10 + (Char - 'a'));
 00000050  E2410057  SUB         R0,R1,#0x0057
 00000054  EA000000  B           L_44  ; Targ=0x5C
 00000058          L_48:
  273:         return(0);
 00000058  E3A00000  MOV         R0,#0x0
  274: }
 0000005C          L_44:
 0000005C  E12FFF1E  BX          R14
 00000060          ENDP ; 'HexCharToDWord?A'


*** CODE SEGMENT '?PR?HexToDWord?A?GGT_Func':
  276: UINT32 HexToDWord(UINT8 *pStr)
 00000000  E92D4010  STMDB       R13!,{R4,LR}
 00000004  E1A04000  MOV         R4,R0 ; pStr
 00000008  ---- Variable 'pStr' assigned to Register 'R4' ----
  277: {
 00000008            ; SCOPE-START
  280:     R = 0;
 00000008  E3A03000  MOV         R3,#0x0
 0000000C  ---- Variable 'R' assigned to Register 'R3' ----
  281:     while(*pStr)
 0000000C  EA000005  B           L_50  ; Targ=0x28
 00000010          L_52:
  283:         R = R * 16 + HexCharToDWord(*pStr);
 00000010  E1A00004  MOV         R0,R4 ; pStr
 00000014  E5D00000  LDRB        R0,[R0,#0x0] ; pStr
 00000018  EBFFFFF8  BL          HexCharToDWord?A  ; Targ=0x0
 0000001C  E1A03203  MOV         R3,R3,LSL #4 ; R
 00000020  E0833000  ADD         R3,R3,R0 ; HexCharToDWord?A
  284:         pStr++;
 00000024  E2844001  ADD         R4,R4,#0x0001 ; pStr
  285:     }
 00000028          L_50:
 00000028  E1A00004  MOV         R0,R4 ; pStr
 0000002C  E5D00000  LDRB        R0,[R0,#0x0] ; pStr
 00000030  E3500000  CMP         R0,#0x0000
 00000034  1AFFFFF5  BNE         L_52  ; Targ=0x10
  286:     return(R);
 00000038  E1A00003  MOV         R0,R3 ; R
ARM COMPILER V2.32a,  GGT_Func                                                             28/02/08  23:05:55  PAGE 17  

 0000003C            ; SCOPE-END
  287: }
 0000003C  E8BD0010  LDMIA       R13!,{R4}
 00000040  E8BD0008  LDMIA       R13!,{R3}
 00000044  E12FFF13  BX          R3
 00000048          ENDP ; 'HexToDWord?A'


*** CODE SEGMENT '?PR?StrToFloat?A?GGT_Func':
  289: float StrToFloat(UINT8 *pStr)
 00000000  E92D4070  STMDB       R13!,{R4-R6,LR}
 00000004  E1A05000  MOV         R5,R0 ; pStr
 00000008  ---- Variable 'pStr' assigned to Register 'R5' ----
 00000008  ---- Variable 'RR' assigned to Register 'R2' ----
  290: {
 00000008            ; SCOPE-START
  294:     R = 0;
 00000008  E3A03000  MOV         R3,#0x0
 0000000C  ---- Variable 'R' assigned to Register 'R3' ----
  295:     IsFloat = 0;
 0000000C  E3A04000  MOV         R4,#0x0
 00000010  ---- Variable 'IsFloat' assigned to Register 'R4' ----
  297:     if('-' == *pStr)
 00000010  E1A00005  MOV         R0,R5 ; pStr
 00000014  E5D00000  LDRB        R0,[R0,#0x0] ; pStr
 00000018  E350002D  CMP         R0,#0x002D
 0000001C  1A000002  BNE         L_55  ; Targ=0x2C
  299:         RR = -1;
 00000020  E5102000  LDR         R2,=0xBF800000
  300:         pStr++;
 00000024  E2855001  ADD         R5,R5,#0x0001 ; pStr
  301:     }else
 00000028  EA000000  B           L_60  ; Targ=0x30
 0000002C          L_55:
  302:         RR = 1;
 0000002C  E3A025FE  MOV         R2,#0x3F800000
  304:     while(*pStr)
 00000030          L_60:
 00000030  EA000017  B           L_57  ; Targ=0x94
 00000034          L_59:
  306:         if('.' == *pStr)
 00000034  E1A00005  MOV         R0,R5 ; pStr
 00000038  E5D06000  LDRB        R6,[R0,#0x0] ; pStr
 0000003C  E356002E  CMP         R6,#0x002E
 00000040  1A000001  BNE         L_61  ; Targ=0x4C
  308:             IsFloat = 1;    
 00000044  E3A04001  MOV         R4,#0x1
  309:         }else
 00000048  EA000010  B           L_62  ; Targ=0x90
 0000004C          L_61:
  311:             R = R * 10 + (*pStr - '0');
 0000004C  E5101000  LDR         R1,=0x41200000
 00000050  E1A00003  MOV         R0,R3 ; R
 00000054  EBFFFFE9  BL          ?C?FPMUL?A  ; Targ=0x0 ; ?C?FPMUL?A
 00000058  E1A03000  MOV         R3,R0
 0000005C  E2460030  SUB         R0,R6,#0x0030
 00000060  EBFFFFE6  BL          ?C?FCAST?A  ; Targ=0x0 ; ?C?FCAST?A
 00000064  E1A01000  MOV         R1,R0
 00000068  E1A00003  MOV         R0,R3
 0000006C  EBFFFFE3  BL          ?C?FPADD?A  ; Targ=0x0 ; ?C?FPADD?A
 00000070  E1A03000  MOV         R3,R0 ; R
  312:             if(IsFloat)
 00000074  E1A00004  MOV         R0,R4 ; IsFloat
 00000078  E3500000  CMP         R0,#0x0000 ; IsFloat
 0000007C  0A000003  BEQ         L_62  ; Targ=0x90
  313:                 RR *= 10;
 00000080  E1A00002  MOV         R0,R2 ; RR
 00000084  E5101000  LDR         R1,=0x41200000
ARM COMPILER V2.32a,  GGT_Func                                                             28/02/08  23:05:55  PAGE 18  

 00000088  EBFFFFDC  BL          ?C?FPMUL?A  ; Targ=0x0 ; ?C?FPMUL?A
 0000008C  E1A02000  MOV         R2,R0 ; RR
  314:         }
 00000090          L_62:
  316:         pStr++;
 00000090  E2855001  ADD         R5,R5,#0x0001 ; pStr
  317:     }
 00000094          L_57:
 00000094  E1A00005  MOV         R0,R5 ; pStr
 00000098  E5D00000  LDRB        R0,[R0,#0x0] ; pStr
 0000009C  E3500000  CMP         R0,#0x0000
 000000A0  1AFFFFE3  BNE         L_59  ; Targ=0x34
  319:     return(R / RR);
 000000A4  E1A01002  MOV         R1,R2 ; RR
 000000A8  E1A00003  MOV         R0,R3 ; R
 000000AC  EBFFFFD3  BL          ?C?FPDIV?A  ; Targ=0x0 ; ?C?FPDIV?A
 000000B0            ; SCOPE-END
  320: }
 000000B0  E8BD0070  LDMIA       R13!,{R4-R6}
 000000B4  E8BD0008  LDMIA       R13!,{R3}
 000000B8  E12FFF13  BX          R3
 000000BC          ENDP ; 'StrToFloat?A'


*** CODE SEGMENT '?PR?MemoCopy?A?GGT_Func':
  322: void MemoCopy(UINT8 *pD, UINT8 *pS, INT32 iLen)
 00000000  E92D0010  STMDB       R13!,{R4}
 00000004  ---- Variable 'iLen' assigned to Register 'R2' ----
 00000004  ---- Variable 'pS' assigned to Register 'R1' ----
 00000004  ---- Variable 'pD' assigned to Register 'R0' ----
  324:     while(iLen)
 00000004  EA000006  B           L_65  ; Targ=0x24
 00000008          L_67:
  326:         *pD = *pS;
 00000008  E1A03001  MOV         R3,R1 ; pS
 0000000C  E5D34000  LDRB        R4,[R3,#0x0] ; pS
 00000010  E1A03000  MOV         R3,R0 ; pD
 00000014  E5C34000  STRB        R4,[R3,#0x0] ; pD
  327:         pD++;
 00000018  E2800001  ADD         R0,R0,#0x0001 ; pD
  328:         pS++;
 0000001C  E2811001  ADD         R1,R1,#0x0001 ; pS
  329:         iLen--;
 00000020  E2422001  SUB         R2,R2,#0x0001 ; iLen
  330:     }
 00000024          L_65:
 00000024  E1A03002  MOV         R3,R2 ; iLen
 00000028  E3530000  CMP         R3,#0x0000 ; iLen
 0000002C  1AFFFFF5  BNE         L_67  ; Targ=0x8
  331: }
 00000030  E8BD0010  LDMIA       R13!,{R4}
 00000034  E12FFF1E  BX          R14
 00000038          ENDP ; 'MemoCopy?A'


*** CODE SEGMENT '?PR?StrCopy?A?GGT_Func':
  333: INT32 StrCopy(UINT8 *pD, UINT8 *pS)
 00000000  E92D0010  STMDB       R13!,{R4}
 00000004  ---- Variable 'pS' assigned to Register 'R1' ----
 00000004  E1A03000  MOV         R3,R0 ; pD
 00000008  ---- Variable 'pD' assigned to Register 'R3' ----
  334: {
 00000008            ; SCOPE-START
  335:     INT32 Len = 0;
 00000008  E3A02000  MOV         R2,#0x0
 0000000C  ---- Variable 'Len' assigned to Register 'R2' ----
  337:     while(*pS)
 0000000C  EA000006  B           L_69  ; Targ=0x2C
 00000010          L_71:
  339:         *pD = *pS;
ARM COMPILER V2.32a,  GGT_Func                                                             28/02/08  23:05:55  PAGE 19  

 00000010  E1A00001  MOV         R0,R1 ; pS
 00000014  E5D04000  LDRB        R4,[R0,#0x0] ; pS
 00000018  E1A00003  MOV         R0,R3 ; pD
 0000001C  E5C04000  STRB        R4,[R0,#0x0] ; pD
  340:         pD++;
 00000020  E2833001  ADD         R3,R3,#0x0001 ; pD
  341:         pS++;
 00000024  E2811001  ADD         R1,R1,#0x0001 ; pS
  342:         Len++;
 00000028  E2822001  ADD         R2,R2,#0x0001 ; Len
  343:     }
 0000002C          L_69:
 0000002C  E1A00001  MOV         R0,R1 ; pS
 00000030  E5D00000  LDRB        R0,[R0,#0x0] ; pS
 00000034  E3500000  CMP         R0,#0x0000
 00000038  1AFFFFF4  BNE         L_71  ; Targ=0x10
  344:     *pD = 0;
 0000003C  E3A01000  MOV         R1,#0x0
 00000040  E1A00003  MOV         R0,R3 ; pD
 00000044  E5C01000  STRB        R1,[R0,#0x0] ; pD
  345:     return Len;
 00000048  E1A00002  MOV         R0,R2 ; Len
 0000004C            ; SCOPE-END
  346: }
 0000004C  E8BD0010  LDMIA       R13!,{R4}
 00000050  E12FFF1E  BX          R14
 00000054          ENDP ; 'StrCopy?A'


*** CODE SEGMENT '?PR?StrAdd?A?GGT_Func':
  348: INT32 StrAdd(UINT8 *pD, UINT8 *pS)
 00000000  E92D0010  STMDB       R13!,{R4}
 00000004  ---- Variable 'pS' assigned to Register 'R1' ----
 00000004  E1A03000  MOV         R3,R0 ; pD
 00000008  ---- Variable 'pD' assigned to Register 'R3' ----
  349: {
 00000008            ; SCOPE-START
  350:     INT32 Len = 0;
 00000008  E3A02000  MOV         R2,#0x0
 0000000C  ---- Variable 'Len' assigned to Register 'R2' ----
  352:     while(*pD) 
 0000000C  EA000000  B           L_74  ; Targ=0x14
 00000010          L_76:
 00000010  E2833001  ADD         R3,R3,#0x0001 ; pD
 00000014          L_74:
 00000014  E1A00003  MOV         R0,R3 ; pD
 00000018  E5D00000  LDRB        R0,[R0,#0x0] ; pD
 0000001C  E3500000  CMP         R0,#0x0000
 00000020  1AFFFFFA  BNE         L_76  ; Targ=0x10
  355:     while(*pS)
 00000024  EA000006  B           L_78  ; Targ=0x44
 00000028          L_80:
  357:         *pD = *pS;
 00000028  E1A00001  MOV         R0,R1 ; pS
 0000002C  E5D04000  LDRB        R4,[R0,#0x0] ; pS
 00000030  E1A00003  MOV         R0,R3 ; pD
 00000034  E5C04000  STRB        R4,[R0,#0x0] ; pD
  358:         pD++;
 00000038  E2833001  ADD         R3,R3,#0x0001 ; pD
  359:         pS++;
 0000003C  E2811001  ADD         R1,R1,#0x0001 ; pS
  360:         Len++;
 00000040  E2822001  ADD         R2,R2,#0x0001 ; Len
  361:     }
 00000044          L_78:
 00000044  E1A00001  MOV         R0,R1 ; pS
 00000048  E5D00000  LDRB        R0,[R0,#0x0] ; pS
 0000004C  E3500000  CMP         R0,#0x0000
ARM COMPILER V2.32a,  GGT_Func                                                             28/02/08  23:05:55  PAGE 20  

 00000050  1AFFFFF4  BNE         L_80  ; Targ=0x28
  362:     *pD = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -