汇编实验五--DOS功能调用(共19页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《汇编实验五--DOS功能调用(共19页).doc》由会员分享,可在线阅读,更多相关《汇编实验五--DOS功能调用(共19页).doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上福建农林大学东方学院信息工程类实验报告系: 计算机系 专业: 电子信息工程 年级: 10 姓名: 廖少兵 学号: 实验课程: 汇编语言 实验室号:_ 实验设备号: 实验时间: 指导教师签字: 成绩: 实验五 DOS功能调用1实验目的和要求1. 学会DOS中关于显示功能调用指令的用法。2. 领会修改显存方法显示字符。2实验用的软硬件环境实验的硬件环境是:IBMPC机及其兼容机实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LI
2、NK .EXE;交叉引用程序:CREF.EXE(可有可无)。3实验内容及实验数据记录1、 输入一个字符,显示出来2、 输入一个字符串,显示出来3、 buf开始的3个的16位二进制数用十六进制数的形式显示出来(1)理解程序(2)输入程序,汇编,运行(在DOS状态下输入:文件名.EXE),观察结果。(3)如果要分行显示,程序要如何修改?DATASEGMENTBUFDW4F59H, 56A8H, 0FF90HDATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATA MOVDS, AX MOVSI, 0P:MOVBX, BUFSI MOV
3、CH, 4L:MOVCL, 4 ROLBX, CL MOVDL, BL ANDDL, 0FH CMPDL, 10 JBNEXT ADDDL, 7NEXT:ADDDL, 30H MOVAH, 2 INT21H DECCH JNZL INCSI INCSI CMPSI, 4 JNAP MOVAH, 4CH INT21HCODE ENDSENDSTART4、 运行下列程序,在屏幕的第1行,会显示一个字符X,理解程序段STACK SEGMENT DB 128 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACKSTART: MOV AX,STACK
4、MOV SS,AX MOV SP,128 MOV AX,0B800H MOV ES,AX MOV AH,0 ;BIOS 10H的0号功能,设置80X25的彩色字符模式 MOV AL,03H INT 10H MOV AH,X MOV ES:160*1+40*2,AH MOV AL,0 MOV AH,4CH INT 21HCODE ENDS END START5、 显示*6、 编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。4操作方法及实验步骤1)直接调用DOS 1号功能即可,debug环境中a命令直接编辑代码写入内存如下指令MOVAH,01INT2
5、1HMOVAH,4CINT21H2)字符串的输入和显示,原以为在调用10号功能后需要调用9号显示功能,因此编辑代码如下DATA SEGMENTBUF DB 10 DB ?DB 10 DUP(?);DB $DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOV DS,AXMOV DX,OFFSET BUFMOV AH,10INT 21H;MOV DX,OFFSET BUF+2;MOV AH,9;INT 21HMOV AH,4CHINT 21HCODE ENDSEND START3)3.1&3.2我们知道要将数以16进制的形式显
6、示就必须找到其对应的字母ABCDEF的ASCII码,ASCII码48是数字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位数时进行调用DOS 2号功能输出换行符ASCII码为10即0AH便可。所以在源代码的基础上在两次INC SI前JNZL间添加指令如下MOV DL,0AHMOV AH,2INT 21H 4)可以看到程序首先通过MOV AX,0B800HMOV ES,AX在内存开辟了附加段,段首地址为B800H并通过MOV ES:160*1+40*2,AH以便于向B80F0H(位于B8000HBFFFFH彩色字符模式显示缓冲区)执行MOV AH,X写入字符X,以达到直接改变显存内容显示。5) 5.1分析图案第1行打印了9列 *第2行打印了7列
8、 *第3行打印了5列 *第4行打印了3列 *第5行打印了1列 *因此有两种思路,一是通过调用DOS 2号功能配合循环逐一打印字符*,二是借鉴4)中的方法直接改变内存内容显示*。但两种方法都用到了双重循环,外层循环控制行的打印,内层循环控制列的打印。结合图案分析和循环数与行序号不然找到如下关系:a、1=列数= 2*当前行序号-1而行控制参是外层循环CX的变动,所以有b、6-CX=当前行序号。5.2这里选择第二种以熟悉并掌握4)中的方法首先按a和b式,就有了偏移地址的计算式:160*(6-CX)+2*Y。其中1=Y=2*CX-1,可通过内层循环实现。5.4因此有最初代码(错误)STACKSEGME
9、NTDB128 DUP(0)STACK ENDSCSEGSEGMENTASSUME CS:CSEG,SS:STACKSTART:MOV AX,STACKMOV SS,AXMOV SP,128MOV AX,0B800HMOV ES,AX ;段装入MOV CL,5;循环控制次数为5MOV CH,0 ;高位清零MOV DH,*;初始打印字符MOV AX,0H:;MOV BL,1 ;从1列开始显示MOV DL,6;行控制参数SUB DL,CL;控制当前行MOV AL,160MUL DLMOV DI,AX ;保存行参数MOV AL,2 MUL CLDEC AL(L:)MOV AL,2MUL BL;控制当
10、前列ADD AX,DI;显存空间定位MOV ES:AX,DH;通过显存显示INC BL;列打印自加;INC BX(L:)MOV AL,2 MUL CLDEC AL;DEC AX ;MOV SI,AXCMP BL,AL;检验打印上限;CMP BX,SIJNA L;未打印完当前行返回继续打印MOV DL,0AHMOV AH,2INT 21H ;打印完一行则换行LOOP H;行打印循环MOV AH,4CHINT 21H;退出到DOS界面CSEGENDSEND START6)6.1分析题目要求有三,首先定义缓冲区存放20个有符号数据,其次对于正负数和零的统计可通过两次筛选来完成,最后是16进制的转换这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 DOS 功能 调用 19
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内