⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 51.lst

📁 单片机定点运算子程序库
💻 LST
📖 第 1 页 / 共 5 页
字号:
                     189     ; (6)标号: MUL2 功能:双字节二进制无符号数平方
                     190     
A51 MACRO ASSEMBLER  51                                                                   06/29/2007 15:34:54 PAGE     4

                     191     ;入口条件:待平方数在R2、R3中。
                     192     ;出口信息:结果在R2、R3、R4、R5中。
                     193     ;影响资源:PSW、A、B、R2~R5    堆栈需求:  2字节
                     194     
0076 EB              195     MUL2:   MOV     A,R3    ;计算R3平方
0077 F5F0            196             MOV     B,A
0079 A4              197             MUL     AB
007A ACF0            198             MOV     R4,B    ;暂存部分积
007C FD              199             MOV     R5,A
007D EA              200             MOV     A,R2    ;计算R2平方
007E F5F0            201             MOV     B,A
0080 A4              202             MUL     AB
0081 CB              203             XCH     A,R3    ;暂存部分积,并换出R2和R3
0082 C5F0            204             XCH     A,B
0084 CA              205             XCH     A,R2
0085 A4              206             MUL     AB      ;计算2×R2×R3
0086 C3              207             CLR     C
0087 33              208             RLC     A
0088 C5F0            209             XCH     A,B
008A 33              210             RLC     A
008B 5001            211             JNC     MU20
008D 0A              212             INC     R2      ;累加溢出量
008E                 213     MU20:
008E C5F0            214             XCH     A,B     ;累加部分积
0090 2C              215             ADD     A,R4
                     216     
0091 FC              217             MOV     R4,A
0092 EB              218             MOV     A,R3
0093 35F0            219             ADDC    A,B
0095 FB              220             MOV     R3,A
0096 E4              221             CLR     A
0097 3A              222             ADDC    A,R2
0098 FA              223             MOV     R2,A
0099 22              224             RET
                     225     
                     226     ;(7) 标号:DIVD  功能:双字节二进制无符号数除法
                     227     
                     228     ;入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
                     229     ;出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
                     230     ;影响资源:PSW、A、B、R1~R7    堆栈需求:  2字节
                     231     
009A                 232     DIVD:
009A C3              233             CLR     C       ;比较被除数和除数
009B EB              234             MOV     A,R3
009C 9F              235             SUBB    A,R7
009D EA              236             MOV     A,R2
009E 9E              237             SUBB    A,R6
009F 4003            238             JC      DVD1
00A1 D2D2            239             SETB    OV      ;溢出
00A3 22              240             RET
00A4                 241     DVD1:
00A4 75F010          242             MOV     B,#10H  ;计算双字节商
                     243     
00A7                 244     DVD2:
00A7 C3              245             CLR     C       ;部分商和余数同时左移一位
00A8 ED              246             MOV     A,R5
00A9 33              247             RLC     A
00AA FD              248             MOV     R5,A
00AB EC              249             MOV     A,R4
00AC 33              250             RLC     A
00AD FC              251             MOV     R4,A
00AE EB              252             MOV     A,R3
00AF 33              253             RLC     A
00B0 FB              254             MOV     R3,A
00B1 CA              255             XCH     A,R2
00B2 33              256             RLC     A
A51 MACRO ASSEMBLER  51                                                                   06/29/2007 15:34:54 PAGE     5

00B3 CA              257             XCH     A,R2
00B4 92D5            258             MOV     F0,C    ;保存溢出位
00B6 C3              259             CLR     C
00B7 9F              260             SUBB    A,R7    ;计算(R2R3-R6R7)
00B8 F9              261             MOV     R1,A
00B9 EA              262             MOV     A,R2
00BA 9E              263             SUBB    A,R6
00BB B0D5            264             ANL     C,/F0   ;结果判断
00BD 4004            265             JC      DVD3
00BF FA              266             MOV     R2,A    ;够减,存放新的余数
00C0 E9              267             MOV     A,R1
00C1 FB              268             MOV     R3,A
00C2 0D              269             INC     R5      ;商的低位置一
00C3                 270     DVD3:
00C3 D5F0E1          271             DJNZ    B,DVD2  ;计算完十六位商(R4R5)
00C6 EC              272             MOV     A,R4    ;将商移到R2R3中
                     273     
00C7 FA              274             MOV     R2,A
00C8 ED              275             MOV     A,R5
00C9 FB              276             MOV     R3,A
00CA C2D2            277             CLR     OV      ;设立成功标志
00CC 22              278             RET
                     279     
                     280     ; (8)  标号:D457 功能:双字节二进制无符号数除以单字节二进制数
                     281     
                     282     ;入口条件:被除数在R4、R5中,除数在R7中。
                     283     ;出口信息:OV=0 时,单字节商在R3中,OV=1 时溢出。
                     284     ;影响资源:PSW、A、R3~R7    堆栈需求:  2字节
                     285     
00CD C3              286     D457:   CLR     C
00CE EC              287             MOV     A,R4
00CF 9F              288             SUBB    A,R7
00D0 4003            289             JC      DV50
00D2 D2D2            290             SETB    OV      ;商溢出
00D4 22              291             RET
00D5                 292     DV50:
00D5 7E08            293             MOV     R6,#8   ;求平均值(R4R5/R7-→R3)
00D7                 294     DV51:
00D7 ED              295             MOV     A,R5
00D8 33              296             RLC     A
00D9 FD              297             MOV     R5,A
00DA EC              298             MOV     A,R4
                     299     
00DB 33              300             RLC     A
00DC FC              301             MOV     R4,A
00DD 92D5            302             MOV     F0,C
00DF C3              303             CLR     C
00E0 9F              304             SUBB    A,R7
00E1 B0D5            305             ANL     C,/F0
00E3 4001            306             JC      DV52
00E5 FC              307             MOV     R4,A
00E6                 308     DV52:
00E6 B3              309             CPL     C
00E7 EB              310             MOV     A,R3
00E8 33              311             RLC     A
00E9 FB              312             MOV     R3,A
00EA DEEB            313             DJNZ    R6,DV51
00EC EC              314             MOV     A,R4    ;四舍五入
00ED 2C              315             ADD     A,R4
00EE 4003            316             JC      DV53
00F0 9F              317             SUBB    A,R7
00F1 4001            318             JC      DV54
00F3                 319     DV53:
00F3 0B              320             INC     R3
00F4                 321     DV54:
00F4 C2D2            322             CLR     OV
A51 MACRO ASSEMBLER  51                                                                   06/29/2007 15:34:54 PAGE     6

00F6 22              323             RET
                     324     
                     325     ;(9)标号: DV31 功能:三字节二进制无符号数除以单字节二进制数
                     326     
                     327     ;入口条件:被除数在R3、R4、R5中,除数在R7中。
                     328     ;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
                     329     ;影响资源:PSW、A、B、R2~R7    堆栈需求:  2字节
                     330     
00F7                 331     DV31:
00F7 C3              332             CLR     C
00F8 EB              333             MOV     A,R3
00F9 9F              334             SUBB    A,R7
00FA 4003            335             JC      DV30
00FC D2D2            336             SETB    OV       ;商溢出
00FE 22              337             RET
00FF                 338     DV30:
00FF 7A10            339             MOV     R2,#10H  ;求R3R4R5/R7-→R4R5
0101                 340     DM23:
0101 C3              341             CLR     C
0102 ED              342             MOV     A,R5
0103 33              343             RLC     A
0104 FD              344             MOV     R5,A
0105 EC              345             MOV     A,R4
0106 33              346             RLC     A
0107 FC              347             MOV     R4,A
0108 EB              348             MOV     A,R3
0109 33              349             RLC     A
010A FB              350             MOV     R3,A
010B 92D5            351             MOV     F0,C
010D C3              352             CLR     C
010E 9F              353             SUBB    A,R7
010F B0D5            354             ANL     C,/F0
0111 4002            355             JC      DM24
0113 FB              356             MOV     R3,A
0114 0D              357             INC     R5
0115                 358     DM24:
0115 DAEA            359             DJNZ    R2,DM23
0117 EB              360             MOV     A,R3     ;四舍五入
0118 2B              361             ADD     A,R3
0119 4003            362             JC      DM25
011B 9F              363             SUBB    A,R7
011C 4005            364             JC      DM26
011E                 365     DM25:
011E 0D              366             INC     R5
011F ED              367             MOV     A,R5
0120 7001            368             JNZ     DM26
                     369     
0122 0C              370             INC     R4
0123                 371     DM26:
0123 C2D2            372             CLR     OV
0125 22              373             RET              ;商在R4R5中
                     374     
                     375     
                     376     ; (10)标号:MULS  功能:双字节二进制有符号数乘法(补码)
                     377     
                     378     ;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
                     379     ;出口信息:乘积在R2、R3、R4、R5中。
                     380     ;影响资源:PSW、A、B、R2~R7    堆栈需求:4字节
                     381     
0126                 382     MULS:
0126 7C00            383             MOV     R4,#0   ;清零R4R5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -