主题:求助:16位二进制数怎么转换为BCD码?
fzb215
[专家分:0] 发布于 2006-09-29 15:32:00
[color=000080][i][b]16位二进制数怎么转换为BCD码?[/b][/i][/color]
回复列表 (共6个回复)
沙发
wanshitong [专家分:350] 发布于 2006-09-29 18:59:00
16个二进制数从右向左每四个一组,用8421码求解,化为相应的BCD码。
如:
1010100010010101这样一个十六位的二进制数,将它变为BCD码方法:
1、从右到左每四个一组
1010一组:
1000一组:
1001一组:
0101一组:
2、将4组分别计算8421码的值:1010=10,1000=8,1001=9,0101=5
3、将这计算结果用BCD码表示:因为10=A,所以整个十六位二进制数的BCD码形式就是A895
板凳
xabcxyz [专家分:940] 发布于 2006-09-29 21:18:00
楼上看法不敢苟同
16位二进制数数值范围(无符号)为0~65535,转换BCD编码的前提是转换为10进制数据(BCD码即权为8421表示的10数)
若使用8086/8088汇编语言则:连续对数据除10逆向取余数即为结果
;AX 16位二进制数数
;BX 非压缩BCD串存储地址(结果沿用80x86系列低前高后)
mov cx, 5
lp:
push cx
cwd
mov cx, 10
div cx
mov [bx], al
mov ax, dx
inc bx
pop cx
loop lp
3 楼
fanjw510 [专家分:110] 发布于 2006-10-08 15:54:00
你的例子里面的16位二进制数1010100010010101(假设无符号),化为十进制数为43157,而BCD码中用4位二进制表示1位十进制数,所以43157(十进制)=0100 0011 0001 0101 0111(BCD码)
1010100010010101=0100 0011 0001 0101 0111(BCD码)
4 楼
wawn1212 [专家分:0] 发布于 2006-12-01 10:36:00
同意3楼的看法,只是可否提供转换的汇编语言的代码!
5 楼
fishingok [专家分:20] 发布于 2006-12-04 12:43:00
0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6
0111 7 1000 8 1001 9 1010 10 1011 11 1100 12 1110 14
1111 15
6 楼
klainogn [专家分:270] 发布于 2006-12-05 19:19:00
data segment
value dw 1010100010010101b
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov ax,value
mov bx,10
mov cx,1
again: mov dx,0
inc cx
div bx
push dx
cmp ax,10
jl next0
jmp again
next0: push ax
next: pop dx
and dx,00ffh
or dx,0030h
mov ah,02h
int 21h
loop next
mov ah,4ch
int 21h
code ends
end start
我来回复