; generated by ARM C/C++ Compiler, RVCT4.0 [Build 728] ; commandline ArmCC [--c99 --debug -c --asm --interleave -okeil_temp.o --depend=keil_temp.d --cpu=Cortex-M3 --apcs=interwork -O3 -IC:\Programs\Keil\ARM\INC -IC:\Programs\Keil\ARM\INC\ST\STM32F10x --omf_browse=keil_temp.crf Keil_Temp.c] THUMB AREA ||.text||, CODE, READONLY, ALIGN=2 itoad PROC ;;;25 *******************************************************************************/ ;;;26 void itoad(int number, uint8_t *string) 000000 b510 PUSH {r4,lr} ;;;27 { ;;;28 #define FOUR_SPACES ' ' | ' ' << 8 | ' ' << 16 | ' ' << 24 ;;;29 uint8_t sign; ;;;30 *(uint32_t *)(string) = FOUR_SPACES; 000002 f04f3220 MOV r2,#0x20202020 ;;;31 // *(uint32_t *)(string + 4) = FOUR_SPACES; ;;;32 // *(uint32_t *)(string + 8) = (uint32_t)" 0"; ;;;33 // string += 10; ;;;34 *(uint32_t *)(string += sizeof(int32_t)) = ' '; 000006 600a STR r2,[r1,#0] ;;;35 *(uint32_t *)(string += sizeof(int32_t)) = (uint32_t )" 0"; 000008 604a STR r2,[r1,#4] 00000a a23b ADR r2,|L1.248| 00000c f8412f08 STR r2,[r1,#8]! ;;;36 string += 2; 000010 1c89 ADDS r1,r1,#2 ;;;37 ;;;38 if (!number) return; 000012 2800 CMP r0,#0 000014 d011 BEQ |L1.58| ;;;39 if (number > 0) sign = '+'; 000016 dd02 BLE |L1.30| 000018 f04f042b MOV r4,#0x2b 00001c e001 B |L1.34| |L1.30| ;;;40 else { ;;;41 number = -number; 00001e 4240 RSBS r0,r0,#0 ;;;42 sign = '-'; 000020 242d MOVS r4,#0x2d |L1.34| ;;;43 } ;;;44 do { ;;;45 *string-- = number % 10 + '0'; 000022 230a MOVS r3,#0xa |L1.36| 000024 4602 MOV r2,r0 000026 fb90f0f3 SDIV r0,r0,r3 00002a fb032210 MLS r2,r3,r0,r2 00002e 3230 ADDS r2,r2,#0x30 000030 f8012901 STRB r2,[r1],#-1 ;;;46 } while (number /= 10); 000034 2800 CMP r0,#0 000036 d1f5 BNE |L1.36| ;;;47 *string = sign; 000038 700c STRB r4,[r1,#0] |L1.58| ;;;48 } 00003a bd10 POP {r4,pc} ;;;49 ENDP si16toad PROC ;;;56 *******************************************************************************/ ;;;57 void si16toad (int16_t Number, uint8_t *String) 00003c b530 PUSH {r4,r5,lr} ;;;58 { ;;;59 char Sign = ' '; 00003e 2520 MOVS r5,#0x20 ;;;60 if (Number > 0) Sign = '+'; 000040 2800 CMP r0,#0 000042 dd02 BLE |L1.74| 000044 f04f052b MOV r5,#0x2b 000048 e005 B |L1.86| |L1.74| ;;;61 if (Number < 0) { 00004a da04 BGE |L1.86| ;;;62 Sign = '-'; ;;;63 Number = -Number; 00004c f1c00000 RSB r0,r0,#0 000050 f04f052d MOV r5,#0x2d ;62 000054 b200 SXTH r0,r0 |L1.86| ;;;64 } ;;;65 String[6] = '\0'; 000056 2200 MOVS r2,#0 000058 718a STRB r2,[r1,#6] ;;;66 signed char i = 5; 00005a 2205 MOVS r2,#5 ;;;67 do { ;;;68 String[i--] = Number % 10 + '0'; 00005c f05f040a MOVS.W r4,#0xa |L1.96| 000060 fb90f3f4 SDIV r3,r0,r4 000064 fb040013 MLS r0,r4,r3,r0 000068 3030 ADDS r0,r0,#0x30 00006a 5488 STRB r0,[r1,r2] 00006c 1e52 SUBS r2,r2,#1 ;;;69 Number /= 10; 00006e b218 SXTH r0,r3 000070 b252 SXTB r2,r2 ;68 ;;;70 } while (Number); 000072 2800 CMP r0,#0 000074 d1f4 BNE |L1.96| ;;;71 String[i] = Sign; 000076 548d STRB r5,[r1,r2] ;;;72 for (i--; i >= 0; i--) String[i] = ' '; 000078 1e52 SUBS r2,r2,#1 00007a b250 SXTB r0,r2 00007c 2220 MOVS r2,#0x20 ;59 00007e e002 B |L1.134| |L1.128| 000080 540a STRB r2,[r1,r0] 000082 1e40 SUBS r0,r0,#1 000084 b240 SXTB r0,r0 |L1.134| 000086 2800 CMP r0,#0 000088 dafa BGE |L1.128| ;;;73 } 00008a bd30 POP {r4,r5,pc} ;;;74 ENDP itoa PROC ;;;75 void itoa(int16_t Number, uint8_t *String) 00008c b57c PUSH {r2-r6,lr} ;;;76 { ;;;77 uint8_t Sign = ' '; 00008e 2620 MOVS r6,#0x20 000090 460d MOV r5,r1 ;76 ;;;78 if (Number > 0) Sign = '+'; 000092 2800 CMP r0,#0 000094 dd02 BLE |L1.156| 000096 f04f062b MOV r6,#0x2b 00009a e005 B |L1.168| |L1.156| ;;;79 if (Number < 0) { 00009c da04 BGE |L1.168| ;;;80 Sign = '-'; ;;;81 Number = - Number; 00009e f1c00000 RSB r0,r0,#0 0000a2 f04f062d MOV r6,#0x2d ;80 0000a6 b200 SXTH r0,r0 |L1.168| ;;;82 } ;;;83 String[6] = '\0'; 0000a8 2100 MOVS r1,#0 ;;;84 int8_t i = 5; 0000aa 2405 MOVS r4,#5 0000ac 71a9 STRB r1,[r5,#6] ;83 ;;;85 div_t QR = {Number, 0}; 0000ae 2200 MOVS r2,#0 0000b0 4669 MOV r1,sp 0000b2 4613 MOV r3,r2 0000b4 c10c STM r1!,{r2,r3} 0000b6 9000 STR r0,[sp,#0] |L1.184| ;;;86 do { ;;;87 QR = div(QR.quot, 10); 0000b8 4601 MOV r1,r0 0000ba f04f020a MOV r2,#0xa 0000be 4668 MOV r0,sp 0000c0 f7fffffe BL ||div|| ;;;88 String[i--] = QR.rem + '0'; 0000c4 9801 LDR r0,[sp,#4] 0000c6 3030 ADDS r0,r0,#0x30 0000c8 5528 STRB r0,[r5,r4] 0000ca 1e64 SUBS r4,r4,#1 ;;;89 } while (QR.quot); 0000cc 9800 LDR r0,[sp,#0] 0000ce b264 SXTB r4,r4 ;88 0000d0 2800 CMP r0,#0 0000d2 d1f1 BNE |L1.184| ;;;90 String[i] = Sign; 0000d4 552e STRB r6,[r5,r4] ;;;91 for (i--; i >= 0; i--) 0000d6 1e64 SUBS r4,r4,#1 0000d8 b260 SXTB r0,r4 0000da 2120 MOVS r1,#0x20 ;77 0000dc e002 B |L1.228| |L1.222| ;;;92 String[i] = ' '; 0000de 5429 STRB r1,[r5,r0] 0000e0 1e40 SUBS r0,r0,#1 ;91 0000e2 b240 SXTB r0,r0 ;91 |L1.228| 0000e4 2800 CMP r0,#0 ;91 0000e6 dafa BGE |L1.222| ;;;93 } 0000e8 bd7c POP {r2-r6,pc} ;;;94 ENDP main PROC ;;;102 *******************************************************************************/ ;;;103 int main (void) { 0000ea b50e PUSH {r1-r3,lr} ;;;104 int Number = -2147483647; 0000ec 4803 LDR r0,|L1.252| ;;;105 // int Number = 0; ;;;106 uint8_t Buffer[12]; ;;;107 ;;;108 // si16toad(Number, Buffer); ;;;109 // itoa(Number, Buffer); ;;;110 itoad(Number, Buffer); 0000ee 4669 MOV r1,sp 0000f0 f7fffffe BL itoad |L1.244| ;;;111 while (1); 0000f4 e7fe B |L1.244| ;;;112 } ;;;113 ENDP 0000f6 0000 DCW 0x0000 |L1.248| 0000f8 20203000 DCB " 0",0 |L1.252| DCD 0x80000001 __ARM_use_no_argv EQU 0