《代码转换》PPT课件.ppt

上传人:小飞机 文档编号:5460164 上传时间:2023-07-09 格式:PPT 页数:28 大小:299.99KB
返回 下载 相关 举报
《代码转换》PPT课件.ppt_第1页
第1页 / 共28页
《代码转换》PPT课件.ppt_第2页
第2页 / 共28页
《代码转换》PPT课件.ppt_第3页
第3页 / 共28页
《代码转换》PPT课件.ppt_第4页
第4页 / 共28页
《代码转换》PPT课件.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《《代码转换》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《代码转换》PPT课件.ppt(28页珍藏版)》请在三一办公上搜索。

1、1,第八章 代码转换,代码转换是在计算机程序设计中经常碰到的问题。如二进制数与十进制数的转换,ASCII码表示的十进制数与十六进制数之间的转换等等。,8.1 概述,2、直接转换法:依据转换规律,采用一定的算术运算或逻辑运算进行转换。,1、用查表的办法:这种方法主要用于代码之间的转换关系比较复杂的情况。但码元的数量必须是有限的。,代码转换可以用硬件快速实现,但更常用的方法还是用软件的方法来实现。用软件处理代码转换的方法通常有以下两种方法:,2,8.2 十六进制数的ASCII码与二进制数之间的相互转换,在编制源程序时,常用十六进制数。而从键盘输入时,在计算机中得到的是每个数符的ASCII码。因此需

2、要将这些ASCII码表示的数转换为二进制数。,十六进制的每个数符所对应的ASCII码如下表所示。,3,3、对于数符af,各个ASCII码值与对应的二进制数值之差都为57H。,1、对于数字符09,其ASCII码的低4位就等于对应的二进制值。转换时,只需要将ASCII码的高4位去掉,就是其对应的二进制数。而在二进制数前加上0011B,就是ASCII码。,2、对于数符AF,各个ASCII码值与对应的二进制数值之差都为37H。,因此,对于数符AF和af,转换时,可以将各个ASCII码值减7H后再去掉高4位。,4,例1 将4位十六进制数的ASCII码分别转换为对应的4位二进制数,然后将它们组合成一个16

3、位长的二进制数。,对于数字09的ASCII码,将其高4位二进制数去掉,就是对应的二进制数,对应字母AF或 af,将其ASCII码减去7,则其低4位与对应的4位二进制数相同。再去掉高4位即可。,5,F?,Y,CF=1,a?,f?,A?,Y,Y,Y,CF=0,数符ASCII码减7,返回主程序,返回主程序,字母数符子程序流程图,N,N,N,6,开始,输出提示信息,输入4位十六进制数,初始化循环次数、存结果的AX,取一个数符,数符0?,N,数符9?,N,清高4位,AX左移4位后存结果,循环次数=0?,Y,修改循环次数,结 束,调用字母数符子程序,数符有效?,Y,Y,输出出错信息,Y,N,主程序流程图,

4、N,7,DATA SEGMENTPROMPT DB INPUT HEXADECIMAL(4DIGIT):$HEX DB 5,0,5DUP(0)BIN DW?ERR DB 0AH,0DH,ERROR!NO-HEXADECIMAL!$DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDS,8,COSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1HEXBIN:MOV AX,DATA MOV DS,AX LEA DX,PROMPT;显示提示信息 MOV AH,09H INT 21H LEA DX,

5、HEX MOV AH,0AH;输入4位十六进制数 INT 21H LEA SI,HEX+2;取输入字符首地址 MOV CH,HEX+1;取字符数 MOV AX,0CONV:MOV BL,SI;代码转换 CMP BL,0 JB ERROR;0,出错 CMP BL,9 JBE BIN1;是0-9,转移,9,CALL HEX1;是字母符,调用子程序 JC ERROR;是错误的字符BIN1:AND BL,0FH MOV CL,4 SAL AX,CL;空出低4位装新转换的值 OR AL,BL INC SI DEC CH;转换字符计数 JNE CONV MOV BIN,AX;存结果 JMP END0ERR

6、OR:MOV BIN,0 LEA DX,ERR MOV AH,09H INT 21HCOSEG ENDS END HEXBIN,10,;判断大小写子程序HEX1 PROC CMP BL,F JA SMALL CMP BL,A;JB ERROR1;f,出错OUT1:SUB BL,07H;CLC;无错误CF=0 RETERROR1:STC;设置出错标志CF=1 RETHEX1 ENDPEND0:MOV AH,4CH INT 21H,11,8.3 二进制数与十进制数之间的转换,例1 将16位无符号二进制数转换为用ASCII码表示的十进制数,算法分析:1.16位无符号二进制数表示的十进制数范围为065

7、535,需要分别求出万位、千位、百位、十位和个位的值。2.从16位二进制数中能够减10000的次数就是万位的值,剩下的数再用1000去减,这样依次进行下去,直至个位。,12,DATA SEGMENTCONST DW 10000,1000,100,10DEC5 DB 5 DUP(0)DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDS,13,14,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1BINDEC:MOV AX,DATA MOV DS,AX MOV CX,4;转换后十进制位数-1

8、 LEA SI,CONST;常数首址 LEA DI,DEC5;取存十进制数ASCII码的首址 MOV AX,BIN1;取待转换数CONV3:MOV BL,0;位计数器初始化LOP1:SUB AX,SI;试减 JC NEXT;不够减,转NEXT INC BL;够减,计数 JMP LOP1,15,NEXT:ADD AX,SI;不够减,恢复余数 OR BL,30H;形成ASCII码 MOV DI,BL;存结果 INC SI;取下一个常数地址 INC SI INC DI;修改存结果指针 LOOP CONV3;继续 OR AL,30H;形成个位的ASCII码 MOV DI,AL;存个位数 MOV AH,

9、4CH INT 21HCODE ENDS END BINDEC,16,例2 将16位二进制数转换为非组合型BCD码表示的十进制数。,本例中将16位二进制数转换为5位十进制数的方法是:用10去除二进制数,所得余数为十进制数的个位。其商再除以10,所得余数为十位,如此反复,直到商为0。,程序中用循环实现将二进制数转换为十进制数。十进制数的高位存放在高地址单元,低位存放在低地址单元。,17,DATA SEGMENTBIN16 DW 365AH;待转换的二进制数DEC5 DB 5 DUP(0);存转换后的十进制数BCD码DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H

10、 DUP(0)STACK1 ENDS,18,COSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1MAIN:MOV AX,DATA MOV DS,AX LEA DI,DEC5;取存十进制数个位的单元地址 MOV AX,BIN16 MOV BX,10LOP:XOR DX,DX DIV BX;二进制数除10,余数在DX中 MOV DI,DL;存1位十进制数 INC DI CMP AX,0;商是否为0?JNE LOP;否,则继续转换 MOV AH,4CH INT 21HCOSEG ENDS END MAIN,19,8.4 十六进制数与BCD码的转换,从键盘上输

11、入一个十六进制数字的ASCII码串,将它转换为十进制数的BCD码表示形式。,其转换过程通常分为两个步骤:先把十六进制数ASCII码转换为二进制数,再将二进制数转换为BCD码。这两个步骤我们在前面的例题中已经学习了。下面学习另一种将二进制数转换为BCD码的方法。,设4位二进制数为a3a2a1a0,每个数符ai的取值为0或1。该二进制数对应的十进制数可用以下公式计算:,(0+a3)2+a2)2+a1)2+a0,公式中需要作4次加法和3次乘法。如果是8位二进制数,则需要作8次加法和7次乘法,其余依此类推。,20,例1 从键盘输入4位十六进制数(它对应的二进制数是补码表示的带符号数),试编制一程序,把

12、它们转换为带符号非组合型BCD码,并在屏幕上显示出来。,DATA SEGMENTPROMPT DB INPUT HEXADECIMAL(4DIGITS):$HEXBUF DB 5,0,5 DUP(0)DISP DB 0AH,0DHBCDBUF DB 6 DUP(0),$DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDS,21,1、从键盘输入14位十六进制数,存放在以HEXBUF+2为首址的4个字节单元中。其中HEXBUF+1单元中为输入的数据个数。,算法分析:,2、将ASCII码表示的4位十六进制数转换为16位二进制数,并暂时

13、存放在BX中;,3、确定十进制数的符号,并把符号(+或-)存放在BCDBUF单元中;,6、显示结果。,5、把转换结果的5个非组合型BCD码形成相应的ASCII码,4、对BX中的二进制数采用前述算法转换为十进制数(非组合型BCD码),转换结果存放在以BCDBUF+1为首址的5个字节单元中;,22,COSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1HEXBCD:MOV AX,DATA MOV DS,AX;输入14位十六进制数 LEA DX,PROMPT;显示提示信息 MOV AH,09H INT 21H LEA DX,HEXBUF;输入数据 MOV AH

14、,0AH INT 21H;ASCII码转换为16位二进制数并存入BX中 LEA SI,HEXBUF+2;取十六进制数ASCII码首址 MOV BX,0;暂存二进制数的寄存器清零 MOV CH,HEXBUF+1;取输入数据个数HEX1:MOV AL,SI;取一个十六进制数字符 CMP AL,9 JBE NUMB;小于等于9是数字符,23,SUB AL,07H;是字母符 NUMB:AND AL,0FH MOV CL,4 SAL BX,CL OR BL,AL INC SI DEC CH JNE HEX1;确定十进制数的符号 MOV BCDBUF,+TEST BX,8000H JNS PLUS;是正数

15、 MOV BCDBUF,-;是负数 NEG BX;求补后变为原码,24,;将二进制数转换为非组合型BCD码,从二进制;数高位起,进行15次加和乘PLUS:MOV CH,0FH;“加乘”运算的次数LOP0:SHL BX,1;最高位二进制数送CF CALL ADDIT;先加1位二进制数 CALL MULTI;再乘2 DEC CH JNE LOP0 SHL BX,1;加最低位二进制数 CALL ADDIT;把非组合型BCD码转换为ASCII码形式 LEA DI,BCDBUF+1 MOV CX,5LOP1:OR BYTE PTR DI,30H INC DI LOOP LOP1,25,LEA DX,DI

16、SP MOV AH,09H INT 21H MOV AH,4CH;程序结束 INT 21H;多字节BCD码加1位二进制数子程序ADDIT PROC LEA DI,BCDBUF+5;从低位开始 MOV CL,5;取字节数ADD1:MOV AL,DI;取BCD码 ADC AL,0;加二进制数位(CF)AAA;十进制数运算校正 MOV DI,AL;存BCD码 DEC DI DEC CL JNE ADD1 RETADDIT ENDP,显示结果,26,;多字节BCD码乘2子程序MULTI PROC LEA DI,BCDBUF+5;从低位开始 MOV CL,5 CLCMUL1:MOV AL,DI;取BCD码 ADC AL,AL;乘2 AAA;十进制数运算校正 MOV DI,AL;存BCD码 DEC DI DEC CL JNE MUL1 RETMULTI ENDPCOSEG ENDS END HEXBCD,27,作业:P160 3,28,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号