
还有一道关于单片机的编程问题~高手帮下忙啦~······在线等!!急求啊~~~拜托诸位了~
编写10位十进制加法子程序(十进制数采用压缩BCD码存放)入口:加数:24H—20H,低地址放低字节被加数:29H—25H,低地址放低字节出口和:4005H—4000H,...
编写10位十进制加法子程序(十进制数采用压缩BCD码存放)
入口: 加数:24H—20H,低地址放低字节
被加数:29H—25H,低地址放低字节
出口 和:4005H—4000H,低地址放低字节
要求调用多组数据调试,注意观察PSW的变化,理解DA A指令的含义。例如:
执行前地址:24 23 22 21 20 29 28 27 26 25
数据:12 34 56 78 90 88 99 33 12 74
执行后地址:4005 4004 4003 4002 4001 4000
数据: 01 01 33 89 91 64 展开
入口: 加数:24H—20H,低地址放低字节
被加数:29H—25H,低地址放低字节
出口 和:4005H—4000H,低地址放低字节
要求调用多组数据调试,注意观察PSW的变化,理解DA A指令的含义。例如:
执行前地址:24 23 22 21 20 29 28 27 26 25
数据:12 34 56 78 90 88 99 33 12 74
执行后地址:4005 4004 4003 4002 4001 4000
数据: 01 01 33 89 91 64 展开
展开全部
相加的两数有五个字节,且地址连续,所以用5次循环即可完成。
ADD10:
MOV R0,#25H ;被加数 25H存放最低位,29H存放最高位
MOV R1,#20H ;加数 20H存放最低位,24H存放最高位
MOV DPH,#40H
MOV DPL,#00H
MOV R2,#05H ;五个字节,共5次运算计数
CLR C ;清除标志位,
ADDLOOP:
MOV A,@R0
ADDC A,@R1 ;
DA A ;做十进制调整
MOVX @DPTR, A ;结果放回4005H--4000H
INC R0
INC R1
INC DPTR
DJNZ R2,ADDLOOP
RET
ADD10:
MOV R0,#25H ;被加数 25H存放最低位,29H存放最高位
MOV R1,#20H ;加数 20H存放最低位,24H存放最高位
MOV DPH,#40H
MOV DPL,#00H
MOV R2,#05H ;五个字节,共5次运算计数
CLR C ;清除标志位,
ADDLOOP:
MOV A,@R0
ADDC A,@R1 ;
DA A ;做十进制调整
MOVX @DPTR, A ;结果放回4005H--4000H
INC R0
INC R1
INC DPTR
DJNZ R2,ADDLOOP
RET
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询