资源描述:
《第4章8086(汇编)语言程序设计(2)(汇编)语言程序设计举例举例1》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第4章8086汇编语言程序设计4-5汇编语言程序设计举例3-3-4汇编语言程序设计方法一、程序设计步骤根据实际问题抽象出数学模型确定解决此数学模型的算法分配内存工作单元和寄存器画出程序框图(流程图)根据框图编制程序上机调试,进行修改基本方法:二、如何划程序框图用菱形框表示判断框框中标明比较、判断和条件=0?NY用圆边框表示起始和终止框框中标明起始或终止框中用简明语言标明要完成的功能用方框表示工作框用双边框表示调用子程序或过程框中标明子程序名字(入口参数等)各框之间用直线连起来表示程序走向3-3-5汇编语言程序设计举例对字符串进
2、行操作时,往往需要确定它的长度,通常字符串结束标志以CR或$作标志。字符串处理程序设计先看流程图:开始求串长串长<256?显示串长高位显示串长低位结束Y警告:太长N子程序串符是‘$’?搜索CR返回N串长加1存串长找到?NYY确定串长流程DATASEGMENTSTRINGDB‘Thisisastring┄’,0DH,’$’LENGTH1DW?;存串长CRDB0DHMESSAGEDB‘Thestringistoolong!’,0D,0A,’$’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAIN
3、PROCFARBEGIN:MOVAX,DATAMOVES,AXMOVDS,AXCALLSTRLEN;调子程序MOVDX,LENGTH1CMPDX,100HJBNEXT1;若(DX)<100H,转LEADX,MESSAGE;若(DX)≥100H,MOVAH,9INT21H;显示信息程序:JMPNEXT2NEXT1:MOVDH,DL;串长暂存DHMOVCL,4SHRDL,CL;取串长高4位CMPDL,9JBELP;≤9,转ADDDL,7;>9,加7LP:ADDDL,30H;高4位化为ASCII码MOVAH,6INT21H;显示这个
4、ASCII码MOVDL,DH;取暂存串长ANDDL,0FH;取串长低4位CMPDL,9JBELP1;≤9,转ADDDL,7;>9,加7LP1:ADDDL,30H;低4位化为ASCII码MOVAH,6INT21H;显示该ASCII码MOVDL,’H’MOVAH,6INT21H;显示’H’NEXT2:MOVAH,4CHINT21H;返回DOSMAINENDPSTRLENPROCLEADI,STRINGMOVCX,0FFFFH;(CX)=-1MOVAL,CR;(AL)=0DHMOVAH,’$’;(AH)=’$’CLD;DF=0AGA
5、IN:INCCX;串长加1,初始值(CX)=0CMPCX,100HJAEDONE;串长>255,则结束CMP[DI],AH;((DI))=’$’?JEDONE;是,则结束SCASB;(AL)-((DI)),找回车JNEAGAIN;未找到,返回继续DONE:MOVLENGTH1,CX;找到,LENGTH1←串长RET;返回主程序STRLENENDPCODEENDSENDBEGIN本例重点掌握:搜索关键字十六进制→ASCII码显示字符串及单个字符I/O装置通常按ASCII码处理数据。人们习惯用十进制数,而机器内以二进制方式运算,故
6、这几者之间常需转换。码转换程序设计①一个十六进制数→ASCII码(用于输出)上面确定字符串长度例子中,化ASCII显示已介绍过。②ASCII码→二进制数(用于输入))例:从键盘输入两个整数,并求其和。因键入为整数,故要进行如下转换:ASCII→BCD→二进制数ASCII→BCD码很简单,去高4位即可BCD→二进制数?有两种方法:((千位数*10+百位数)*10+十位数)*10+个位数千位数*1000+百位数*100+十位数*10+个位数介绍第一种方法:开始两个数分别转换成二进制数键入两个数相加结束返回DOS如有溢出则提示开始得
7、第一个ASCII是负数吗?数字符个数-1,指针+1指针定位字符个数-1是0吗?取数字符,与原值相加,乘以10指向下一个数字符加个位数是负数则求补存结果返回结束NYYN流程图:DATASEGMENTSTR1DB10,?,10DUP(?)STR2DB10,?,10DUP(?)NUMDW?,?;存二进制BUFFERDW0;存和OVERDB‘overflow!’,13,10,’$’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AXMOV
8、AH,0AHLEADX,STR1INT21H;输入第一个数字串(设为26)MOVAH,0AHLEADX,STR2INT21H;输入第二个数字串(设为33)程序:LEABX,STR1;输入串首地址送BXLEADI,NUM;存二进制首地址送DICALLCHANGE;将串1ASCI