计算1到100的和并且将十进制内容存进高128字节ram中

计算1到100的和并且将十进制内容存进高128字节ram中

keil代码

RESULT_L EQU 31H
RESULT_H EQU 32H
RES_128H EQU 81H ;存放高128 低字节 存放十六进制
RES_128L EQU 82H ;存放高128 高字节
RES_DEC_128H EQU 83H ;存放高128 高字节 十进制
RES_DEC_128L EQU 84H ;存放高128 低字节 十进制
ORG 0000H
LJMP START
ORG 100H

START:	CLR A;清空A
		MOV R7,A ;结果低字节
		MOV R6,A ;结果高字节
		MOV RESULT_L,R7;先把地址上面的数据清零
		MOV RESULT_H,R6
		MOV R0,#RES_128L
		MOV @R0,RESULT_L ;存入结果低字节
		MOV R0,#RES_128H
		MOV @R0,RESULT_H ;存入结果高字节
		MOV R4,#01H ;循环数1-100
		
LOOP:	MOV A,R4
		ADD A,R7
		MOV R7,A
		CLR A
		ADDC A,R6
		MOV R6,A
		INC R4
		CJNE R4,#65H,LOOP ;循环体

MOV RESULT_L,R7;先把数据存入一个中间内存里面
MOV RESULT_H,R6
MOV R0,#RES_128L
MOV @R0,RESULT_L ;存入结果低字节
MOV R0,#RES_128H
MOV @R0,RESULT_H ;存入结果高字节

HB2:	CLR A ;BCD码初始化
		MOV R3, A
		MOV R4, A
		MOV R5, A
		MOV R2, #10H ;转换双字节十六进制整数
HB3: 	MOV A, R7 ;从高端移出待转换数的一位到CY中
		RLC A
		MOV R7, A
		MOV A, R6
		RLC A
		MOV R6, A
		MOV A, R5 ;BCD码带进位自身相加,相当于乘2
		ADDC A, R5
		DA A ;十进制调整
		MOV R5, A
		MOV A, R4
		ADDC A, R4
		DA A
		MOV R4, A
		MOV A, R3
		ADDC A, R3
		MOV R3, A ;双字节十六进制数的万位数不超过6,不用调整
		DJNZ R2, HB3 ;处理完16bit

MOV RESULT_L,R5;先把数据存入一个中间内存里面
MOV RESULT_H,R4
MOV R0,#RES_DEC_128H
MOV @R0,RESULT_H ;存入结果低字节
MOV R0,#RES_DEC_128L
MOV @R0,RESULT_L ;存入结果高字节


LOOP1:
AJMP LOOP1 ;程序结束此处死循环
END

keil仿真结果

在这里插入图片描述

上面13BA是16进制的结果 后面5050是10进制结果

1.高128字节只能间接访问 直接访问就是SFR特殊寄存器了

2.先计算16进制的和

3.然后转换为10进制的和

5050是10进制结果

1.高128字节只能间接访问 直接访问就是SFR特殊寄存器了

2.先计算16进制的和

3.然后转换为10进制的和

16进制转换为10进制通过移位乘二十进制调整加法实现,移位16次计算完毕

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值