4.5常见程序设计举例 1.码制转换 十、二进制数、ASCⅠI码之间的互相转换 ①BcD数→2进制数 算法:Dn101+…+D0+10 (.(Dn110+Dn2)*10+.)10+Do =(..(010+Dn1)*10+Dn2)*10+.)*10+D 即:新的中间结果=中间结果*10+本位数字 (中间结果初值为0)
1 1.码制转换 十、二进制数、ASCII码之间的互相转换。 ①BCD数→2进制数 算法:Dn-1 *10n-1 +……+D0*100 = (…(Dn-1 *10+ Dn-2 )*10+…)*10+ D0 = (…((0*10+Dn-1 )*10+ Dn-2 )*10+…)*10+ D0 即: 新的中间结果 = 中间结果*10+本位数字 (中间结果初值为0) 4.5 常见程序设计举例
程序1:将≤65535的并压缩BCD数转换成2进 制数。程序如下 ;数据殿定义 mydata SEGMENT decnum DB 5, 3, 0, 1, 9 BCD #3 53019 binnum DW mydata ENDS
2 程序1:将≤65535的非压缩BCD数转换成2进 制数。程序如下。 ;数据段定义 mydata SEGMENT decnum DB 5, 3, 0, 1, 9 ;BCD数 53019 binnum DW ? mydata ENDS
prog SEGMENT ASSUME CS. prog, DS. mydata begin: MOv Ax, mydata MOV DS.AX MOV S OFFSET decnum MOV CX. 5 5位BCD数 MOV BX 10 XOR AXAX ;中间结果初始值为0 Next MUL BX ;中间同结果*10+本位数字 ADD AL, [SI ADC AH0 INC S 指向下位BCD数 LOoP next Mov binnum. X ;(存结果 MOV AH 4CH INT 21H prog ENDS ENd begin
3 prog SEGMENT ASSUME CS:prog,DS:mydata begin: MOV AX, mydata MOV DS, AX MOV SI, OFFSET decnum MOV CX, 5 ;5位BCD数 MOV BX, 10 XOR AX, AX ;中间结果初始值为0 Next: MUL BX ;中间结果*10+本位数字 ADD AL, [SI] ADC AH, 0 INC SI ;指向下位BCD数 LOOP next MOV binnum, AX ;保存结果 MOV AH, 4CH INT 21H prog ENDS END begin
程序2:把255的非压缩BCD数转换成2进制数 decnum Db 1, 5, 9, BCD*159 binnum Db MOV AX decnum XCHG AH AL ;百位在AH,十位在AL AAD ;百位数*10+十位数 MOV AH AL ;中间结果送AH MOV AL decnum+2 AAD ;中间结果*10+个位数 Mov binnum, AL
4 程序2:把≤255的非压缩BCD数转换成2进制数 decnum DB 1,5,9 ;BCD数159 binnum DB ? …… MOV AX,decnum XCHG AH, AL ;百位在AH, 十位在AL AAD ;百位数*10 + 十位数 MOV AH, AL ;中间结果送AH MOV AL, decnum+2 AAD ;中间结果*10 + 个位数 MOV binnum, AL ……
② ASCII码→二进制数(用于输入) 例:从键盘输入两个整数,并求其和。 因键入为整数,故要进行如下转换: ASCII→BCD→二进制数 ASCII→BCD码很简单,高4位清零即可得到非压 缩的BCD码。 BCD→二进制数在本例中采用用以下方法: (((0+千位数)*10+百位数)*10)+十位数)*10+个位数 第一次中间结果 第二次中间结果 第三次中间结果 最终结果
5 例:从键盘输入两个整数,并求其和。 因键入为整数,故要进行如下转换: ASCII→BCD→二进制数 ASCII→BCD码很简单,高4位清零即可得到非压 缩的BCD码。 BCD→二进制数在本例中采用用以下方法: ((((0+千位数)*10+百位数)*10)+十位数)*10+个位数 ②ASCII码→二进制数(用于输入) 第一次中间结果 第二次中间结果 第三次中间结果 最终结果