资源描述:
《汇编实验五--DOS功能调用.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、福建农林大学东方学院信息工程类实验报告系:计算机系专业:电子信息工程年级:10姓名:廖少兵学号:实验课程:汇编语言实验室号:_______实验设备号:实验时间:指导教师签字:成绩:实验五DOS功能调用1.实验目的和要求1.学会DOS中关于显示功能调用指令的用法。2.领会修改显存方法显示字符。2.实验用的软硬件环境实验的硬件环境是:IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM.EXE);连接装配程序:LINK.EXE;交叉引用程
2、序:CREF.EXE(可有可无)。3.实验内容及实验数据记录1、输入一个字符,显示出来2、输入一个字符串,显示出来3、buf开始的3个的16位二进制数用十六进制数的形式显示出来(1)理解程序(2)输入程序,汇编,运行(在DOS状态下输入:文件名.EXE),观察结果。(3)如果要分行显示,程序要如何修改?DATASEGMENTBUFDW4F59H,56A8H,0FF90HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,0P:MOVBX,BUF[SI]MOVCH,4L:MOVCL
3、,4ROLBX,CLMOVDL,BLANDDL,0FHCMPDL,10JBNEXTADDDL,7NEXT:ADDDL,30HMOVAH,2INT21HDECCHJNZLINCSIINCSICMPSI,4JNAPMOVAH,4CHINT21HCODEENDSENDSTART1、运行下列程序,在屏幕的第1行,会显示一个字符X,理解程序段STACKSEGMENTDB128DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKSTART:MOVAX,STACKMOVSS,AXMOVSP,128MOVAX,0B800HMOVES,AX
4、MOVAH,0;BIOS10H的0号功能,设置80X25的彩色字符模式MOVAL,03HINT10HMOVAH,'X'MOVES:[160*1+40*2],AHMOVAL,0MOVAH,4CHINT21HCODEENDSENDSTART1、显示*************************6、编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。4.操作方法及实验步骤1)直接调用DOS1号功能即可,debug环境中a命令直接编辑代码写入内存如下指令MOVAH,01INT21HMOVAH,4CINT21H2)字符串的输入和
5、显示,原以为在调用10号功能后需要调用9号显示功能,因此编辑代码如下DATASEGMENTBUFDB10DB?DB10DUP(?);DB'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETBUFMOVAH,10INT21H;MOVDX,OFFSETBUF+2;MOVAH,9;INT21HMOVAH,4CHINT21HCODEENDSENDSTART3)3.1&3.2我们知道要将数以16进制的形式显示就必须找到其对应的字母ABCDEF的ASCII码,ASCII码4
6、8是数字0的开始也就是16进制中的30,而3AH开始至40H为7个常用符号的ASCII码值,从41H开始才是大写字母的ASCII码值,因此将所要转化的四位二进制数与10做比较,若小于10可直接加30H得到其对应的ASCII码,若大于等于10则应多加上7跳过7个符号ASCII码得到其对应的16进制ASCII码以达到转换的目的即显示时打印其相应的ASCII码对应的字符。3.3要达到题目要求的分行显示,从程序的跟踪可以看出在在取数时分为了两个情况,一个通过SI定位内存单元一次性取得一个16位二进制数,另一个是处理数据时循环移位取高四位数。而要使得数据显示时换行只要在完成一
7、个16位数据的转换后取下一个16位数时进行调用DOS2号功能输出换行符ASCII码为10即0AH便可。所以在源代码的基础上在两次INCSI前JNZL间添加指令如下MOVDL,0AHMOVAH,2INT21H4)可以看到程序首先通过MOVAX,0B800HMOVES,AX在内存开辟了附加段,段首地址为B800H并通过MOVES:[160*1+40*2],AH以便于向B80F0H(位于B8000H~BFFFFH彩色字符模式显示缓冲区)执行MOVAH,'X'写入字符‘X’,以达到直接改变显存内容显示。5)5.1分析图案第1行打印了9列*********第2行打印了7列