PIC单片机应用开发典型模块第八章程序Word下载.docx

上传人:b****7 文档编号:22760017 上传时间:2023-02-05 格式:DOCX 页数:45 大小:31.16KB
下载 相关 举报
PIC单片机应用开发典型模块第八章程序Word下载.docx_第1页
第1页 / 共45页
PIC单片机应用开发典型模块第八章程序Word下载.docx_第2页
第2页 / 共45页
PIC单片机应用开发典型模块第八章程序Word下载.docx_第3页
第3页 / 共45页
PIC单片机应用开发典型模块第八章程序Word下载.docx_第4页
第4页 / 共45页
PIC单片机应用开发典型模块第八章程序Word下载.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

PIC单片机应用开发典型模块第八章程序Word下载.docx

《PIC单片机应用开发典型模块第八章程序Word下载.docx》由会员分享,可在线阅读,更多相关《PIC单片机应用开发典型模块第八章程序Word下载.docx(45页珍藏版)》请在冰豆网上搜索。

PIC单片机应用开发典型模块第八章程序Word下载.docx

NEG_A 

;

求ACCA的补码

;

双字节加法子程序,入口地址ACCB+ACCA,出口地址ACCB

D_add 

MOVF 

ACCALO,0;

ACCB和ACCA低半字节相加

ADDWF 

ACCBLO

BTFSC 

STATUS,C;

有进位否?

INCF 

ACCBHI;

有,ACCB高字节加1,再加ACCAHI

ACCAHI,0;

ACCA、ACCB高半字节相加

ACCBHI

RETURN 

;

子程序返回

ACCA取补子程序

COMF 

ACCALO取反加1

ACCALO

STATUS,Z 

低8位有进位吗?

DECF 

ACCAHI;

有,ACCAHI减1,再取反

ACCAHI;

否则ACCAHI直接取反

RETURN;

(2)16×

16位定点数乘法程序

存放乘数低8位

 

存放乘数高8位

存放被乘数低8位和乘积第16~23位

存放被乘数高8位和乘积第24~31位

ACCCLO 

26 

存放乘积低8位

ACCCHI 

27 

存放乘积高8位

ACCDLO 

28 

临时寄存器

ACCDHI 

29 

TEMP 

2A 

SIGN 

2B 

存放乘积的符号

0X0100

D_mpy 

S_SIGN 

求取乘积的符号,并对负数取补

SETUP 

调用子程序,将ACCB的值送ACCD

TEMP

CLRF 

ACCCHI;

清ACCC

ACCCLO

MLOOP 

BCF 

STATUS,C;

清进位位

RRF 

;

ACCD右移

ACCDLO

STATUS,C 

判断是否需要相加

加乘数至ACCB,见加法程序

右移部分乘积

ACCCHI

DECFSZ 

TEMP;

乘法完成否?

否,继续求乘积

BTFSS 

SIGN,7 

是,确定乘积的符号

OVER 

为正,乘法结束

为负,乘积取补

STATUS,Z

NEG_B 

RETURN;

MOVLW 

15;

初始化TEMP寄存器 

MOVWF 

ACCBHI,0 

ACCB送ACCD

ACCDHI

ACCBLO,0

清ACCB

ACCAHI,0 

ACCAHI异或ACCBHI,结果送SIGN单元

XORWF 

ACCBHI,0

ACCBHI,7 

ACCB为负吗?

CHEK_A 

否,检查ACCA

是,求取ACCB绝对值

ACCAHI,7 

ACCA为负吗?

ACCA为负,求取ACCA绝对值,

ACCA和ACCB均为正,返回

(3)16×

16位定点数除法程序

20;

存放除数低8位

存放除数高8位

22 

存放被除数和商的低8位

存放被除数和商的高8位

存放余数低8位

25 

存放余数高8位

26;

27;

28;

存放商的符号

D_div 

确定商的符号,并将负数取补

初始化TEMP,将被除数移至ACCD 

清余数寄存器

DLOOP 

RLF 

被除数、余数左移1位

ACCCHI-ACCAHI

SUBWF 

ACCCHI,0

ACCCHI=ACCAHI?

NOCHK

ACCALO,0 

是,ACCCLO-ACCALO

ACCCLO,0

NOCHK 

ACCC>

ACCA?

NOGO

是,余数减除数

STATUS,C

ACCAHI,0

BSF 

置进位位

NOGO 

商左移1位

循环完毕?

DLOOP

是,确定商的符号

DIVOVER 

为正,除法结束,跳转到结束行

为负,商和余数分别取补

见乘法程序中间NEG_B

ACCB为负?

是,ACCB取补

ACCA为负?

ACCA为负,取补(NEG_A子程序请参见

16×

16位定点数乘法子程序NEG_A)

ACCA和ACCB均为负,返回

(4)浮点数加减法程序

存放加数或减数的尾数

21

EXPA 

存放加数或减数阶码

存放被加数或被减数尾数以及和或差

24

EXPB 

存放被加数或被减数阶码

TEMP1 

30 

TIMES 

31 

0X000

F_sub 

NEG_A;

求ACCA的补码,将减法转换为补码加法

F_add 

SUBADJ 

调子程序判断EXPB和EXPA的大小

参与运算的两个数阶码相等?

PADD 

是,求尾数的和

EXPB>

EXPA?

F_swap 

是,ACCB与ACCA互换

EXPA,0 

否,求取两者的差值

EXPB

SCLOOP 

SHFTSR 

ACCB右移规格化

INCFSZ 

EXPB=EXPA?

否,继续右移

是,存和(差)的阶码

ACCAHI或ACCBHI

IORWF 

存于SIGN寄存器

暂存ACCBHI 

EXPA

尾数相加

ACCA和ACCB有负数?

ACCBHI,7;

否,把和的最高位和次高位同时进位?

ADD2 

否,转ADD2

ADD3 

ACCA和ACCB不同时为负,转ADD3

EXPA,7 

是,ACCB为负吗?

ACCA和ACCB同为负,带负号右移

和(差)规格化

F_norm

最高位次高位不同时进位,ACCB右移

SHFTR

ACCB带符号右移子程序

ACCBHI,7

SHFTR 

ACCAHI,0;

ACCAHI、ACCBHI互换

ACCAHI

TEMP,0

ACCALO、ACCBLO互换

EXPA、EXPB互换

EXPB,0

RETURN

EXPA,0;

EXPA异或EXPB,结果送C_DIV

C_DIV

EXPB-EXPA

C_DIV,7 

EXPA和EXPB同号?

是,进位位的值真确反映两者的大小,返回

否,进位位的值取反

CHANGEC

CHANGEC 

F_norm 

ACCB=0?

C_norm

是,不需规格化,返回

C_norm 

ACCBHI,7;

否。

C_norm2 

C_norm1 

ACCBHI,6;

为正。

规格化完毕?

ACCBHI.6=1,规格化结束

SHFTSL 

ACCB左移

EXPB减1

重新判断规格化完毕否?

ACCBHI,6 

ACCB为负。

规格化完毕否?

ACCBHI.6=0,规格化结束

否,ACCB左移

加符号

STATUS 

,C 

ACCB左移子程序 

(5)浮点数乘法程序

存放乘数尾数

存放乘数阶码

存放被乘数尾数和乘积高16位

存放被乘数阶码

存放乘积低16位

存放乘积符号

COUNT 

2F 

 

ACCEHI 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1