社区
单片机/工控
帖子详情
求4位BCD码减法程序
mtttt
2010-04-20 10:19:40
51系统
求汇编语言程序...给我参考参考,现在还不会呢
...全文
616
9
打赏
收藏
求4位BCD码减法程序
51系统 求汇编语言程序...给我参考参考,现在还不会呢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mtttt
2010-04-22
打赏
举报
回复
[Quote=引用 5 楼 chutianya 的回复:]
额。。。。。对不起 ,第二次搞错了 还是那个没变 在这里呢
ORG 00H
START: MOV SP,#60H
;我这里设定的是R4R5为被减数,R6R7为减数,
;R5,R7中存放压缩BCD数的低两位,R4,R6中存放压缩BCD数的高两位
MOV R4,#05H
MOV R5,#05H
MOV R6,#45H
MOV R7,#45H
LC……
[/Quote]
谢谢
chutianya
2010-04-22
打赏
举报
回复
额。。错了,是加法的十进制调整指令有,减法的调整指令没有,所以比较麻烦
chutianya
2010-04-22
打赏
举报
回复
在51单片机系统指令里只有十进制加法调整指令,加法的没有,所以看起来很简单,单真正写起来还显得有些麻烦,不过只能这么麻烦了,要是非压缩的还好些,压缩的bcd数最麻烦了。。。。
galle
2010-04-22
打赏
举报
回复
有个bcd整定的命令可以用一下,就简单了!汇编忘了!
chutianya
2010-04-21
打赏
举报
回复
额。。。。。对不起 ,第二次搞错了 还是那个没变 在这里呢
ORG 00H
START: MOV SP,#60H
;我这里设定的是R4R5为被减数,R6R7为减数,
;R5,R7中存放压缩BCD数的低两位,R4,R6中存放压缩BCD数的高两位
MOV R4,#05H
MOV R5,#05H
MOV R6,#45H
MOV R7,#45H
LCALL CLEAR
;先判断两个数的大小,然后将大数放在前面然后进行运算
CLR A
CLR C
MOV A,R4
SUBB A,R6
JZ NEXT
JC CHANG
LJMP D1
NEXT: CLR A
CLR C
MOV A,R5
SUBB A,R7
JZ NEXT1
JC CHANG
LJMP D1
NEXT1: MOV R4,#0
MOV R5,#0
LJMP D1
CHANG: MOV A,R4
XCH A,R6
MOV R4,A
MOV A,R5
XCH A,R7
MOV R5,A
;减法正式开始
;提取压缩BCD数的低两位,被减数和减数分别存放在R5和R7中,结果放在R5中
;把一个寄存器里的两位压缩BCD数分别取出放在两个寄存器中,其中被减数放在R0,R1中,减数放在R2,R3中
D1: CLR A
MOV A,R5
SWAP A
ANL A,#0FH
MOV R0,A
CLR A
MOV A,R5
ANL A,#0FH
MOV R1,A
D2: CLR A
MOV A,R7
SWAP A
ANL A,#0FH
MOV R2,A
CLR A
MOV A,R7
ANL A,#0FH
MOV R3,A
MOV R5,#00H
LSUB1: CLR A
CLR C
MOV A,R1
SUBB A,R3
JC N1 ;无借位则执行下一句
MOV R5,A
LJMP LSUB2
;有借位的话
N1: CLR C
DEC R0
SUBB A,#6
ANL A,#0FH
MOV R5,A
LSUB2: CLR A
CLR C
MOV A,R0
SUBB A,R2
JC N2 ;无借位则执行下一句
SWAP A
ADD A,R5
MOV R5,A
JMP T2
;有借位的话
N2: CLR C
SUBB A,#6
ANL A,#0FH
SWAP A
ADD A,R5
MOV R5,A
;对于这位向R4寄存器中的高两位借位的为的问题作如下处理
CLR A
CLR C
MOV A,R4
ANL A,#0FH
SUBB A,#1
JC L1
DEC R4
LJMP T2
L1: CLR C
CLR A
MOV A,R4
CLR C
CLR A
SUBB A,#7
MOV R4,A
T2:
LCALL CLEAR
;开始高两位的减法,被减数和减数的高两位分别放在R4 和R6中,结果的高两位放在R4中
C1: CLR A
MOV A,R4
SWAP A
ANL A,#0FH
MOV R0,A
CLR A
MOV A,R4
ANL A,#0FH
MOV R1,A
C2: CLR A
MOV A,R6
SWAP A
ANL A,#0FH
MOV R2,A
CLR A
MOV A,R6
ANL A,#0FH
MOV R3,A
MOV R4,#00H
HSUB1: CLR A
CLR C
MOV A,R1
SUBB A,R3
JC M1 ;无借位则执行下一句
MOV R4,A
JMP HSUB2
;有借位的话
M1: CLR C
DEC R0
SUBB A,#6
ANL A,#0FH
MOV R4,A
HSUB2: CLR A
CLR C
MOV A,R0
SUBB A,R2
; // JC N2 ;无借位则执行下一句
SWAP A
ADD A,R4
MOV R4,A
LJMP ENDD
CLEAR: MOV R0,#0
MOV R1,#0
MOV R2,#0
MOV R3,#0
RET
ENDD: NOP
END
chutianya
2010-04-21
打赏
举报
回复
想了想,还是被减数与减数大小顺序不定的情况也包含进去吧,进行了一点小小的修改,嘿嘿
具体如下
ORG 00H
START: MOV SP,#60H
;我这里设定的是R4R5为被减数,R6R7为减数,且 R4R5>R6R7
;R5,R7中存放压缩BCD数的低两位,R4,R6中存放压缩BCD数的高两位
MOV R4,#67H
MOV R5,#23H
MOV R6,#45H
MOV R7,#45H
LCALL CLEAR
;提取压缩BCD数的低两位,被减数和减数分别存放在R5和R7中,结果放在R5中
;把一个寄存器里的两位压缩BCD数分别取出放在两个寄存器中,其中被减数放在R0,R1中,减数放在R2,R3中
D1: CLR A
MOV A,R5
SWAP A
ANL A,#0FH
MOV R0,A
CLR A
MOV A,R5
ANL A,#0FH
MOV R1,A
D2: CLR A
MOV A,R7
SWAP A
ANL A,#0FH
MOV R2,A
CLR A
MOV A,R7
ANL A,#0FH
MOV R3,A
MOV R5,#00H
LSUB1: CLR A
CLR C
MOV A,R1
SUBB A,R3
JC N1 ;无借位则执行下一句
MOV R5,A
LJMP LSUB2
;有借位的话
N1: CLR C
DEC R0
SUBB A,#6
ANL A,#0FH
MOV R5,A
LSUB2: CLR A
CLR C
MOV A,R0
SUBB A,R2
JC N2 ;无借位则执行下一句
SWAP A
ADD A,R5
MOV R5,A
JMP T2
;有借位的话
N2: CLR C
SUBB A,#6
ANL A,#0FH
SWAP A
ADD A,R5
MOV R5,A
;对于这位向R4寄存器中的高两位借位的为的问题作如下处理
CLR A
CLR C
MOV A,R4
ANL A,#0FH
SUBB A,#1
JC L1
DEC R4
LJMP T2
L1: CLR C
CLR A
MOV A,R4
CLR C
CLR A
SUBB A,#7
MOV R4,A
T2:
LCALL CLEAR
;开始高两位的减法,被减数和减数的高两位分别放在R4 和R6中,结果的高两位放在R4中
C1: CLR A
MOV A,R4
SWAP A
ANL A,#0FH
MOV R0,A
CLR A
MOV A,R4
ANL A,#0FH
MOV R1,A
C2: CLR A
MOV A,R6
SWAP A
ANL A,#0FH
MOV R2,A
CLR A
MOV A,R6
ANL A,#0FH
MOV R3,A
MOV R4,#00H
HSUB1: CLR A
CLR C
MOV A,R1
SUBB A,R3
JC M1 ;无借位则执行下一句
MOV R4,A
JMP HSUB2
;有借位的话
M1: CLR C
DEC R0
SUBB A,#6
ANL A,#0FH
MOV R4,A
HSUB2: CLR A
CLR C
MOV A,R0
SUBB A,R2
; // JC N2 ;无借位则执行下一句
SWAP A
ADD A,R4
MOV R4,A
LJMP ENDD
CLEAR: MOV R0,#0
MOV R1,#0
MOV R2,#0
MOV R3,#0
RET
ENDD: NOP
END
chutianya
2010-04-21
打赏
举报
回复
关于BCD码的减法程序,如果用非压缩BCD数比较简单,下面我只介绍一下四位压缩BCD数的减法程序,我们这里假定被减数大于减数,我这里设定被减数位6723-4545=2178,结果保存在了寄存器R4R5中
汇编如下
ORG 00H
START: MOV SP,#60H
;我这里设定的是R4R5为被减数,R6R7为减数,且 R4R5>R6R7
;R5,R7中存放压缩BCD数的低两位,R4,R6中存放压缩BCD数的高两位
MOV R4,#67H
MOV R5,#23H
MOV R6,#45H
MOV R7,#45H
LCALL CLEAR
;提取压缩BCD数的低两位,被减数和减数分别存放在R5和R7中,结果放在R5中
;把一个寄存器里的两位压缩BCD数分别取出放在两个寄存器中,其中被减数放在R0,R1中,减数放在R2,R3中
D1: CLR A
MOV A,R5
SWAP A
ANL A,#0FH
MOV R0,A
CLR A
MOV A,R5
ANL A,#0FH
MOV R1,A
D2: CLR A
MOV A,R7
SWAP A
ANL A,#0FH
MOV R2,A
CLR A
MOV A,R7
ANL A,#0FH
MOV R3,A
MOV R5,#00H
LSUB1: CLR A
CLR C
MOV A,R1
SUBB A,R3
JC N1 ;无借位则执行下一句
MOV R5,A
LJMP LSUB2
;有借位的话
N1: CLR C
DEC R0
SUBB A,#6
ANL A,#0FH
MOV R5,A
LSUB2: CLR A
CLR C
MOV A,R0
SUBB A,R2
JC N2 ;无借位则执行下一句
SWAP A
ADD A,R5
MOV R5,A
JMP T2
;有借位的话
N2: CLR C
SUBB A,#6
ANL A,#0FH
SWAP A
ADD A,R5
MOV R5,A
;对于这位向R4寄存器中的高两位借位的为的问题作如下处理
CLR A
CLR C
MOV A,R4
ANL A,#0FH
SUBB A,#1
JC L1
DEC R4
LJMP T2
L1: CLR C
CLR A
MOV A,R4
CLR C
CLR A
SUBB A,#7
MOV R4,A
T2:
LCALL CLEAR
;开始高两位的减法,被减数和减数的高两位分别放在R4 和R6中,结果的高两位放在R4中
C1: CLR A
MOV A,R4
SWAP A
ANL A,#0FH
MOV R0,A
CLR A
MOV A,R4
ANL A,#0FH
MOV R1,A
C2: CLR A
MOV A,R6
SWAP A
ANL A,#0FH
MOV R2,A
CLR A
MOV A,R6
ANL A,#0FH
MOV R3,A
MOV R4,#00H
HSUB1: CLR A
CLR C
MOV A,R1
SUBB A,R3
JC M1 ;无借位则执行下一句
MOV R4,A
JMP HSUB2
;有借位的话
M1: CLR C
DEC R0
SUBB A,#6
ANL A,#0FH
MOV R4,A
HSUB2: CLR A
CLR C
MOV A,R0
SUBB A,R2
; // JC N2 ;无借位则执行下一句
SWAP A
ADD A,R4
MOV R4,A
LJMP ENDD
CLEAR: MOV R0,#0
MOV R1,#0
MOV R2,#0
MOV R3,#0
RET
ENDD: NOP
END
mtttt
2010-04-20
打赏
举报
回复
[Quote=引用 1 楼 wslxs2008 的回复:]
我记得以前的教材是有bcd加减法的运算啊
[/Quote]
这个还是问答题呢...没有减法
空影
2010-04-20
打赏
举报
回复
我记得以前的教材是有bcd加减法的运算啊
BCD码
减法
实现
程序
BCD码
减法
实现
程序
,非常完整,采用Verilog HDL语言实现。-BCD subtraction to achieve program code, very complete, using Verilog HDL language.
用VHDL编写的一
位
BCD码
的加
减法
用VHDL语言编写的关于一
位
BCD码
的加
减法
的
程序
BCD码
加法
程序
自己写的BCD加法计算
程序
,供大家交流学习,版权归大家
BCD码
减法
程序
led数码管显示
将两个多
位
十进制数相加,要
求
被加数,加数均以ASCII码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低
位
在前),结果送回RESULT处,并在数码管中显示。
verilog HDL 高效二进制转
bcd码
程序
(下载请看软件说明)
占用资源少、移植性好、扩展方便的verilog HDL二进制转
bcd码
程序
下载的朋友请在 bcd ; 的前面加上 result[0] = bin[B_SIZE-1]; 由此造成的不便请见谅 CSDN文档上传后不能删除,这点也让我纠结
单片机/工控
27,375
社区成员
28,769
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章