码制转换十二进制数ASCII码之间的互相转换BCD.ppt
《码制转换十二进制数ASCII码之间的互相转换BCD.ppt》由会员分享,可在线阅读,更多相关《码制转换十二进制数ASCII码之间的互相转换BCD.ppt(31页珍藏版)》请在三一办公上搜索。
1、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 常见程序设计举例,2,程序1:将65535的非压缩BCD数转换成2进制数。程序如下。;数据段定义 mydata SEGMENT decnum DB 5,3,0,1,9;BCD数 53019 binnum DW?mydata ENDS,3,prog SEGMENT ASSUME CS:prog
2、,DS:mydatabegin:MOV AX,mydata MOV DS,AX MOV SI,OFFSET decnum MOV CX,5;5位BCD数 MOV BX,10 XOR AX,AX;中间结果初始值为0Next:MUL BX;中间结果*10+本位数字 ADD AL,SI ADC AH,0 INC SI;指向下位BCD数 LOOP next MOV binnum,AX;保存结果 MOV AH,4CH INT 21Hprog ENDS END begin,4,程序2:把255的非压缩BCD数转换成2进制数 decnum DB 1,5,9;BCD数159 binnum DB?MOV AX,
3、decnum XCHG AH,AL;百位在AH,十位在AL AAD;百位数*10+十位数 MOV AH,AL;中间结果送AH MOV AL,decnum+2 AAD;中间结果*10+个位数 MOV binnum,AL,5,例:从键盘输入两个整数,并求其和。因键入为整数,故要进行如下转换:ASCIIBCD二进制数 ASCIIBCD码很简单,高4位清零即可得到非压缩的BCD码。BCD二进制数在本例中采用用以下方法:(0+千位数)*10+百位数)*10)+十位数)*10+个位数,ASCII码二进制数(用于输入),第一次中间结果,第二次中间结果,第三次中间结果,最终结果,6,开始,两个数分别转换成二进
4、制数,键入两个数,相加,结束,返回DOS,如有溢出则提示,开始,取第一个ASCII码,是负号吗?,数字符个数1,指针1,指针定位,字符个数1,=0?,取数字,与中间结果相加,再乘以10,指向下一个数字字符,加个位数,是负数则求补,存结果,结束,N,Y,Y,N,转换子程序,7,程序如下:DATASEGMENTSTR1DB 10,?,10 DUP(?);第1个数的输入缓冲区STR2DB 10,?,10 DUP(?);第2个数的输入缓冲区NUMDW?,?;存转换后的二进制数SUMDW 0;存和OVERDB Overflow!,13,10,$DATAENDS;CODESEGMENTASSUME CS:
5、CODE,DS:DATAMAINPROCFAR,8,START:MOVAX,DATAMOVDS,AXMOVAH,0AHLEADX,STR1INT21H;输入第一个数字串(设为26)MOVAH,0AHLEADX,STR2INT21H;输入第二个数字串(设为33)LEABX,STR1;串1的首地址送BXLEADI,NUM;存二进制首地址送DI CALLCHANGE;将串1 ASCII码二进制 LEABX,STR2;串2的首地址送BX,9,LEADI,NUM+2;指向CALLCHANGE;将串2 ASCII码二进制MOVAX,NUM;(AX)=NUM=001AH ADDAX,NUM+2;两数相加,(
6、AX)=003BHMOVSUM,AX;存和JNONEXT;无溢出,转NEXTLEADX,OVERMOVAH,9INT21H;显示Overflow!NEXT:MOVAH,4CHINT21H;返回DOS MAINENDP,10,CHANGEPROCMOVCL,BX+1;实际字符数送CLMOVAL,BX+2;第一个字符送ALMOVCH,AL;暂存在CHCMPAL,-;第一个字符是负号吗?JNZNEXT1;不是,转NEXT1DECCL;字符数减1INCBXNEXT1:ADDBX,2;指向第一个数字字符MOVAX,0;清零AX,存二进制数LP1:DECCLJZNEXT2;若(CL)=0,转NEXT2MO
7、VDL,BX;取字符ANDDL,0FH;转换成BCD码 ADD AL,DL;加到中间结果上 ADC AH,0,11,MOV DX,10 MUL DX;*10 INC BX;指向下一个字符 JMP SHORT LP1NEXT2:MOV DL,BX;取个位数 AND DL,0FH;个位ASCII未组合BCD ADD AX,DX;加个位数,(AX)=001AH CMP CH,-;是-?JNZ NEXT3;该数非负,转NEXT3 NEG AX;若为负,求补NEXT3:MOV DI,AX;存二进制结果 RETCHANGE ENDP;CODE ENDS END START,12,02,0A,32,36,0
8、D,02,0A,33,33,0D,00,1A,21,00,3B,00,STR1,STR2,NUM,SUM,10个,10个,O,OVER,?,?,04,0A,31,32,34,STR1,若键入 1234,33,0D,1,2,3,4,设键入第1个数为26,第2个数为33,则在内存各变量分配如下:,13,本例题重点掌握:如何从键盘输入一个字符串ASCII未组合BCD二进制有符号数的运算,对负数和溢出如何处理思考题:若键入第一个数26,第二个数为-4,填写各变量结果。,14,方法1 计算二进制数中所包含的1000的个数、100的个数、10的个数和1的个数。方法2 除10取余。下面举例介绍第一种方法。流
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 转换 二进制 ASCII 之间 互相 BCD
链接地址:https://www.31ppt.com/p-5410553.html