📄 uart.lst
字号:
00000002 ---- Variable 'newline' assigned to Register 'R1' ----
00000002 ---- Variable 's' assigned to Register 'R0' ----
61: {
00000002 ; SCOPE-START
63: i=0;
00000002 2200 MOV R2,#0x0
00000004 ---- Variable 'i' assigned to Register 'R2' ----
64: while(s[i]!=0) //判断字符串是否结束
00000004 E00E B L_5 ; T=0x00000024
66: while (!(U0LSR & 0x20)); //等待发送完毕
00000006 L_12:
00000006 L_9:
00000006 4800 LDR R3,=0xE000C014
00000008 781B LDRB R3,[R3,#0x0]
0000000A 2420 MOV R4,#0x20
0000000C 4223 TST R3,R4
0000000E D0FA BEQ L_9 ; T=0x00000006
67: U0THR=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 5D1C LDRB R4,[R3,R4]
0000001A 4800 LDR R3,=0xE000C000
0000001C 701C STRB R4,[R3,#0x0]
68: i++; //移到下字节
0000001E 3201 ADD R2,#0x1
00000020 0612 LSL R2,R2,#0x18
00000022 0E12 LSR R2,R2,#0x18
69: }
00000024 L_5:
00000024 1C13 MOV R3,R2 ; i
00000026 061C LSL R4,R3,#0x18 ; i
00000028 0E24 LSR R4,R4,#0x18
0000002A 1C03 MOV R3,R0 ; s
0000002C 5D1B LDRB R3,[R3,R4]
0000002E 2B00 CMP R3,#0x0
00000030 D1E9 BNE L_12 ; T=0x00000006
70: if(newline) //如果需要换行
00000032 1C08 MOV R0,R1 ; newline
00000034 2800 CMP R0,#0x0 ; newline
00000036 D005 BEQ L_13 ; T=0x00000044
72: send_a_byte(13);
00000038 200D MOV R0,#0xD
0000003A F7FF BL send_a_byte?T ; T=0x0001 (1)
0000003C FFE1 BL send_a_byte?T ; T=0x0001 (2)
73: send_a_byte(10); //发送回车换行
0000003E 200A MOV R0,#0xA
ARM COMPILER V2.50a, UART 25/08/06 23:22:56 PAGE 6
00000040 F7FF BL send_a_byte?T ; T=0x0001 (1)
00000042 FFDE BL send_a_byte?T ; T=0x0001 (2)
74: }
00000044 L_13:
00000044 ; SCOPE-END
75: }
00000044 BC10 POP {R4}
00000046 BC08 POP {R3}
00000048 4718 BX R3
0000004A ENDP ; 'prints?T'
*** CODE SEGMENT '?PR?cls?T?UART':
79: void cls(void)
00000000 B500 PUSH {LR}
81: 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)
82: 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)
83: }
0000000E BC08 POP {R3}
00000010 4718 BX R3
00000012 ENDP ; 'cls?T'
*** CODE SEGMENT '?PR?print_uint16?T?UART':
91: void print_uint16(uint16 number)
00000000 B500 PUSH {LR}
00000002 1C03 MOV R3,R0 ; number
00000004 ---- Variable 'number' assigned to Register 'R3' ----
93: 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)
94: 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)
95: 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)
96: 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)
00000036 FFE4 BL send_a_byte?T ; T=0x0001 (2)
97: 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
ARM COMPILER V2.50a, UART 25/08/06 23:22:56 PAGE 7
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)
98: 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)
99: 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)
100: }
00000064 BC08 POP {R3}
00000066 4718 BX R3
00000068 ENDP ; 'print_uint16?T'
*** CODE SEGMENT '?PR?print_uint32?T?UART':
104: 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
105: {
00000006 ; SCOPE-START
109: for(i=0;i<10;i++) //转换成字符串
00000006 2200 MOV R2,#0x0
00000008 ---- Variable 'i' assigned to Register 'R2' ----
00000008 L_17:
111: 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]
112: 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
113: }
0000002E 3201 ADD R2,#0x1
00000030 1C10 MOV R0,R2 ; i
00000032 280A CMP R0,#0xA ; i
00000034 D3E8 BCC L_17 ; T=0x00000008
114: for(i=0;i<9;i++) //将前面的0转换成空格
00000036 2200 MOV R2,#0x0
00000038 L_22:
116: if(buf[i]=='0')
00000038 1C10 MOV R0,R2 ; i
ARM COMPILER V2.50a, UART 25/08/06 23:22:56 PAGE 8
0000003A A900 ADD R1,R13,#0x0
0000003C 5C08 LDRB R0,[R1,R0]
0000003E 2830 CMP R0,#0x30
00000040 D106 BNE L_20 ; T=0x00000050
118: buf[i]=' ';
00000042 2020 MOV R0,#0x20
00000044 1C13 MOV R3,R2 ; i
00000046 54C8 STRB R0,[R1,R3]
124: }
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:
125: 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
126: 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
127: 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
128: }
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 + -