sidu320 发表于 2015-1-16 21:39:28

无符号二进制数转换为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

代码来源:百度文库

sidu320 发表于 2015-1-16 21:51:26

还是C比较吃香,ASM无人问津喽。

sidu320 发表于 2015-1-16 21:52:41

sidu320 发表于 2015-1-16 21:51
还是C比较吃香,ASM无人问津喽。

若是这汇编代码短一些或许会用人帮忙解决问题了。
嗯,应该是这样的!

sidu320 发表于 2015-1-16 22:01:03

我就是个逗比,不INC R13次,16位的二进制数(0~65535),怎么放的下最大的那个数!
也会因为弄懂一丢点问题而沾沾自喜!DA{:lol:}{:lol:}{:lol:}{:lol:}
嗯,我看出来了你的沾沾自喜,逗比。

liufabing 发表于 2015-1-16 22:15:42

本帖最后由 liufabing 于 2015-1-16 22:21 编辑

IN:   0xff ff (2 byte)
OUT: 0x06 55 35 (3 byte)
你计算的时候用R1做指针,需要对输出的高中低3个字节计算.

这程序不是你写的?

---------------------------------------------编辑分割线------------------------------------------------------
DJNZ      R2,                CUNFANG
太久没用,不清楚DJNZ是否会影响C标志位.

sidu320 发表于 2015-1-16 23:13:20

liufabing 发表于 2015-1-16 22:15
IN:   0xff ff (2 byte)
OUT: 0x06 55 35 (3 byte)
你计算的时候用R1做指针,需要对输出的高中低3个字节计 ...

很明显不是我写的,谢谢你的解释。DJNZ不影响标志位的。CJNE才会影响。
页: [1]
查看完整版本: 无符号二进制数转换为BCD,为什么在CUNFANG函数里要INC R1 3次?