无符号二进制数转换为BCD,为什么在CUNFANG函数里要INC R1 3次?
;=================================;双字节无符号二进制数转换成BCD形式
;入口参数:双字节无符号二进制数地址放在R0中
; 存放转结果的地址放在R1中
;===================================
ORG 0000H
AJMP START
ORG 0100H
START: MOV SP, #60H
MOV R1, #25H
MOV R0, #20H
MOV @R0, #0FFH ;赋初值(低8位)
INC R0
MOV @R0, #0FFH
ACALL DW_BCD
AJMP $
DW_BCD: DEC R0
MOV A, R0 ;保护地址20H,和25H
MOV R6, A
MOV A, R1
MOV R7, A
MOV R2, #3
CLEAR: CLR A
MOV @R1, A
INC R1
DJNZ R2, CLEAR
MOV R3, #16
CLR C
YIWEI: MOV A, R6
MOV R0, A
MOV A, @R0
RLC A
MOV @R0, A
INC R0 ;(R0)=21H
MOV A, @R0 ;高8位开始左移一位
RLC A ;高8位的移动带上了低8位左移时的CY位。
MOV @R0, A
MOV R2, #3
MOV A, R7
MOV R1, A
CUNFANG:MOV A, @R1 ;不解就在这里???????????????
ADDC A, @R1
DA A
MOV @R1, A
INC R1
DJNZ R2, CUNFANG
DJNZ R3, YIWEI
RET
END
代码来源:百度文库 还是C比较吃香,ASM无人问津喽。 sidu320 发表于 2015-1-16 21:51
还是C比较吃香,ASM无人问津喽。
若是这汇编代码短一些或许会用人帮忙解决问题了。
嗯,应该是这样的! 我就是个逗比,不INC R13次,16位的二进制数(0~65535),怎么放的下最大的那个数!
也会因为弄懂一丢点问题而沾沾自喜!DA{:lol:}{:lol:}{:lol:}{:lol:}
嗯,我看出来了你的沾沾自喜,逗比。 本帖最后由 liufabing 于 2015-1-16 22:21 编辑
IN: 0xff ff (2 byte)
OUT: 0x06 55 35 (3 byte)
你计算的时候用R1做指针,需要对输出的高中低3个字节计算.
这程序不是你写的?
---------------------------------------------编辑分割线------------------------------------------------------
DJNZ R2, CUNFANG
太久没用,不清楚DJNZ是否会影响C标志位. liufabing 发表于 2015-1-16 22:15
IN: 0xff ff (2 byte)
OUT: 0x06 55 35 (3 byte)
你计算的时候用R1做指针,需要对输出的高中低3个字节计 ...
很明显不是我写的,谢谢你的解释。DJNZ不影响标志位的。CJNE才会影响。
页:
[1]