我正在研究编码器,它将decimal
转换为二进制或二进制编码的十进制代码。什么是二进制编码十进制?它与二进制文件不同吗?
答案 0 :(得分:3)
现在已经很晚了,但我看到了这一点,所以我想我可能会回答。所以二进制编码的十进制是一种表示十进制形式的较大二进制数的方法,除了例如每个数字以二进制表示。 1111(二进制)= 15(十进制) 1111(二进制)= 0001 0101(BCD) 所以1111的bcd形式是两个4位数,其中十进制的前4位数是1,十进制的第二位是5,因此给我们15.计算它的方法是通过一个叫做double dabble的算法。
答案 1 :(得分:1)
(B)inary(C)oded(D)ecimal数据使用主要在Assembler程序中找到。在大型机上,它主要用于保存半个字节,通常允许将8位数日期存储在(四字节)全字中作为YYYYMMDD,从而避免完整的二进制转换,同时保持日期更“眼睛友好”格式(即在文件转储中更容易看到) IBM Mainframe Assembler提供了一个特殊指令 - MVO:(M)o(V)e with(O)ffset - 可以非常方便地从Packed Decimal(即COBOL中的COMP-3)转换为BCD格式(反之亦然),而无需使用算法。
示例:假设YYYYMMDD(8字节)格式的31-DEC-2017日期将转换为8位BCD格式字段(4字节)。
(1)使用PACK指令将8-char DATE转换为5字节PACKED
(2)使用MVO指令将8位有效二进制十进制数字移动到BCD字段
[注意长度覆盖“... BCD(5)...”:因此,在 BCD字段后,将PACKED中的符号X'F'移入字节中
BCD现在包含X'20171231'
SAMPLE CSECT
[...]
(1) PACK PACKED,DATE C'20171231' BECOMES X'020171231F' IN PACKED
(2) MVO BCD(5),PACKED X'020171231F' BECOMES X'20171231' IN BCD
[...]
BCD DS XL4
PACKED DS PL5
DATE DC CL8'21071231'
答案 2 :(得分:0)
同样,将8位BCD日期转换为8-char DATE是一个简单的3条指令序列:
(1)将符号插入5字节压缩十进制字段的最右边字节
[想到这一点,恢复标志在第2步" MVO BCD(5),PACKED"在第一个例子中,上面]
(2)使用MVO指令将8位二进制十进制数字提取到5字节压缩十进制字段中
(3)使用UNPK将5字节压缩十进制字段转换为8字节日期
DATE现在包含C' 20171231'
SAMPLE CSECT
[...]
(1) MVI PACKED+(L'PACKED-1),X'0F' INSERT SIGN (PACKED BECOMES X'........0F'
(2) MVO PACKED,BCD X'20171231' BECOMES X'020171231F' IN PACKED
(3) UNPK DATE,PACKED X'020171231F' BECOMES C'20171231' IN DATE
[...]
BCD DC XL4'20171231'
PACKED DS PL5
DATE DS CL8