资源描述:
《汇编语言实验报告三.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、汇编语言实验报告(实验三)一.实验目的1.掌握程序设计中的子程序结构;2.熟练使用过程伪指令、子程序调用和返回等汇编语言的指令编写子程序;3.掌握数制转换方法;4.掌握利用DOS系统功能调用进行字符输入及字符输出(显示)的方法。二.程序说明1.编写十进制到十六进制转换程序。要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来2.已知从BUF开始存放了10个16进制字数据,编程求出这10个数中的最大数,(将最大数存入MAX字节单元),并将其以10进制数的形式在屏幕上显示出来。(提示:以上两题都要求采用子程序的方法)3.从键盘上输入一行字符,如果这行字符
2、比前一次输入的一行字符长度长,则保存该行字符,然后继续输入另一行字符;如果它比前一次输入的行短,则不保存这行字符。按下‘$’输入结束,最后将最长的一行字符显示出来。(选作)(提示:定义数据段,包括两个变量STRING和BUFFER,格式如下:STRINGDB0;存放字符的个数DB80DUP(?),0DH,0AH,‘$’;存放前一次输入的字符串,兼作显示缓冲区BUFFERDB80;输入字符串的缓冲区,最多输入80个字符DB?DB80DUP(20H)然后利用0AH号DOS系统功能调用收入字符,用09H号系统功能调用输出。)三.设计思想1.先调用子函数decibin由键盘
3、输入一个数字后,先减去30h把ASCII码形式转换为十进制数形式,保存在bx中,再调用子函数binihex,用十六进制形式显示bx中的数。2.利用子函数max依次比较,将buf中10个字的最大值放到bx中,再一次除以10000,1000,100,10,并分别把余数放到bx,商放到dl,并转换为ASCII码格式,即把十六进制转为10进制,最后调用2号功能输出结果即可。3.调用0ah功能,将输入字符放到缓冲区,并把之后输入的字符串依次与缓冲区内容相比较,若小于缓冲区内容,则被替换,直到输入$即停止输入字符串为止,输出最终存放在string中的字符串的内容。一.程序代码1
4、.输入10进制转换为16进制输出datasegmentStr1db0DH,0AH,'Pleaseinputanumber:','$'Str2db0DH,0AH,'Trans:','$'dataendsdecihexsegmentassumecs:decihex,ds:datamainprocfarpushdssubax,axpushaxmovax,datamovds,axrepeat:leadx,Str1movah,09int21hcalldecibinleadx,Str2movah,09int21hcallbinihexmovdl,0ah;换行movah,2int
5、21hjmprepeatmainendpdecibinprocnearmovbx,0newchar:movah,1int21hsubal,30hjlexitcmpal,9djgexitcbwxchgax,bxmovcx,10dmulcxxchgax,bxaddbx,axjmpnewcharexit:retdecibinendpbinihexprocnearmovch,4rotate:movcl,4rolbx,clmoval,blandal,0fhaddal,30hcmpal,3ahjlprintitaddal,7hprintit:movdl,almovah,2int
6、21hdecchjnzrotateretbinihexendpdecihexendsendmain2.datasegmentbufdw05h,0fh,15h,1fh,45h,25h,2ah,32h,3ah,3fhdataendscodesegmentassumecs:code,ds:datamainprocfarstart:movax,datamovds,axcallmaxcallconveymovax,4c00hint21hmainendpmaxprocnearmovbx,0movcl,10movax,buf[bx]repeat:addbx,2cmpax,buf[
7、bx]jggreatermovax,buf[bx]greater:looprepeatmovbx,axretmaxendpconveyprocnearmovcx,10000dcalldividmovcx,1000dcalldividmovcx,100dcalldividmovcx,10dcalldividmovcx,1dcalldividretconveyendpdividprocnearmovax,bxmovdx,0divcxmovbx,dxmovdl,aladddl,30hmovah,2int21hretdividendpcodeendsendstart3.