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

📄 51.lst

📁 单片机定点运算子程序库
💻 LST
📖 第 1 页 / 共 5 页
字号:
A51 MACRO ASSEMBLER  51                                                                   06/29/2007 15:34:54 PAGE     1


MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN 51.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 51.ASM SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;**********************************************************
                       2     ;  MCS-51定点运算子程序库及其使用说明
                       3     
                       4     ;    1.多字节定点操作数:用[R0]或[R1]来表示存放在由R0或R1指示的连续单元中的数
                       5     ;据。地址小的单元存放数据的高字节。例如:[R0]=123456H,若(R0)=30H,则(30H)=12H,
                       6     ;(31H)=34H,(32H)=56H。
                       7     ;    2.运算精度:单次定点运算精度为结果最低位的当量值。
                       8     ;    3.工作区:数据工作区固定在PSW、A、B、R2~R7,用户只要不在工作区中存放无
                       9     ;关的或非消耗性的信息,程序就具有较好的透明性。
                      10     ;********************************************************************
                      11     ;(1)  标号:BCDA 功能:多字节BCD码加法
                      12     ;(2)  标号:BCDB 功能:多字节BCD码减法
                      13     ;(3)  标号:NEG   功能:多字节BCD码取补
                      14     ;(4)  标号:BRLN 功能:多字节BCD码左移十进制一位(乘十)
                      15     ;(5)  标号:MULD 功能:双字节二进制无符号数乘法
                      16     ;(6)  标号: MUL2 功能:双字节二进制无符号数平方
                      17     ;(7)  标号:DIVD 功能:双字节二进制无符号数除法
                      18     ;(8)  标号:D457 功能:双字节二进制无符号数除以单字节二进制数
                      19     ;(9)  标号: DV31 功能:三字节二进制无符号数除以单字节二进制数
                      20     ;(10)标号:MULS 功能:双字节二进制有符号数乘法(补码)
                      21     ;(11)标号:DIVS 功能:双字节二进制有符号数除法(补码)
                      22     ;(12)标号:SH2   功能:双字节二进制无符号数开平方(快速)
                      23     ;(13)标号: SH4   功能:四字节二进制无符号数开平方(快速)
                      24     ;(14)标号:HASC 功能:单字节十六进制数转换成双字节ASCII码
                      25     ;(15)标号:ASCH 功能:ASCII码转换成十六进制数
                      26     ;(16)标号: HBCD 功能:单字节十六进制整数转换成单字节BCD码整数
                      27     ;(17)标号:HB2   功能:双字节十六进制整数转换成双字节BCD码整数
                      28     ;(18)标号:HBD   功能:单字节十六进制小数转换成单字节BCD码小数
                      29     ;(19)标号:HBD2 功能:双字节十六进制小数转换成双字节BCD码小数
                      30     ;(20)标号:BCDH 功能:单字节BCD码整数转换成单字节十六进制整数
                      31     ;(21)标号:BH2   功能:双字节BCD码整数转换成双字节十六进制整数
                      32     ;(22)标号:BHD   功能:单字节BCD码小数转换成单字节十六进制小数
                      33     ;(23)标号:BHD2 功能:双字节BCD码小数转换成双字节十六进制小数
                      34     ;(24)标号:MM     功能:求单字节十六进制无符号数据块的极值
                      35     ;(25)标号:MMS   功能:求单字节十六进制有符号数据块的极值
                      36     ;(26)标号:FDS1 功能:顺序查找(ROM)单字节表格
                      37     ;(27)标号:FDS2 功能:顺序查找(ROM)双字节表格
                      38     ;(28)标号:FDD1 功能:对分查找(ROM)单字节无符号增序数据表格
                      39     ;(29)标号:FDD2 功能:对分查找(ROM)双字节无符号增序数据表格
                      40     ;(30)标号: DDM1 功能:求单字节十六进制无符号数据块的平均值
                      41     ;(31)标号:DDM2 功能:求双字节十六进制无符号数据块的平均值
                      42     ;(32)标号:XR1   功能:求单字节数据块的(异或)校验和
                      43     ;(33) 标号:XR2   功能:求双字节数据块的(异或)校验和
                      44     ;(34)标号:SORT 功能:单字节无符号数据块排序(增序)
                      45     
                      46     ;**********************************************************
                      47     ;   (1)  标号: BCDA  功能:多字节BCD码加法
                      48     
                      49     ;入口条件:字节数在R7中,被加数在[R0]中,加数在[R1]中。
                      50     ;出口信息:和在[R0]中,最高位进位在CY中。
                      51     ;影响资源:PSW、A、R2    堆栈需求:  2字节
                      52     
0000                  53     BCDA:
0000 EF               54             MOV     A,R7   ;取字节数至R2中
0001 FA               55             MOV     R2,A
0002 28               56             ADD     A,R0   ;初始化数据指针
0003 F8               57             MOV     R0,A
0004 EA               58             MOV     A,R2
A51 MACRO ASSEMBLER  51                                                                   06/29/2007 15:34:54 PAGE     2

0005 29               59             ADD     A,R1
0006 F9               60             MOV     R1,A
0007 C3               61             CLR     C
0008                  62     BCD1:
0008 18               63             DEC     R0      ;调整数据指针
0009 19               64             DEC     R1
000A E6               65             MOV     A,@R0
000B 37               66             ADDC    A,@R1   ;按字节相加
000C D4               67             DA      A       ;十进制调整
000D F6               68             MOV     @R0,A   ;和存回[R0]中
000E DAF8             69             DJNZ    R2,BCD1 ;处理完所有字节
0010 22               70             RET
                      71     
                      72     ;  (2) 标号:BCDB  功能:多字节BCD码减法
                      73     
                      74     ;入口条件:字节数在R7中,被减数在[R0]中,减数在[R1]中。
                      75     ;出口信息:差在[R0]中,最高位借位在CY中。
                      76     ;影响资源:PSW、A、R2、R3    堆栈需求:  6字节
                      77     
0011                  78     BCDB:
0011 120020           79             LCALL   NEG1    ;减数[R1]十进制取补
0014 120000           80             LCALL   BCDA    ;按多字节BCD码加法处理
0017 B3               81             CPL     C       ;将补码加法的进位标志转换成借位标志
0018 92D5             82             MOV     F0,C    ;保护借位标志
001A 120020           83             LCALL   NEG1    ;恢复减数[R1]的原始值
001D A2D5             84             MOV     C,F0    ;恢复借位标志
001F 22               85             RET
0020                  86     NEG1:
0020 E8               87             MOV     A,R0    ;[R1]十进制取补子程序入口
0021 C9               88             XCH     A,R1    ;交换指针
0022 C8               89             XCH     A,R0
0023 12002A           90             LCALL   NEG     ;通过[R0]实现[R1]取补
                      91     
0026 E8               92             MOV     A,R0
0027 C9               93             XCH     A,R1    ;换回指针
0028 C8               94             XCH     A,R0
0029 22               95             RET
                      96     
                      97     ;  (3)标号:NEG  功能:多字节BCD码取补
                      98     
                      99     ;入口条件:字节数在R7中,操作数在[R0]中。
                     100     ;出口信息:结果仍在[R0]中。
                     101     ;影响资源:PSW、A、R2、R3    堆栈需求:  2字节
                     102     
002A                 103     NEG:
002A EF              104             MOV     A,R7    ;取(字节数减一)至R2中
002B 14              105             DEC     A
002C FA              106             MOV     R2,A
002D E8              107             MOV     A,R0    ;保护指针
002E FB              108             MOV     R3,A
002F                 109     NEG0:
002F C3              110             CLR     C
0030 7499            111             MOV     A,#99H
0032 96              112             SUBB    A,@R0   ;按字节十进制取补
0033 F6              113             MOV     @R0,A   ;存回[R0]中
0034 08              114             INC     R0      ;调整数据指针
0035 DAF8            115             DJNZ    R2,NEG0 ;处理完(R2)字节
                     116     
0037 749A            117             MOV     A,#9AH  ;最低字节单独取补
0039 96              118             SUBB    A,@R0
003A F6              119             MOV     @R0,A
003B EB              120             MOV     A,R3    ;恢复指针
003C F8              121             MOV     R0,A
003D 22              122             RET
                     123     
                     124     ; (4)标号:BRLN  功能:多字节BCD码左移十进制一位(乘十)
A51 MACRO ASSEMBLER  51                                                                   06/29/2007 15:34:54 PAGE     3

                     125     
                     126     ;入口条件:字节数在R7中,操作数在[R0]中。
                     127     ;出口信息:结果仍在[R0]中,移出的十进制最高位在R3中。
                     128     ;影响资源:PSW、A、R2、R3    堆栈需求:  2字节
                     129     
003E                 130     BRLN:
003E EF              131             MOV     A,R7    ;取字节数至R2中
003F FA              132             MOV     R2,A
0040 28              133             ADD     A,R0    ;初始化数据指针
0041 F8              134             MOV     R0,A
0042 7B00            135             MOV     R3,#0   ;工作单元初始化
0044                 136     BRL1:
0044 18              137             DEC     R0      ;调整数据指针
                     138     
0045 E6              139             MOV     A,@R0   ;取一字节
0046 C4              140             SWAP    A       ;交换十进制高低位
0047 F6              141             MOV     @R0,A   ;存回
0048 EB              142             MOV     A,R3    ;取低字节移出的十进制高位
0049 D6              143             XCHD    A,@R0   ;换出本字节的十进制高位
004A FB              144             MOV     R3,A    ;保存本字节的十进制高位
004B DAF7            145             DJNZ    R2,BRL1 ;处理完所有字节
004D 22              146             RET
                     147     
                     148     ;  (5)标号:MULD  功能:双字节二进制无符号数乘法
                     149     
                     150     ;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
                     151     ;出口信息:乘积在R2、R3、R4、R5中。
                     152     ;影响资源:PSW、A、B、R2~R7    堆栈需求:2字节
                     153     
004E                 154     MULD:
004E EB              155             MOV     A,R3    ;计算R3乘R7
004F 8FF0            156             MOV     B,R7
                     157     
0051 A4              158             MUL     AB
0052 ACF0            159             MOV     R4,B    ;暂存部分积
0054 FD              160             MOV     R5,A
0055 EB              161             MOV     A,R3    ;计算R3乘R6
0056 8EF0            162             MOV     B,R6
0058 A4              163             MUL     AB
0059 2C              164             ADD     A,R4    ;累加部分积
005A FC              165             MOV     R4,A
005B E4              166             CLR     A
005C 35F0            167             ADDC    A,B
005E FB              168             MOV     R3,A
005F EA              169             MOV     A,R2    ;计算R2乘R7
0060 8FF0            170             MOV     B,R7
0062 A4              171             MUL     AB
0063 2C              172             ADD     A,R4    ;累加部分积
0064 FC              173             MOV     R4,A
0065 EB              174             MOV     A,R3
0066 35F0            175             ADDC    A,B
0068 FB              176             MOV     R3,A
0069 E4              177             CLR     A
006A 33              178             RLC     A
006B CA              179             XCH     A,R2    ;计算R2乘R6
006C 8EF0            180             MOV     B,R6
006E A4              181             MUL     AB
006F 2B              182             ADD     A,R3    ;累加部分积
0070 FB              183             MOV     R3,A
0071 EA              184             MOV     A,R2
0072 35F0            185             ADDC    A,B
0074 FA              186             MOV     R2,A
0075 22              187             RET
                     188     

⌨️ 快捷键说明

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