1、汇编综合实验项目目 录实 验 要 求实验方法和原理实验过程、步骤及其分析实验结论 实 验 要 求 试编写一程序实现以下功能:使一个特定字符从左下角上升到右上角,然后回到左下角,再上升到右上角,重复运行,直到按任意键时退出。(利用bios中断int 10h)程序思路为:显示某图形、延时、清除该图形、修改图形显示位置,如没有键按下,则重复以上过程,如有键按下则退出。实验要求 实 验 方 法 及 原 理BIOS中断 BIOS中断务程序实质上是微机系统中软件与硬件之间的一个可编程接口,主要用于程序软件功能与微机硬件之间。10H为BIOS服务的视频服务功能描述:为显示适配器提供I/O支持。16H为BIO
2、S服务的键盘服务功能描述:为键盘提供I/O支持。常用的BIOS服务功能见书192页02H功能:功能描述:设置光标的位置入口参数:AH=02H BH=显示页码 DH行(Y坐标)DL列(X坐标)出口参数:无 实例:MOV AH,02HMOV DX,0INT 10HX XY Y0 0INT 10H功能0AH :功能描述:在当前光标处按原有属性显示字符 入口参数:AH0AH AL字符 BH显示页码 BL颜色(图形模式,仅适用于PCjr)CX重复输出字符的次数出口参数:无 实例:MOV AL,41HMOV AH,0AHINT 10INT 10H功能0FH 功能描述:读取显示器模式 入口参数:AH0FH
3、出口参数:AH屏幕字符的列数 AL显示模式(参见功能00H中的说明)BH页码例如:MOV AH,0FHINT 10H;获得当前页号MOV AH,0MOV AL,2INT 10H;设置为80列25行黑白方式INT 10HINT 16H功能01H:功能描述:读取键盘状态 入口参数:AH01H(检查普通键盘)出口参数:ZF1,则无字符输入 ZF=0时,AH键盘的扫描码 ALASCII码。例如:MOV AH,01HINT 16H;在键盘上输入一个字符A,那么此时AL=41H。实验过程、步骤及其分析程序方框图程序方框图SEGMENT STACKSEGMENT STACKDW 64 DUP(?)DW 64
4、 DUP(?)STACK STACK ENDSENDSCODECODESEGMENTSEGMENT ;代码段初始化代码段初始化ASSUME CS:CODE,SS:STACK ;ASSUME CS:CODE,SS:STACK ;代码段与存储器的对应代码段与存储器的对应 MOV AX,STACKMOV AX,STACK MOV SS,AX MOV SS,AX MOV SP,AX MOV SP,AXMOVECHAMOVECHAPROC FAR PROC FAR;定义子程序定义子程序MOV AH,0FHMOV AH,0FH;调用调用0F0F号号DOSDOS命令,取当前显示方式(返回参数:页号,字符列数
5、,命令,取当前显示方式(返回参数:页号,字符列数,显示方式)显示方式)INT 10HINT 10H;获得当前页号获得当前页号MOV AH,0MOV AH,0;调用调用0 0号号DOSDOS功能,设置显示方式功能,设置显示方式(颜色,文本颜色,文本)MOV AL,2MOV AL,2;设置光标位置设置光标位置INT 10HINT 10H;设置为设置为8080列列2525行行动黑白本方式行行动黑白本方式MOV CX,1MOV CX,1;设置要显示的字符个数设置要显示的字符个数DISPLAY:MOV DX,1800HDISPLAY:MOV DX,1800H;置光标位置(置光标位置(2424,0 0)代
6、码分析LOP1:LOP1:MOV AH,2MOV AH,2;设置光标位置设置光标位置 INT 10HINT 10H;MOV AL,26HMOV AL,26H;显示字符,此处改变就好,显示不同字符显示字符,此处改变就好,显示不同字符MOV AH,0AHMOV AH,0AH;0A;0A号号DOSDOS命令,在光标位置显示字符命令,在光标位置显示字符INT 10HINT 10HCALL DELAYCALL DELAY;延时延时MOV AH,1MOV AH,1;读取键盘缓冲区字符读取键盘缓冲区字符INT 16HINT 16HJNZ ENJNZ EN;三句判断输入任意键则结束三句判断输入任意键则结束XO
7、R AL,ALXOR AL,ALMOV AH,0AHMOV AH,0AHINT 10HINT 10H;清除原图形清除原图形INC DLINC DL;下个输出位置向右移动三位下个输出位置向右移动三位INC DLINC DLINC DLINC DLDEC DHDEC DH;下个输出位置向上移动一位下个输出位置向上移动一位JNZ LOP1JNZ LOP1;未到顶行则循环未到顶行则循环从左下到右上LOP2:LOP2:MOV AH,2MOV AH,2;INT 10HINT 10HMOV AL,26HMOV AL,26H;显示字符,此处改变就好,显示不同字符显示字符,此处改变就好,显示不同字符MOV AH
8、,0AHMOV AH,0AH;键盘输入到缓冲区键盘输入到缓冲区INT 10HINT 10HCALL DELAYCALL DELAY;延时延时MOV AH,1MOV AH,1INT 16HINT 16HJNZ ENJNZ EN;三句判断输入任意键则结束三句判断输入任意键则结束XOR AL,ALXOR AL,AL;AL;AL清零清零MOV AH,0AHMOV AH,0AH;键盘输入到缓冲区键盘输入到缓冲区INT 10HINT 10H;清除原图形清除原图形DEC DLDEC DL;下个输出位置向左移动三位下个输出位置向左移动三位DEC DLDEC DLDEC DLDEC DLINC DHINC DH
9、;下个输出位置向下移动一位下个输出位置向下移动一位CMP DH,18HCMP DH,18H;DH;DH小于小于18h 18h 没到底部没到底部JNZ LOP2JNZ LOP2;未到底行则循环未到底行则循环JMP DISPLAYJMP DISPLAY;无键入图形则再显示移动,从头来无键入图形则再显示移动,从头来RET RET CODECODEENDSENDSEND MOVECHAEND MOVECHA从右上到左下DELAYDELAY MOVECHA ENDP MOVECHA ENDPEN:EN:MOV AH,4CH;MOV AH,4CH;带返回码结束带返回码结束INT 21HINT 21HDEL
10、AYDELAYPROC NEAR;PROC NEAR;延时函数,移动后等待一段延时函数,移动后等待一段 时间再重新移动时间再重新移动PUSH CX;PUSH CX;保护保护DXDX和和CXCXPUSH DXPUSH DXMOV DX,100;MOV DX,100;改变可改变移动的等待时间改变可改变移动的等待时间DE1:DE1:MOV CX,2801;DXMOV CX,2801;DX是嵌套在是嵌套在CXCX中的循环中的循环DE2:DE2:LOOP DE2LOOP DE2DEC DXDEC DXJNZ DE1JNZ DE1;POP DXPOP DXPOP CXPOP CXRETRET延时函数MOV
11、 CX,1MOV CX,1;设置要显示的设置要显示的MOV DX,1800HMOV DX,1800H;置光标位置(置光标位置(2424,0 0)流程图流程图运行结果实现特殊字符从左下角上升到右上角,实现特殊字符从左下角上升到右上角,然后回到左下角,再上升到右上角,重复运行然后回到左下角,再上升到右上角,重复运行按任意键退出按任意键退出 实 验 结 论本实验的目的是为了实现将特定字符从左下角上升到右上角,然后回到左下角,一直显示直到有任意键输入。首先是小组分析和讨论课题,确定程序思路和画程序流程图,然后着手设计,这个过程磨合修改的过程中的收获最大,也是完成这个项目的核心。在寻找demo然后根据要求修改的过程中,我们自主学习了很多课堂以外的知识点,比如如何设置黑白方式,怎样实现光标的移动,尤其是对BIOS中断这一块进行了深入学习。总体来说,在短时间内完成这样一个课题确实投入了很多时间和心思,但是最后成功做出来了还是有很大的收获。实验结论感谢您的聆听