📄 bcd.lst
字号:
1 .file "bcd.c"
2 .arch atmega162
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
53 .global bcd2bin
55 bcd2bin:
1:bcd.c **** #include <avr/io.h>
2:bcd.c ****
3:bcd.c **** #ifdef BCD_USE_TABLE
4:bcd.c ****
5:bcd.c **** #include <avr/pgmspace.h >
6:bcd.c ****
7:bcd.c **** const unsigned char PROGMEM bcd2bin_data[] = {
8:bcd.c **** 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
9:bcd.c **** 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0,
10:bcd.c **** 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0,
11:bcd.c **** 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 0, 0, 0, 0, 0,
12:bcd.c **** 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0, 0, 0, 0, 0, 0,
13:bcd.c **** 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 0, 0, 0, 0, 0, 0,
14:bcd.c **** 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 0, 0, 0, 0, 0, 0,
15:bcd.c **** 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0, 0, 0,
16:bcd.c **** 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 0, 0, 0, 0, 0, 0,
17:bcd.c **** 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
18:bcd.c **** };
19:bcd.c ****
20:bcd.c **** const unsigned char PROGMEM bin2bcd_data[] = {
21:bcd.c **** 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
22:bcd.c **** 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
23:bcd.c **** 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
24:bcd.c **** 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
25:bcd.c **** 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
26:bcd.c **** 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
27:bcd.c **** 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
28:bcd.c **** 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
29:bcd.c **** 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
30:bcd.c **** 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99
31:bcd.c **** };
32:bcd.c **** #endif
33:bcd.c ****
34:bcd.c **** unsigned char bcd2bin(unsigned char n)
35:bcd.c **** {
57 .LM1:
58 /* prologue: frame size=0 */
59 /* prologue end (size=0) */
60 0000 482F mov r20,r24
36:bcd.c **** #ifdef BCD_USE_TABLE
37:bcd.c **** return pgm_read_byte(bcd2bin_data + n);
38:bcd.c **** #else
39:bcd.c **** unsigned char x = (n & 0xF0) >> 4;
62 .LM2:
63 0002 282F mov r18,r24
64 0004 3327 clr r19
65 0006 C901 movw r24,r18
66 0008 64E0 ldi r22,4
67 000a 9695 1: lsr r25
68 000c 8795 ror r24
69 000e 6A95 dec r22
70 0010 E1F7 brne 1b
40:bcd.c ****
41:bcd.c **** if (x > 9 || (n & 0x0F) > 9)
72 .LM3:
73 0012 8A30 cpi r24,lo8(10)
74 0014 28F4 brsh .L3
76 .LM4:
77 0016 2F70 andi r18,lo8(15)
78 0018 3070 andi r19,hi8(15)
79 001a 2A30 cpi r18,10
80 001c 3105 cpc r19,__zero_reg__
81 001e 1CF0 brlt .L2
82 .L3:
42:bcd.c **** {
43:bcd.c **** return 0;
84 .LM5:
85 0020 80E0 ldi r24,lo8(0)
86 0022 90E0 ldi r25,hi8(0)
87 0024 0895 ret
88 .L2:
44:bcd.c **** }
45:bcd.c **** else
46:bcd.c **** {
47:bcd.c **** return (x << 3) + (x << 1) + (n & 0x0F);
90 .LM6:
91 0026 9927 clr r25
92 0028 9C01 movw r18,r24
93 002a 220F lsl r18
94 002c 331F rol r19
95 002e 33E0 ldi r19,3
96 0030 880F 1: lsl r24
97 0032 991F rol r25
98 0034 3A95 dec r19
99 0036 E1F7 brne 1b
100 0038 820F add r24,r18
101 003a 4F70 andi r20,lo8(15)
102 003c 840F add r24,r20
103 003e 9927 clr r25
48:bcd.c **** }
49:bcd.c **** #endif
50:bcd.c **** }
105 .LM7:
106 0040 0895 ret
107 /* epilogue: frame size=0 */
108 0042 0895 ret
109 /* epilogue end (size=1) */
110 /* function bcd2bin size 34 (33) */
115 .global bin2bcd
117 bin2bcd:
51:bcd.c ****
52:bcd.c **** unsigned char bin2bcd(unsigned char n)
53:bcd.c **** {
119 .LM8:
120 /* prologue: frame size=0 */
121 /* prologue end (size=0) */
122 0044 282F mov r18,r24
54:bcd.c **** #ifdef BCD_USE_TABLE
55:bcd.c **** return pgm_read_byte(bin2bcd_data + n);
56:bcd.c **** #else
57:bcd.c **** unsigned char result = 0;
124 .LM9:
125 0046 80E0 ldi r24,lo8(0)
58:bcd.c ****
59:bcd.c **** if (n > 99) return 0;
127 .LM10:
128 0048 2436 cpi r18,lo8(100)
129 004a 18F0 brlo .L6
131 .LM11:
132 004c 80E0 ldi r24,lo8(0)
133 004e 90E0 ldi r25,hi8(0)
134 0050 0895 ret
135 .L6:
60:bcd.c **** while(n > 10)
61:bcd.c **** {
62:bcd.c **** ++result;
63:bcd.c **** n -= 10;
137 .LM12:
138 0052 2B30 cpi r18,lo8(11)
139 0054 18F0 brlo .L11
141 .LM13:
142 0056 8F5F subi r24,lo8(-(1))
144 .LM14:
145 0058 2A50 subi r18,lo8(-(-10))
146 005a FBCF rjmp .L6
147 .L11:
64:bcd.c **** }
65:bcd.c **** return (result << 4) | n;
149 .LM15:
150 005c 9927 clr r25
151 005e 74E0 ldi r23,4
152 0060 880F 1: lsl r24
153 0062 991F rol r25
154 0064 7A95 dec r23
155 0066 E1F7 brne 1b
156 0068 282B or r18,r24
157 006a 822F mov r24,r18
158 006c 9927 clr r25
66:bcd.c **** #endif
67:bcd.c **** }
160 .LM16:
161 006e 0895 ret
162 /* epilogue: frame size=0 */
163 0070 0895 ret
164 /* epilogue end (size=1) */
165 /* function bin2bcd size 23 (22) */
168 .text
170 Letext:
171 /* File "bcd.c": code 57 = 0x0039 ( 55), prologues 0, epilogues 2 */
DEFINED SYMBOLS
*ABS*:00000000 bcd.c
*ABS*:0000003f __SREG__
*ABS*:0000003e __SP_H__
*ABS*:0000003d __SP_L__
*ABS*:00000000 __tmp_reg__
*ABS*:00000001 __zero_reg__
C:\DOCUME~1\ZHOUNA~1\LOCALS~1\Temp/ccKwaaaa.s:55 .text:00000000 bcd2bin
C:\DOCUME~1\ZHOUNA~1\LOCALS~1\Temp/ccKwaaaa.s:117 .text:00000044 bin2bcd
C:\DOCUME~1\ZHOUNA~1\LOCALS~1\Temp/ccKwaaaa.s:170 .text:00000072 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -