我要的是汇编的方法,C语言还没学到.
2位16进制转10进制我已会了,用除于10求商跟佘数的方法,但4位16进制数呢?
DIV 这个指令只可以对2位16进制数进行除法运算啊,求高手解答,
最好能给出个例子,比如把TH1 TL1的数值,转成十进制, 分别存入R4 R3 R2 R1 R0 ,注上适当的说明,因为我刚学,对程序的解读还很不熟练
第1个回答 2013-08-20
这个很复杂的 你可以考虑 就是只有把TL1的数据先转10进制 然后 TH1其实就是累加了 TH1次的TL1 也就是说 商和余数都要累加TH1次 然后在除 可以用累加一次就处理一次的方法处理 程序还是自己慢慢写吧 方法可以用我这样的 汇编好累 C语言一句话的问题 汇编好写好久 汇编对于控制操作位啊什么的很好用 程序空间可以很省 但是对于运算 它就是非常繁复的
第2个回答 2019-10-24
串口接收到的数据都是十六进制。将a0c1转换成十进制程序如下:
ibtd22 : mov a,r0
push a
mov r3,#0a0h
mov r4,#0c0h
mov r7,#03h
clr a
ibd221 : mov @r0,a
inc r0
djnz r7,ibd221
pop a
mov r0,a
mov r7,#10h
ibd222 : push a
clr c
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov b,#03h
ibd223 : mov a,@r0
addc a,@r0
da a
mov @r0,a
inc r0
djnz b,ibd223
pop a
mov r0,a
djnz r7,ibd222
ret
ibtd22 : mov a,r0
push a
mov r3,#0a0h
mov r4,#0c0h
mov r7,#03h
clr a
ibd221 : mov @r0,a
inc r0
djnz r7,ibd221
pop a
mov r0,a
mov r7,#10h
ibd222 : push a
clr c
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov b,#03h
ibd223 : mov a,@r0
addc a,@r0
da a
mov @r0,a
inc r0
djnz b,ibd223
pop a
mov r0,a
djnz r7,ibd222
ret
第3个回答 2013-08-20
程序经过仿真调试通过,如下所示:
MOV R0, TL0
MOV R1, TH0
CLR A
MOV R2, A,
;先清零
MOV R3, A,
MOV R4, A,
MOV R5, #16
;共转换十六位数
LOOP:
CLR C
MOV A,
R0
;从待转换数的高端移出一位到Cy
RLC A
MOV R0, A
MOV A,
R1
RLC A
MOV R1, A
MOV A,
R4
;送到BCD码的低端
ADDC A,
R4
;带进位加。自身相加,相当于左移一位
DA
A
;十进制调整,变成BCD码
MOV R4, A
MOV A,
R3
ADDC A,
R3
DA
A
MOV R3, A
MOV A,
R2
ADDC A,
R2
MOV R2, A
DJNZ R5, LOOP
;共转换十六位数
;-------至此,已经把TH1 TL1中的数字,转换成BCD码,送到了R2 R3 R4。
;-------下面,分别存入R4 R3 R2 R1 R0。
MOV A,
R4
MOV B,
#16
DIV AB
MOV R1, A
MOV R0, B
MOV A,
R2
MOV R4, A
MOV A,
R3
MOV B,
#16
DIV AB
MOV R3, A
MOV R2, B
RET
;完本回答被网友采纳
MOV R0, TL0
MOV R1, TH0
CLR A
MOV R2, A,
;先清零
MOV R3, A,
MOV R4, A,
MOV R5, #16
;共转换十六位数
LOOP:
CLR C
MOV A,
R0
;从待转换数的高端移出一位到Cy
RLC A
MOV R0, A
MOV A,
R1
RLC A
MOV R1, A
MOV A,
R4
;送到BCD码的低端
ADDC A,
R4
;带进位加。自身相加,相当于左移一位
DA
A
;十进制调整,变成BCD码
MOV R4, A
MOV A,
R3
ADDC A,
R3
DA
A
MOV R3, A
MOV A,
R2
ADDC A,
R2
MOV R2, A
DJNZ R5, LOOP
;共转换十六位数
;-------至此,已经把TH1 TL1中的数字,转换成BCD码,送到了R2 R3 R4。
;-------下面,分别存入R4 R3 R2 R1 R0。
MOV A,
R4
MOV B,
#16
DIV AB
MOV R1, A
MOV R0, B
MOV A,
R2
MOV R4, A
MOV A,
R3
MOV B,
#16
DIV AB
MOV R3, A
MOV R2, B
RET
;完本回答被网友采纳