十六进制到BCD转换

问题描述 投票:-1回答:2

要将(213AFE)H转换为BCD,首先必须将其转换为二进制,从而得到(2177790)D。现在每个数字都转换为它的BCD代码,它给出了(0010 0001 0111 0111 0111 1001 0000)BCD

另一种方法是将十六进制值转换为二进制,它给出(0010 0001 0011 1010 1111 1110)B,然后通过向每个大于9的数字加6来进行BCD调整,如下所示:

0010 0001 0011 1010 1111 1110
+              0110 0110 0110
-----------------------------
0010 0001 0100 0001 0110 0100 -> 35092368D

上述过程的最终结果是不同的。第二种方法错了吗?为什么?

hex type-conversion decimal bcd
2个回答
0
投票

Ascii_Hex:                          ;procedure to convert Ascii to Hex
	mov rax,0
	mov rcx,4
	mov rsi,hex
	mov rbx,0
   loop1:
   	rol bx,4
	   mov al,[rsi]
   	cmp al,'9'
	   jbe sub30h
	   sub al,7h
      sub30h:
	      sub al,30h
	      add bx,ax
	   inc rsi
	loop loop1
ret

HtB:                                ;procedure to convert HEX to BCD
   io 1,1,msg,msglen
	io 0,0,hex,5
	call Ascii_Hex                   ;call to procedure to convert ascii to hex
	mov rcx,5
	mov ax,bx                     
	mov bx,0Ah
   loop2:	
	   mov rdx,0
   	Div bx                        
	   push dx
	loop loop2
	
	mov rsi,hex
	mov rcx,5
   loop3:
	   pop dx
	   add dl,30h
	   mov[rsi],dl
	   inc rsi
	loop loop3	
	io	1,1,hex,5
	io 1,1,newline,1
ret

-1
投票

第二种方法不是错误的,但它实际上是主要转换方法的一部分,即大于9的数字应该总是通过BCD调整方法调整(加6)你得到的答案是有效的BCD!

© www.soinside.com 2019 - 2024. All rights reserved.