回 帖 发 新 帖 刷新版面

主题:求助:16位二进制数怎么转换为BCD码?

[color=000080][i][b]16位二进制数怎么转换为BCD码?[/b][/i][/color]

回复列表 (共6个回复)

沙发

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

板凳

楼上看法不敢苟同
    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 楼

你的例子里面的16位二进制数1010100010010101(假设无符号),化为十进制数为43157,而BCD码中用4位二进制表示1位十进制数,所以43157(十进制)=0100 0011 0001 0101 0111(BCD码)
1010100010010101=0100 0011 0001 0101 0111(BCD码)

4 楼

同意3楼的看法,只是可否提供转换的汇编语言的代码!

5 楼

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 楼


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

我来回复

您尚未登录,请登录后再回复。点此登录或注册