📄 uart.lst
字号:
*** CODE SEGMENT '?PR?prints?T?UART':
62: void prints(uint8 * s,uint32 newline)
00000000 B510 PUSH {R4,LR}
00000002 ---- Variable 'newline' assigned to Register 'R1' ----
00000002 ---- Variable 's' assigned to Register 'R0' ----
63: {
00000002 ; SCOPE-START
65: i=0;
00000002 2200 MOV R2,#0x0
00000004 ---- Variable 'i' assigned to Register 'R2' ----
66: while(s[i]!=0) //判断字符串是否结束
00000004 E00F B L_5 ; T=0x00000026
68: while(!(COMSTA0 & 0x40)); //等待发送完毕
00000006 L_12:
00000006 L_9:
00000006 4800 LDR R3,=0xFFFF0714
00000008 681B LDR R3,[R3,#0x0]
0000000A 2440 MOV R4,#0x40
0000000C 4223 TST R3,R4
0000000E D0FA BEQ L_9 ; T=0x00000006
69: COMTX=s[i];
00000010 1C13 MOV R3,R2 ; i
00000012 061C LSL R4,R3,#0x18 ; i
00000014 0E24 LSR R4,R4,#0x18
00000016 1C03 MOV R3,R0 ; s
00000018 5D1B LDRB R3,[R3,R4]
0000001A 1C1C MOV R4,R3
0000001C 4800 LDR R3,=0xFFFF0700
0000001E 601C STR R4,[R3,#0x0]
70: i++; //移到下字节
00000020 3201 ADD R2,#0x1
00000022 0612 LSL R2,R2,#0x18
00000024 0E12 LSR R2,R2,#0x18
71: }
00000026 L_5:
00000026 1C13 MOV R3,R2 ; i
00000028 061C LSL R4,R3,#0x18 ; i
0000002A 0E24 LSR R4,R4,#0x18
0000002C 1C03 MOV R3,R0 ; s
0000002E 5D1B LDRB R3,[R3,R4]
00000030 2B00 CMP R3,#0x0
00000032 D1E8 BNE L_12 ; T=0x00000006
72: if(newline) //如果需要换行
00000034 1C08 MOV R0,R1 ; newline
00000036 2800 CMP R0,#0x0 ; newline
ARM COMPILER V2.50a, UART 16/05/06 14:55:45 PAGE 6
00000038 D005 BEQ L_13 ; T=0x00000046
74: send_a_byte(13);
0000003A 200D MOV R0,#0xD
0000003C F7FF BL send_a_byte?T ; T=0x0001 (1)
0000003E FFE0 BL send_a_byte?T ; T=0x0001 (2)
75: send_a_byte(10); //发送回车换行
00000040 200A MOV R0,#0xA
00000042 F7FF BL send_a_byte?T ; T=0x0001 (1)
00000044 FFDD BL send_a_byte?T ; T=0x0001 (2)
76: }
00000046 L_13:
00000046 ; SCOPE-END
77: }
00000046 BC10 POP {R4}
00000048 BC08 POP {R3}
0000004A 4718 BX R3
0000004C ENDP ; 'prints?T'
*** CODE SEGMENT '?PR?cls?T?UART':
81: void cls(void)
00000000 B500 PUSH {LR}
83: send_a_byte(0x0C); //超级终端清屏指令
00000002 200C MOV R0,#0xC
00000004 F7FF BL send_a_byte?T ; T=0x0001 (1)
00000006 FFFC BL send_a_byte?T ; T=0x0001 (2)
84: send_a_byte(0x0C);
00000008 200C MOV R0,#0xC
0000000A F7FF BL send_a_byte?T ; T=0x0001 (1)
0000000C FFF9 BL send_a_byte?T ; T=0x0001 (2)
85: }
0000000E BC08 POP {R3}
00000010 4718 BX R3
00000012 ENDP ; 'cls?T'
*** CODE SEGMENT '?PR?print_uint16?T?UART':
93: void print_uint16(uint16 number)
00000000 B500 PUSH {LR}
00000002 1C03 MOV R3,R0 ; number
00000004 ---- Variable 'number' assigned to Register 'R3' ----
95: send_a_byte('0'); //发送0x
00000004 2030 MOV R0,#0x30
00000006 F7FF BL send_a_byte?T ; T=0x0001 (1)
00000008 FFFB BL send_a_byte?T ; T=0x0001 (2)
96: send_a_byte('x');
0000000A 2078 MOV R0,#0x78
0000000C F7FF BL send_a_byte?T ; T=0x0001 (1)
0000000E FFF8 BL send_a_byte?T ; T=0x0001 (2)
97: send_a_byte(HEX_TABLE[(number>>12) & 0x0F]); //依次发送各部分
00000010 1C18 MOV R0,R3 ; number
00000012 0401 LSL R1,R0,#0x10 ; number
00000014 0C09 LSR R1,R1,#0x10
00000016 0B09 LSR R1,R1,#0xC
00000018 200F MOV R0,#0xF
0000001A 4001 AND R1,R0
0000001C 4800 LDR R0,=HEX_TABLE ; HEX_TABLE
0000001E 5C40 LDRB R0,[R0,R1]
00000020 F7FF BL send_a_byte?T ; T=0x0001 (1)
00000022 FFEE BL send_a_byte?T ; T=0x0001 (2)
98: send_a_byte(HEX_TABLE[(number>>8) & 0x0F]);
00000024 1C18 MOV R0,R3 ; number
00000026 0401 LSL R1,R0,#0x10 ; number
00000028 0C09 LSR R1,R1,#0x10
0000002A 0A09 LSR R1,R1,#0x8
0000002C 200F MOV R0,#0xF
0000002E 4001 AND R1,R0
00000030 4800 LDR R0,=HEX_TABLE ; HEX_TABLE
00000032 5C40 LDRB R0,[R0,R1]
00000034 F7FF BL send_a_byte?T ; T=0x0001 (1)
ARM COMPILER V2.50a, UART 16/05/06 14:55:45 PAGE 7
00000036 FFE4 BL send_a_byte?T ; T=0x0001 (2)
99: send_a_byte(HEX_TABLE[(number>>4) & 0x0F]);
00000038 1C18 MOV R0,R3 ; number
0000003A 0401 LSL R1,R0,#0x10 ; number
0000003C 0C09 LSR R1,R1,#0x10
0000003E 0909 LSR R1,R1,#0x4
00000040 200F MOV R0,#0xF
00000042 4001 AND R1,R0
00000044 4800 LDR R0,=HEX_TABLE ; HEX_TABLE
00000046 5C40 LDRB R0,[R0,R1]
00000048 F7FF BL send_a_byte?T ; T=0x0001 (1)
0000004A FFDA BL send_a_byte?T ; T=0x0001 (2)
100: send_a_byte(HEX_TABLE[(number) & 0x0F]);
0000004C 1C18 MOV R0,R3 ; number
0000004E 0401 LSL R1,R0,#0x10 ; number
00000050 0C09 LSR R1,R1,#0x10
00000052 200F MOV R0,#0xF
00000054 4001 AND R1,R0
00000056 4800 LDR R0,=HEX_TABLE ; HEX_TABLE
00000058 5C40 LDRB R0,[R0,R1]
0000005A F7FF BL send_a_byte?T ; T=0x0001 (1)
0000005C FFD1 BL send_a_byte?T ; T=0x0001 (2)
101: send_a_byte(' ');
0000005E 2020 MOV R0,#0x20
00000060 F7FF BL send_a_byte?T ; T=0x0001 (1)
00000062 FFCE BL send_a_byte?T ; T=0x0001 (2)
102: }
00000064 BC08 POP {R3}
00000066 4718 BX R3
00000068 ENDP ; 'print_uint16?T'
*** CODE SEGMENT '?PR?print_uint32?T?UART':
106: void print_uint32(uint32 number)
00000000 B510 PUSH {R4,LR}
00000002 1C03 MOV R3,R0 ; number
00000004 ---- Variable 'number' assigned to Register 'R3' ----
00000004 B083 SUB R13,#0xC
107: {
00000006 ; SCOPE-START
111: for(i=0;i<10;i++) //转换成字符串
00000006 2200 MOV R2,#0x0
00000008 ---- Variable 'i' assigned to Register 'R2' ----
00000008 L_17:
113: buf[9-i]=(number%10)+'0';
00000008 1C18 MOV R0,R3 ; number
0000000A 210A MOV R1,#0xA
0000000C F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
0000000E FFF8 BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
00000010 1C01 MOV R1,R0
00000012 3030 ADD R0,#0x30
00000014 0600 LSL R0,R0,#0x18
00000016 0E00 LSR R0,R0,#0x18
00000018 1C11 MOV R1,R2 ; i
0000001A 2409 MOV R4,#0x9
0000001C 1A64 SUB R4,R1 ; i
0000001E A900 ADD R1,R13,#0x0
00000020 5508 STRB R0,[R1,R4]
114: number/=10;
00000022 1C18 MOV R0,R3 ; number
00000024 210A MOV R1,#0xA
00000026 F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
00000028 FFEB BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
0000002A 1C08 MOV R0,R1
0000002C 1C03 MOV R3,R0 ; number
115: }
0000002E 3201 ADD R2,#0x1
00000030 1C10 MOV R0,R2 ; i
ARM COMPILER V2.50a, UART 16/05/06 14:55:45 PAGE 8
00000032 280A CMP R0,#0xA ; i
00000034 D3E8 BCC L_17 ; T=0x00000008
116: for(i=0;i<9;i++) //将前面的0转换成空格
00000036 2200 MOV R2,#0x0
00000038 L_22:
118: if(buf[i]=='0')
00000038 1C10 MOV R0,R2 ; i
0000003A A900 ADD R1,R13,#0x0
0000003C 5C08 LDRB R0,[R1,R0]
0000003E 2830 CMP R0,#0x30
00000040 D106 BNE L_20 ; T=0x00000050
120: buf[i]=' ';
00000042 2020 MOV R0,#0x20
00000044 1C13 MOV R3,R2 ; i
00000046 54C8 STRB R0,[R1,R3]
126: }
00000048 3201 ADD R2,#0x1
0000004A 1C10 MOV R0,R2 ; i
0000004C 2809 CMP R0,#0x9 ; i
0000004E D3F3 BCC L_22 ; T=0x00000038
00000050 L_20:
127: buf[10]=' ';
00000050 2120 MOV R1,#0x20
00000052 200A MOV R0,#0xA
00000054 4468 ADD R0,R13
00000056 7001 STRB R1,[R0,#0x0] ; buf+10
128: buf[11]=0; //字符串结束符
00000058 2100 MOV R1,#0x0
0000005A 200B MOV R0,#0xB
0000005C 4468 ADD R0,R13
0000005E 7001 STRB R1,[R0,#0x0] ; buf+11
129: prints(buf,0);
00000060 A800 ADD R0,R13,#0x0
00000062 2100 MOV R1,#0x0
00000064 F7FF BL prints?T ; T=0x0001 (1)
00000066 FFCC BL prints?T ; T=0x0001 (2)
00000068 ; SCOPE-END
130: }
00000068 B003 ADD R13,#0xC
0000006A BC10 POP {R4}
0000006C BC08 POP {R3}
0000006E 4718 BX R3
00000070 ENDP ; 'print_uint32?T'
Module Information Static
----------------------------------
code size = ------
data size = ------
const size = 16
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -