📄 a0803.lst
字号:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 1
MCS-51 Family Cross Assembler A S E M - 5 1 V 1.2
=====================================================
Source File: A0803.ASM
Object File: A0803.HEX
List File: A0803.LST
Line I Addr Code Source
1:
2: N 0000 org 0000h
3: 0000 02 00 30 ljmp main
4:
5: N 0030 org 0030h
6: 0030 75 90 FF main: mov p1,#0ffh
7: 0033 75 2A 00 mov 2Ah,#00h ;2Ah设为标志位
8: 0036 75 20 01 mov 20h,#01h ;显示最高位缓冲
9: 0039 75 21 02 mov 21h,#02h
10: 003C 75 22 03 mov 22h,#03h
11: 003F 75 23 04 mov 23h,#04h
12: 0042 75 24 05 mov 24h,#05h
13: 0045 75 25 06 mov 25h,#06h
14: 0048 75 26 07 mov 26h,#07h
15: 004B 75 27 08 mov 27h,#08h ;显示最地位缓冲
16: 004E 12 01 0E lcall dirv
17: ;-------------------------;
18: ; 读键 ;
19: ;-------------------------;
20: 0051 kl0:
21: 0051 12 01 0E lcall dirv
22:
23: 0054 7B 00 mov r3,#00h
24: 0056 7A CC mov r2,#0cch
25: 0058 12 00 83 lcall lh ;量化(转换成um)
26: 005B 78 32 mov r0,#32h ;被解压BCD码高位存32h
27: 005D 79 23 mov r1,#23h ;解压后BCD码高位存20h
28: 005F 7A 35 mov r2,#35h ;被解压BCD码最低位:r2-1
29: 0061 12 00 9F lcall bcdjy ;BCD码解压缩(5字节)
30:
31: 0064 C0 24 push 24h
32: 0066 C0 1F push 1fh
33: 0068 C0 28 push 28h
34:
35: 006A 7B 03 mov r3,#03h
36: 006C 7A FF mov r2,#0ffh
37: 006E 12 00 83 lcall lh ;量化(转换成um)
38: 0071 78 32 mov r0,#32h ;被解压BCD码高位存32h
39: 0073 79 1F mov r1,#1fh ;解压后BCD码高位存20h
40: 0075 7A 35 mov r2,#35h ;被解压BCD码最低位:r2-1
41: 0077 12 00 9F lcall bcdjy ;BCD码解压缩(5字节)
42:
43: 007A D0 28 pop 28h
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 2
Line I Addr Code Source
44: 007C D0 1F pop 1fh
45: 007E D0 24 pop 24h
46:
47: 0080 02 00 51 ljmp kl0 ;无键按下继续
48:
49: ;---------------------;
50: ; 量化(转换成um) ;
51: ;---------------------;
52: 0083 12 00 B0 lh: lcall B16BCD ;二进制到BCD码(双字节)
53: 0086 8E 30 mov 30h,r6 ;被乘数十万、万位
54: 0088 8D 31 mov 31h,r5 ;被乘数干位、百位
55: 008A 8C 32 mov 32h,r4 ;被乘数十位、个位
56: 008C 75 40 00 mov 40h,#00h ;乘数百位、十位
57: 008F 75 41 24 mov 41h,#24h ;乘数个位、小数点后第一位(2.443um)
58: 0092 75 42 43 mov 42h,#43h ;乘数小数点后第二位、小数点后第三位
59: 0095 78 30 mov r0,#30h ;被乘数入口指针
60: 0097 79 40 mov r1,#40h ;乘数入口指针
61: 0099 7B 03 mov r3,#03h ;参加乘法运算的压缩的BCD码位数
62: 009B 12 00 CC lcall CMUL ;无符号压缩BCD码乘法(CMUL)(积的小数位舍去送显示)
63: 009E 22 ret
64: ;---------------------------------------;
65: ; @r0中BCD码解压缩到@r1(r2-r1字节);
66: ;---------------------------------------;
67:
68: 009F E6 bcdjy: mov a,@r0 ;分解一字节高位
69: 00A0 54 F0 anl a,#0f0h
70: 00A2 C4 swap a
71: 00A3 F7 mov @r1,a
72: 00A4 09 inc r1
73: 00A5 E6 mov a,@r0 ;分解一字节低位
74: 00A6 54 0F anl a,#0fh
75: 00A8 F7 mov @r1,a
76: 00A9 09 inc r1
77: 00AA 08 inc r0
78: 00AB E8 mov a,r0
79: 00AC 6A xrl a,r2 ;当前显示是否为"_"
80: 00AD 70 F0 jnz bcdjy ;当前显示不为"_"跳
81: 00AF 22 ret
82: ;-------------------------------;
83: ; 二进制到BCD码(双字节) ;
84: ;-------------------------------;
85: ; (1)入口,R3R2,(16位无符号二进制整数).
86: ; (2)出口:R6(万位)、R5(干位、百位)、R4(十位、个位)存放5位BCD码。
87: ;2.程序清单
88:
89: 00B0 B16BCD:
90: 00B0 E4 CLR A ;BCD码寄存器清零
91: 00B1 FC MOV R4,A
92: 00B2 FD MOV R5,A
93: 00B3 FE MOV R6,A
94: 00B4 7F 10 MOV R7,#10H ;设循环指针
95: 00B6 C3 LP0: CLR C ;左移一位,移入c
96: 00B7 EA MOV A,R2
97: 00B8 33 RLC A
98: 00B9 FA MOV R2,A
99: 00BA EB MOV A,R3
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 3
Line I Addr Code Source
100: 00BB 33 RLC A
101: 00BC FB MOV R3,A
102: 00BD EC MOV A,R4 ;实现(…)X2十ai运算
103:
104: 00BE 3C ADDC A,R4
105: 00BF D4 DA A
106: 00C0 FC MOV R4,A
107: 00C1 ED MOV A,R5
108: 00C2 3D ADDC A,R5
109: 00C3 D4 DA A
110: 00C4 FD MOV R5,A
111: 00C5 EE MOV A,R6
112: 00C6 3E ADDC A,R6
113: 00C7 D4 DA A
114: 00C8 FE MOV R6,A
115: 00C9 DF EB DJNZ R7,LP0
116: 00CB 22 RET
117: ;-------------------------------------;
118: ; 无符号压缩BCD码乘法子程序(CMUL) ;
119: ;-------------------------------------;
120:
121: ;功能:将(R0)指向的n字节压缩的BCD码乘以(R1)指向的n
122: ;字节压缩的BCD码。
123: ;入口:十进制被乘数存放在addrl—addr+n—1单元,高位在前。
124: ;十进制乘数存放在addr2—acldr2+n—1单元,高位在前。
125: ;(R0):addrl,(R1)=addr2,(R3)=n
126: ;出口:积存放在addr-addrl+2n—1单元中,(R0)=addrl。
127: ;使用寄存器:A,R0,R1,n2,R3,R6,R7及标志cy0
128: ;例如:(R0)=20;(20)=01;(21)=25;(R1)=40;(40)=00;
129: ;(41)=25;(R3)=02
130: ;执行后得:(R0)=20;(20)=00;(21)=00;(22)=31; (23)=25
131: ;程序清单:
132: 00CC EB CMUL: MOV A, R3
133: 00CD FE MOV R6, A
134: 00CE 2B ADD A, R3
135: 00CF FA MOV R2, A
136: 00D0 EB MOV A, R3
137: 00D1 28 ADD A, R0
138: 00D2 F8 MOV R0, A
139: 00D3 E9 MOV A, R1
140: 00D4 2B ADD A, R3
141: 00D5 14 DEC A
142: 00D6 F9 MOV R1, A
143: 00D7 E4 CLR A
144: 00D8 F6 CMUL1: MOV @ R0, A
145: 00D9 08 INC R0
146: 00DA DE FC DJNZ R6, CMUL1
147: 00DC EA MOV A, R2
148: 00DD FE MOV R6, A
149: 00DE 18 DEC R0
150: 00DF E4 CMUL2: CLR A
151: 00E0 C6 CMUL3: XCH A, @R0
152: 00E1 C4 SWAP A
153: 00E2 D6 XCHD A, @R0
154: 00E3 C6 XCH A, @R0
155: 00E4 18 DEC R0
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 4
Line I Addr Code Source
156: 00E5 DA F9 DJNZ R2,CMUL3
157: 00E7 FF MOV R7, A
158: 00E8 60 1C JZ CMUL7
159: 00EA EB CMUIA: MOV A, R3
160: 00EB FA MOV R2, A
161: 00EC 2B ADD A, R3
162: 00ED 28 ADD A, R0
163: 00EE F8 MOV R0, A
164: 00EF C3 CLR C
165: 00F0 E6 CMUL5: MOV A, @R0
166: 00F1 37 ADDC A, @R1
167: 00F2 D4 DA A
168: 00F3 F6 MOV @R0,A
169: 00F4 18 DEC R0
170: 00F5 19 DEC R1
171: 00F6 DA F8 DJNZ R2, CMUL5
172: 00F8 EB MOV A, R3
173: 00F9 FA MOV R2, A
174: 00FA E4 CMUL6: CLR A
175: 00FB 36 ADDC A, @R0
176: 00FC D4 DA A
177: 00FD F6 MOV @R0,A
178: 00FE 18 DEC R0
179: 00FF DA F9 DJNZ R2, CMUL6
180: 0101 EB MOV A, R3
181: 0102 29 ADD A, R1
182: 0103 F9 MOV R1, A
183: 0104 DF E4 DJNZ R7, CMUIA
184: 0106 EB CMUL7: MOV A, R3
185: 0107 2B ADD A, R3
186: 0108 FA MOV R2, A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -