汇编实验三.docx
《汇编实验三.docx》由会员分享,可在线阅读,更多相关《汇编实验三.docx(13页珍藏版)》请在冰豆网上搜索。
汇编实验三
福建农林大学金山学院实验报告
系:
专业:
年级:
姓名:
学号:
实验课程:
汇编语言
实验室号:
___实验设备号:
实验时间:
指导教师签字:
成绩:
实验四DOS功能调用
1.实验目的和要求
1.学会DOS中关于显示功能调用指令的用法。
2.领会修改显存方法显示字符。
2.实验环境
实验的硬件环境是:
IBM—PC机及其兼容机
实验的软件环境是:
操作系统:
DOS2.0以上;调试程序:
DEBUG.COM;文本编程程序:
EDIT.EXE、WPS.EXE;宏汇编程序:
MASM.EXE(或ASM.EXE);连接装配程序:
LINK.EXE;交叉引用程序:
CREF.EXE(可有可无)。
3.实验内容及实验数据记录
1、输入一个字符,显示出来
2、输入一个字符串,显示出来
3、buf开始的3个的16位二进制数用十六进制数的形式显示出来
(1)理解程序
(2)输入程序,汇编,运行(在DOS状态下输入:
文件名.EXE),观察结果。
(3)如果要分行显示,程序要如何修改?
DATASEGMENT
BUFDW4F59H,56A8H,0FF90H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,0
P:
MOVBX,BUF[SI]
MOVCH,4
L:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
CMPDL,10
JBNEXT
ADDDL,7
NEXT:
ADDDL,30H
MOVAH,2
INT21H
DECCH
JNZL
INCSI
INCSI
CMPSI,4
JNAP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4、运行下列程序,在屏幕的第1行,会显示一个字符X,理解程序段
STACKSEGMENT
DB128DUP(0)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
START:
MOVAX,STACK
MOVSS,AX
MOVSP,128
MOVAX,0B800H
MOVES,AX
MOVAH,0;BIOS10H的0号功能,设置80X25的彩色字符模式
MOVAL,03H
INT10H
MOVAH,'X'
MOVES:
[160*1+40*2],AH
MOVAL,0
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
5、显示
*********
*******
*****
***
*
6、编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。
4.算法描述及实验步骤
1、在debug中生成1.exe,用g命令执行程序,使用DOS功能1号功能运行程序。
2、在debug中生成2.exe,用g命令执行程序,使用DOS功能2号功能及10号功能运行程序。
3、编写程序后,用G命令运行程序查看输出结果后修改原程序,再次用G命令运行程序查看输出结果。
4、编写程序后直接G命令运行程序查看输出结果。
5、编写程序后直接G命令运行程序查看输出结果。
6、编写程序后直接G命令运行程序查看输出结果。
5.调试过程
1、经调试无错。
2、经调试无错。
3、经调试无错。
4、经调试无错。
5、经调试无错。
6、经调试无错。
6.实验结果
1、
结果显示‘a’,与预期一样。
2、
显示结果与预期一样。
3、
修改前
修改后
显示结果与预期一样
4、
显示结果与预期一样
5、
显示结果与预期一样
6、
正数的个数为“0005”,负数的个数为:
“0003”,0的个数为:
“0002”。
即正数的个数为5个,负数的个数为3个,0的个数为2个。
7.总结
通过这次实验加深了对DOS功能使用和理解,同时还领会了修改显存方法的显示字符等,还对debug命令的使用更深入了。
附录:
1、
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAH,01
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2、
DATASEGMENT
BUFDB20,?
20DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,BUF
MOVAH,0AH
INT21H
MOVDL,0DH
MOVAH,2
INT21H
MOVCL,BUF+1
MOVSI,0
L:
MOVDL,[SI+2]
MOVAH,2
INT21H
INCSI
LOOPL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3、
DATASEGMENT
MSGDB0DH,0AH,'$'
BUFDW4F59H,56A8H,0FF90H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,0
P:
MOVBX,BUF[SI]
MOVCH,4
L:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
CMPDL,10
JBNEXT
ADDDL,7
NEXT:
ADDDL,30H
MOVAH,2
INT21H
DECCH
JNZL
INCSI
INCSI
LEADX,MSG
MOVAH,09H
INT21H
CMPSI,4
JNAP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4、
STACKSEGMENT
DB128DUP(0)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
START:
MOVAX,STACK
MOVSS,AX
MOVSP,128
MOVAX,0B800H
MOVES,AX
MOVAH,0;BIOS10H的0号功能,设置80X25的彩色字符模式
MOVAL,03H
INT10H
MOVAH,'X'
S:
MOVES:
[160*1+40*2],AH
MOVAL,0
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
5、
DATASEGMENT
BUFDW9,?
9DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDX,AX
MOVBL,9
L2:
MOVCL,BL
L1:
MOVDL,'*'
MOVAH,02H
INT21H
LOOPL1
MOVDL,0DH
MOVAH,02H
INT21H
MOVDL,0AH
MOVAH,02H
INT21H
SUBBL,2
CMPBL,0
JGL2
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6、
STACKSSEGMENTSTACK
DW128DUP(?
)
STACKSENDS
DSEGSEGMENT
BUFDB0,-1,2,4,3,-4,5,6,-7,0
RESULTDB0
DSEGENDS
CSEGSEGMENTPARAPUBLIC'CODE'
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVAX,0
MOVBX,0
MOVDX,0
LEASI,BUF
MOVCX,10
LOP:
CMPBYTEPTR[SI],0
JNEL1
INCDL;0的个数
JMPL3
L1:
JGL2
INCAL;负数的个数
JMPL3
L2:
INCBL;正数的个数
L3:
INCSI
LOOPLOP
MOVBH,0
CALLDISP;调用显示子程序,显示正数的个数
MOVBL,AL
MOVBH,0
CALLDISP;调用显示子程序,显示负数的个数
MOVBL,DL
MOVBH,0
CALLDISP;调用显示子程序,显示规划零的个数
MOVAL,0
MOVAH,4CH
INT21H
DISPPROC;显示BX中的数
PUSHAX
PUSHBX
PUSHDX
MOVCH,4
ROLL:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
CMPDL,9
JBENEXT1
ADDDL,07H
NEXT1:
ADDDL,30H
MOVAH,02H
INT21H
DECCH
JNZROLL
POPDX
POPBX
POPAX
RET
DISPENDP
CSEGENDS
ENDSTART