《算数运算与代码转换.ppt》由会员分享,可在线阅读,更多相关《算数运算与代码转换.ppt(22页珍藏版)》请在金锄头文库上搜索。
1、建设优良学风建设优良学风 从我做起从我做起知识回顾知识回顾:u宏定义伪指令宏定义伪指令 MACRO ENDMu宏定义、宏调用、宏扩展宏定义、宏调用、宏扩展u(宏参数)(宏参数)u(宏与子程序的区别)(宏与子程序的区别)理论:理论:2 2学时学时实验:实验:2 2学时学时第十章第十章 算数运算与代码转换算数运算与代码转换 第十章第十章 算数运算与代码转换算数运算与代码转换10.3 BCD码运算码运算10.7 十进制数的十进制数的ASCII码串转码串转换为二进制数换为二进制数10.8 二进制数转换为十进制数二进制数转换为十进制数的的ASCII码串码串v10.3 BCD10.3 BCD码运算码运算第
2、十章第十章 算数运算与代码转换算数运算与代码转换 u本节主要讲解本节主要讲解BCD马运算调整指令。马运算调整指令。l8086/8088 CPU运算器时二进制运算器,不能进行运算器时二进制运算器,不能进行BCD马运马运算,但它提供了算,但它提供了BCD马运算调整指令,即当机内采用马运算调整指令,即当机内采用BCD码表码表示数据时,利用二进制运算器进行运算,之后再进行示数据时,利用二进制运算器进行运算,之后再进行BCD码调码调整,调整后的结果仍为整,调整后的结果仍为BCD码数据。码数据。 如:如:19+15=34 0001 1001 + 0001 0101 0010 1110 + 0000 011
3、0 0011 0100在在BCD码表示中,不允许码表示中,不允许存在,必须进行调整存在,必须进行调整加加6调整调整正确结果正确结果10.3 BCD码运算码运算u非组合非组合BCDBCD码运算调整指令码运算调整指令1、ASCII码加法调整指令码加法调整指令AAA格式:格式:AAA操作:如果操作:如果AL中的低中的低4位位9或或AF=1, 则则 ALAL+6, AHAH+1,AF1,CF1,AL 高高4位位0 否则,不进行操作。否则,不进行操作。2、ASCII码减法调整指令码减法调整指令AAS格式:格式:AAS操作:如果操作:如果AL中的低中的低4位位9或或AF=1, 则则 ALAL-6, AHA
4、H-1,AF1,CF1,AL 高高4位位0 否则,不进行操作。否则,不进行操作。第十章第十章 算数运算与代码转换算数运算与代码转换 10.3 BCD码运算码运算3 3、ASCIIASCII码乘法调整指令码乘法调整指令AAMAAM格式:格式:AAMAAM操作:将操作:将ALAL中的内容除以中的内容除以1010,商送入,商送入AHAH中,余数送入中,余数送入ALAL中。中。4 4、ASCIIASCII码除法调整指令码除法调整指令AADAAD格式:格式:AADAAD操作:操作:AL AH*10+AL, AH 0AL AH*10+AL, AH 0。( (进行除法之前调整进行除法之前调整) )1 1、组
5、合、组合BCDBCD码加法调整指令码加法调整指令DAADAA格式:格式:DAADAA操作:操作:如果如果ALAL中的低中的低4 4位位99或或AF=1, AF=1, 则则ALAL+6, AF1,ALAL+6, AF1, 如果如果ALAL中的高中的高4 4位位99或或CF=1,CF=1,则则ALAL+60HALAL+60H,CF1CF1 否则,不进行操作。否则,不进行操作。第十章第十章 算数运算与代码转换算数运算与代码转换 10.3 BCD码运算码运算u组合组合BCDBCD码运算调整指令码运算调整指令2 2、组合、组合BCDBCD码加法调整指令码加法调整指令DASDAS格式:格式:DASDAS操
6、作:操作:如果如果ALAL中的低中的低4 4位位99或或AF=1, AF=1, 则则ALAL-6, AF1,ALAL-6, AF1, 如果如果ALAL中的高中的高4 4位位99或或CF=1,CF=1,则则ALAL-60HALAL-60H,CF1CF1 否则,不进行操作。否则,不进行操作。第十章第十章 算数运算与代码转换算数运算与代码转换10.3 BCD码运算码运算10.7 十进制数的十进制数的ASCII码串转码串转换为二进制数换为二进制数10.8 二进制数转换为十进制数二进制数转换为十进制数的的ASCII码串码串v10.710.7十进制数的十进制数的ASCIIASCII码串转换为二进制数码串转
7、换为二进制数第十章第十章 算数运算与代码转换算数运算与代码转换 10.7十进制数的十进制数的ASCII码串转换为二进制数码串转换为二进制数u数据在计算机内大多采用二进制表示,而从键盘上输入数据时,数据在计算机内大多采用二进制表示,而从键盘上输入数据时,在计算机内得到的是数字的在计算机内得到的是数字的ASCII码串,这就需要将十进制数的码串,这就需要将十进制数的ASCII码串转换为二进制数。同样的道理,当运算结束后,要将码串转换为二进制数。同样的道理,当运算结束后,要将结果显示出来或打印出来,显示器和打印机只能接受结果显示出来或打印出来,显示器和打印机只能接受ASCII马,马,这就必须将二进制表
8、示的结果,再转换为十进制数的这就必须将二进制表示的结果,再转换为十进制数的ASCII码,码,输出给显示器或打印机。输出给显示器或打印机。u【例例10.8】设内存设内存DASC开始的单元存放若干个十进制数的开始的单元存放若干个十进制数的ASCII码串,串间用逗号分隔,最后以回车符结束。编制程序,码串,串间用逗号分隔,最后以回车符结束。编制程序,将个数据转换为二进制数存入将个数据转换为二进制数存入BIN开始的单元。开始的单元。 算法:算法:N=N*10+Ni35H 38H 36H 2CH 38H 2CH 37H 34H 0DH4AH 02H 08H 00H 4AH 00H DASCBINDATBI
9、NDATBINPROCPROCPUSHPUSHBXBXXORXORCX,CXCX,CX;初始化;初始化N NGETA:GETA:MOVMOVAL,SIAL,SI ;取一字符;取一字符CMPCMPAL,0AL,0;判是否为数字的;判是否为数字的ASCIIASCII码。码。JBJBRETURNRETURNCMPCMPAL,9AL,9JAJARETURNRETURNSUBSUBAL,0AL,0XORXORAH,AHAH,AHMOVMOVBX,CXBX,CX;将;将N*10N*10SHLSHLCX,1CX,1SHLSHLCX,1CX,1ADDADDCX,BXCX,BXSHLSHLCX,1CX,1ADD
10、ADDCX,AXCX,AX;计算;计算N NINCINCSISI;修改指针;修改指针JMPJMPGETAGETA;转取下一字符;转取下一字符RETURN:RETURN: POPPOPBXBXRETRETDATBINDATBINENDPENDP第十章第十章 算数运算与代码转换算数运算与代码转换 10.7十进制数的十进制数的ASCII码串转换为二进制数码串转换为二进制数子程序名:子程序名:DATBIN子程序功能:十进制数的子程序功能:十进制数的ASCII码转换码转换 为二进制数。为二进制数。入口条件:入口条件:ASCII码串首址在码串首址在SI中中 ASCII串以非十进制数结束串以非十进制数结束出
11、口条件:出口条件:CX为转换结果,为转换结果,AL为终止为终止 符,符,SI指向终止符指向终止符受影响的寄存器:受影响的寄存器:AX,CX,SI,Fu主程序:主程序:DSEGDSEGSEGMENTSEGMENTDASCDASCDBDB586,18,375,1847,586,18,375,1847,DBDB2943,5,7485,0DH2943,5,7485,0DHBINBINDWDW10 DUO(0)10 DUO(0)DSEGDSEGENDSENDSSSEGSSEGSEGMENTSEGMENT STACKSTACKSTKSTKDBDB20 DUP(0)20 DUP(0)SSEGSSEGENDS
12、ENDSCSEGCSEGSEGMENTSEGMENTASSUMEASSUMECS:CSEG,DS:DSEGCS:CSEG,DS:DSEGASSUMEASSUMESS:SSEGSS:SSEGDATOB:DATOB:MOVMOVAX,DSEGAX,DSEGMOVMOVDS,AXDS,AXMOVMOVAX,SSEGAX,SSEGMOVMOVSS,AXSS,AXMOVMOVSP,SIZE STKSP,SIZE STKLEALEADASC,SIDASC,SI第十章第十章 算数运算与代码转换算数运算与代码转换 10.7十进制数的十进制数的ASCII码串转换为二进制数码串转换为二进制数LEALEADI,BI
13、NDI,BINAGAIN:AGAIN:CALLCALLDATBINDATBINMOVMOVDI,CXDI,CXINCINCSISIADDADDDI,2DI,2CMPCMPAL,0DHAL,0DHJNZJNZAGAINAGAINMOVMOVAX,4C00HAX,4C00HINTINT21H21HDATBINDATBINPROCPROC : :DATBINDATBINENDPENDPCSEGCSEGENDSENDSENDENDDASCDASC实验实验1616 编制程序将内存编制程序将内存STRING开始的若干个带符号十进开始的若干个带符号十进制数的制数的ASCII码串转换为码串转换为补码补码表示的
14、二进制数并存放在表示的二进制数并存放在BIN开始的单元。数据之间用逗号分隔,最后以回车结开始的单元。数据之间用逗号分隔,最后以回车结束。束。(可调用例可调用例10.8的子程序的子程序 DATBIN)如:如:STRING DB “100,3842,-27,+365,-2500”,0DH课间休息课间休息建设优良学风建设优良学风 从我做起从我做起知识回顾:知识回顾:BCD码运算指令码运算指令u非组合非组合BCD码运算指令:码运算指令:AAA、AAS、AAM、AADu 组合组合BCD码运算指令码运算指令: DAA、DAS代码转换代码转换u十进制数得十进制数得ASCII码串转换为二进制数码串转换为二进制
15、数第十章第十章 算数运算与代码转换算数运算与代码转换10.3 BCD码运算码运算10.7 十进制数的十进制数的ASCII码串转码串转换为二进制数换为二进制数10.8 二进制数转换为十进制数二进制数转换为十进制数的的ASCII码串码串第十章第十章 算数运算与代码转换算数运算与代码转换 10.8 二进制数转换为二进制数转换为十进制数的十进制数的ASCII码串码串v10.8 二进制数转换为十进制数的二进制数转换为十进制数的ASCCII码码u这个过程是上述转换的逆过程。这个过程是上述转换的逆过程。u【例例10.9】设设BIN开始的存储区,连续存放开始的存储区,连续存放10个无符号二进制字数个无符号二进
16、制字数据,编制程序将其转换为十进制数的据,编制程序将其转换为十进制数的ASCII码串,存入码串,存入DASC开始的开始的单元,数据间用逗号分割,最后以回车结束。单元,数据间用逗号分割,最后以回车结束。u算法:算法:将数据依次除以将数据依次除以10,第一次除以,第一次除以10,所得余数为数据的个位值,第二次,所得余数为数据的个位值,第二次除以除以10,所得余数为数据的十位值,所得余数为数据的十位值,,这个过程,一直进行到除这个过程,一直进行到除10后所得商为后所得商为0时止。时止。(这个算法与书中算法不同)这个算法与书中算法不同)u按上述算法,编写将一个二进制数转换为十进制数的按上述算法,编写将
17、一个二进制数转换为十进制数的ASCIIASCII码码串的子程序。串的子程序。BTODA PROCPUSHAXPUSHBXPUSHDXMOVBYTE PTR DI,MOVBX,10BTODA1: INC DIXORDX,DXDIVBXADDDL,30HMOVDI,DLANDAX,AXJNZBTODA1POPDXPOPBXPOPAXRETDTODA ENDP第十章第十章 算数运算与代码转换算数运算与代码转换 10.7十进制数的十进制数的ASCII码串转换为二进制数码串转换为二进制数子程序名:子程序名:BTODA子程序功能:将无符号字数据转换子程序功能:将无符号字数据转换 为十进制为十进制 数的数的
18、ASCII码。码。入口条件:数据在入口条件:数据在AX中,存放数据中,存放数据 地址在地址在 DI中中出口条件:最高位数的出口条件:最高位数的ASCII码存码存 放在放在DI指出单元,次位指出单元,次位 ASCII码在码在DI-1单元,单元, ., 最后以逗号结束。最后以逗号结束。受影响的寄存器:受影响的寄存器:DI,Fu主程序:主程序:DSEGDSEGSEGMENTSEGMENTBINBINDWDW123,367,9650,5,78,32768123,367,9650,5,78,32768DWDW45613,8470,327,6553545613,8470,327,65535ASCASCDB
19、DB10 DUP(6 DUP(0)10 DUP(6 DUP(0)BUFFBUFFDBDB10 DUP(0)10 DUP(0)DSEGDSEGENDSENDSSSEGSSEGSEGMENTSEGMENTSTKSTKDBDB20 DUP(0)20 DUP(0)SSEGSSEGENDSENDSCSEGCSEGSEGMENTSEGMENTASSUMEASSUMECS:CSEG,DS:DSEGCS:CSEG,DS:DSEGASSUMEASSUMESS;SSEG,ES:DESGSS;SSEG,ES:DESGBINDA:BINDA:MOVMOVAX,DSEGAX,DSEGMOVMOVDS,AXDS,AXMO
20、VMOVAX,SSEGAX,SSEGMOVMOVSS,AXSS,AXLEALEASI,BINSI,BINLEALEABX,ASCBX,ASCMOVMOVCX,10CX,10第十章第十章 算数运算与代码转换算数运算与代码转换 10.7十进制数的十进制数的ASCII码串转换为二进制数码串转换为二进制数BINDA0:BINDA0: LEALEADI,BUFFDI,BUFFMOVMOVAX,SIAX,SICALLCALLBTODABTODABINDA1:BINDA1: MOVMOVAL,DIAL,DIMOVMOVBX,ALBX,ALINCINCBXBXDECDECDIDICMPCMPAL,AL, ,J
21、NZJNZBINDA1BINDA1ADDADDSI,2SI,2LOOPLOOPBINDA0BINDA0MOVMOVAX,4C00HAX,4C00HINTINT21H21HBTODABTODAPROCPROC: :BTODABTODAENDPENDPCSEGCSEGENDSENDSENDENDBINDABINDA 编制程序将内存编制程序将内存BIN开始的若干个开始的若干个带符号补码带符号补码表示的二表示的二进制字数据转换为十进制数的进制字数据转换为十进制数的ASCII码串并存放在码串并存放在STRING开始的单元开始的单元, 数据之间用逗号分隔,最后以回车结束。数据之间用逗号分隔,最后以回车结束。 (可调用例可调用例10.9的子程序的子程序 BTODA)如:如:BIN DW -100,5289,15,12345,-8006,6789. 实验实验1717本章教学要求本章教学要求v了解了解BCD码运算规则;码运算规则;v了解了解BCD码运算调整指令;码运算调整指令;v掌握十进制数的掌握十进制数的ASCII码与二进制数的相互转换;码与二进制数的相互转换; 本章作业本章作业u10.14课间休息课间休息建设优良学风建设优良学风 从我做起从我做起