松翰数学运算库:8/16/32位加减乘除程序模块
"该资源是一个名为Math.lib的运算程序库,专为松翰(可能是指一家专注于微控制器或嵌入式系统的公司)设计,包含了针对8位、16位和32位数值的加法、减法、乘法和除法运算程序模块。此库的创建日期为2003年07月22日,由SamLin编写。程序库在不断地更新和优化,例如在2003年12月30日进行了版本1.1的修订,增加了新的功能。此外,还存在一个对24位数值进行除法的运算模块,在版本1.2中被引入,更新于2004年01月06日。使用这些运算程序模块会占用一定的ROM空间,具体为7个字节的ROM空间,并且某些操作如除法会有特定的指令周期和执行时间。" 详细说明: 松翰运算程序库提供了针对不同位宽数值的算术运算函数,旨在简化微控制器或嵌入式系统中的数学计算任务。以下是对各个运算模块的详细解释: 1. **加法模块**: - `add16ar0,ar1`:这是一个16位加法器,将`ar0`和`ar1`中的16位数值相加,结果存储回`ar0`。 - `add16mmem0,mem1,mem2,mem3`:这个宏执行16位加法,将内存地址`mem0`和`mem1`表示的16位数值与`mem2`和`mem3`表示的16位数值相加,结果分别存储到`arg0H`和`arg0L`。 2. **减法模块**: - `sub16ar0,ar1`:16位减法器,从`ar0`中减去`ar1`的值,结果保存回`ar0`。 - `sub16mmem0,mem1,mem2,mem3`:执行16位减法,将`mem0`和`mem1`表示的数值减去`mem2`和`mem3`表示的数值,结果存入`arg0H`和`arg0L`。 3. **乘法模块**: - `mul16mmem0,mem1,mem2,mem3`:这是一个16位乘法器,计算`mem0`和`mem1`所代表的16位数值与`mem2`和`mem3`的乘积,结果分为两部分存储到`arg0H`, `arg0L`, `arg1H`, `arg1L`。 4. **除法模块**: - `div16mmem0,mem1,mem2,mem3,mem4,mem5`:执行16位除法,`<mem0,mem1,mem2,mem3>`除以`<mem4,mem5>`,商存储到`arg2msb`, `arg2H`, `arg2M`, `arg2L`,余数存储到`arg0H`, `arg0L`。这个操作需要大约1100个指令周期。 - `div24mmem0,mem1,mem2,mem3,mem4,mem5,mem6`:这是24位除法的新功能,在版本1.2中加入,`<mem0,mem1,mem2,mem3>`除以`<mem4,mem5,mem6>`,商存入`arg2msb`, `arg2H`, `arg2M`, `arg2L`,余数存入`arg0msb`, `arg0H`, `arg0L`。 这些运算程序模块在嵌入式系统中特别有用,因为它们可以高效地处理各种位宽的算术运算,而无需开发人员从头编写底层代码。此外,随着版本的升级,该库不仅保持了功能的完善性,还提高了性能,如减少ROM空间占用和优化指令周期,以适应不同的计算需求。
;
; MODULE: Math.lib
;
; DATE: 07/22/2003
;
; AUTHOR: Sam Lin
;
; NOTE: 1. add16 ar0, ar1
; ar0 = ar0 + ar1
; 2. add16m mem0, mem1, mem2, mem3
; <arg0H, arg0L> = <mem0, mem1> + <mem2, mem3>
; 3. sub16 ar0, ar1
; ar0 = ar0 - ar1
; 4. sub16m mem0, mem1, mem2, mem3
; <arg0H, arg0L> = <mem0, mem1> - <mem2, mem3>
; 5. mul16m mem0, mem1, mem2, mem3
; <arg0H, arg0L, arg1H, arg1L> = <mem0, mem1> * <mem2, mem3>
; Fixed 28 instruction cycle
; 24 word R.O.M. space for this macro
; 6. div16m mem0, mem1, mem2, mem3, mem4, mem5
; <arg2msb, arg2H, arg2M, arg2L>= <mem0, mem1, mem2, mem3> / <mem4, mem5>
; <arg0H, arg0L> = <mem0, mem1, mem2, mem3> % <mem4, mem5>
; about 1100 instruction cycle
;
; include this file will use 7-word R.O.M space;
; REVISION:
; Version: 1.1
; Date: 12/30/2003
; This file came from math16.lib.
; <arg2msb, arg2H, arg2M, arg2L> = <mem0, mem1, mem2, mem3> / < mem4, mem5, mem6>
; <arg0msb, arg0H, arg0L> = <mem0, mem1, mem2, mem3> % < mem4, mem5, mem6>
; Version: 1.2
; Date 01/06/2004
; This file integrated BCD.lib
; NOTE: 8. atoh_m16 ar0, ar1 ; ASCII to Hex
; (ACC)hex = (<ar0, ar1>)ascii
; 9. htoa_m08 ar0, ar1 ; Hex to ASCII
; (<ar0, ar1>)ascii = (ACC)hex
; 10. dtoh_m24 macro ar0, ar1, ar2, ar3 ; decimal value convert to hex value
; (<arg0H, arg0L, arg1H>)hex = (<ar0, ar1, ar2, ar3>)decimal
; 11. call mpy10
; <arg0H, arg0L, arg1H> = (<arg0H, arg0L, arg1H> + a) * 10
; 12. htod_m24 macro ar0, ar1, ar2 ; hex value convert to decimal value
; (<arg0H, arg0L, arg1H, arg1L>)decimal = (<ar0, ar1, ar2>)hex
; Version 1.3
; 13. add24m mem0, mem1, mem2, mem3, mem4, mem5
; <mem0, mem1, mem2> = <mem0, mem1, mem2> + <mem3, mem4, mem5>
; 14. mark "mpy10" because lack of "MUL" instruction
; 15. GorL24 mem0, mem1, mem2, ar0, ar1, ar2
; if <mem0, mem1, mem2> >= <ar0, ar1, ar2> then FC = 1
; else FC = 0
; 16. incmem24 mem0, mem1, mem2
; <mem0, mem1, mem2> = < mem0, mem1, mem2> + 1
; Version 1.4
; 03/09/2004
; 17. sadd15m mem0, mem1, mem2, mem3
; <arg0H, arg0L> = <mem0, mem1> + <mem2, mem3>
; if the result < 0 the sign_byte.0 = 1
剩余27页未读,继续阅读
- 粉丝: 1
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 深入理解23种设计模式
- 制作与调试:声控开关电路详解
- 腾讯2008年软件开发笔试题解析
- WebService开发指南:从入门到精通
- 栈数据结构实现的密码设置算法
- 提升逻辑与英语能力:揭秘IBM笔试核心词汇及题型
- SOPC技术探索:理论与实践
- 计算图中节点介数中心性的函数
- 电子元器件详解:电阻、电容、电感与传感器
- MIT经典:统计自然语言处理基础
- CMD命令大全详解与实用指南
- 数据结构复习重点:逻辑结构与存储结构
- ACM算法必读书籍推荐:权威指南与实战解析
- Ubuntu命令行与终端:从Shell到rxvt-unicode
- 深入理解VC_MFC编程:窗口、类、消息处理与绘图
- AT89S52单片机实现的温湿度智能检测与控制系统