计算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次计算完毕