admin 管理员组

文章数量: 1086019


2024年12月23日发(作者:idea中文插件)

此属本人原创请尊重知识产权:

多字节十六进制转换为十进制(多字节十

MOV 40H,#0FFH ;

MOV 41H,#0FFH

MOV 42H,#0FFH ;

MOV R0,#50H ;

MOV R2,#7 ;

八位减一就是7)

CFYS:

MOV R1,#40H ;

六进制除十运算)

三字节数据的低位存放地址

三字节数据的高位存放地址

转换后十进制数存放的首地址(个位)

取十进制的位数减一(如FFFFFFH转换为十进制是16777215,

给高字节地址

MOV B,#00H ;避免影响下一轮运算

SCCF:

MOV A,@R1

ANL A,#0F0H ;屏蔽低四位

ORL A,B ;合并给A(被除数)

SWAP A

MOV B,#10

DIV AB

SWAP A ;高位在A

XCH A,@R1 ;商高位在

ANL A,#0FH ;屏蔽高四位

XCH A,B

SWAP A

ORL A,B ;合并给A(被除数)

MOV B,#10

DIV AB

ORL A,@R1 ;合并给A(被除数)

MOV @R1,A

INC R1

CJNE R1,#43H,SCCF ;是否完成一次除十运算

MOV @R0,B

INC R0

DJNZ R2,CFYS ;是否完成全部运算

MOV @R0,A

(以上程序编写于2014/10/03上午)

BCD码和十六进制的转换

大家都知道汇编语言里把十六进制转换为BCD码用DA指令,

但是没有哪条指令能把BCD码转换为16进制,我曾经也很

为此困惑,但最终我解决了此问题,看程序!

假如R0里储存的是37分钟的BCD码,那么R0里的数是37H,

要把它转换成37的十六进制25H存入R1中。我们现实的算

法是37/16=25H就可以得出结果,但是机器没那么聪明,

因为37H是十六进制。汇编程序解决的方法如下:

MOV A,R0 ;

ANL A,#0FH ;屏蔽高4位(即屏蔽分钟的十位)

MOV R2,A ;把个位的值给R2

MOV A,R0 ;

ANL A,#0F0H ;屏蔽低4位(即屏蔽分钟的个位)

SWAP A ;高低字节互换

MOV B,#10 ;给B赋值(也可以赋0AH)

MUL AB ;A乘B得出十位的十六进制值

ADD A,R2 ;十位的值加上个位的值

MOV R1,A ;把转换好的十六进制值给R1

(以上程序编写于2014/09/13中午)


本文标签: 运算 存放 转换