汇编语言实验题目及报告格式Word文档下载推荐.docx
- 文档编号:16547522
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:18
- 大小:192.92KB
汇编语言实验题目及报告格式Word文档下载推荐.docx
《汇编语言实验题目及报告格式Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编语言实验题目及报告格式Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
18
19
20
四川师范大学计算机科学学院《汇编程序设计》实验报告
院系:
专业:
年级:
姓名:
学号:
实验课程:
汇编程序设计
实验室号:
______实验设备号:
实验时间:
指导教师签字:
成绩:
实验一汇编程序的汇编及运行
1.实验目的和要求
(1)熟悉汇编程序的汇编、连接、执行过程;
(2)生成.1ST文件,查看.1ST文件;
(3)生成.OBJ文件,修改语法错误;
(4)生成.EXE文件;
(5)执行程序
2.实验原理
汇编程序从编写到执行的过程
编程→.ASM→编译→.OBJ→连接→.EXE→加载→内存中的程序→执行
3.主要仪器设备(实验用的软硬件环境)
WindowsXP操作系统,MASM,LINK
4.操作方法与实验步骤
1)编写源程序
用记事本输入程序,并存储成源程序,保存在MASM目录下,扩展名为ASM。
2)对源程序进行汇编、连接
操作如下:
(1)在DOS状态下,进入MASM目录;
(2)输入命令:
MASM文件名(连同扩展名);
(3)在系统出现的提示中输入:
objectfilename[.obj]:
按回车键。
Sourcelistling[nul.lst]:
输入:
文件主名,生成.lst文件,也可以不生成,直接按回车键。
.Lst文件用于查看编译为目标文件的过程中产生的中间结果。
Cross-reference[nul.crf]:
(4)如果系统没有提示出错,那么编译过程就完成了。
如果提示错误则应用edit打开源文件进行修改,然后再重复2和3步骤
(5)输入:
link文件主名(不要输扩展名,也可以输入扩展名.obj)
runfile[.exe]:
Listfile[nul.map]:
Libraries[.lib]:
(6)没有提示错误,汇编过程就结束了,产生了exe可执行文件。
如果出现‘nostracksegment’的错误警告,不用理会。
3)执行程序(由DOS中的COMMAND命令将文件加载入内存)
在DOS提示符下直接输入文件主名就可以执行文件了。
程序执行后,有的会显示结果,有的可能执行后什么结果都没有,是因为程序中没有显示命令。
5.实验内容及实验数据记录
5.1
(1)输入数据段1:
DATASEGMENT
ORG20H
NUM1=8
NUM2=NUM1+10H
DA1DB'
IBMPC'
DB0AH,0DH
COUNTEQU$-DA1
DATAENDS
END
(2)生成1-1.lst,用EDIT1-1.lst文件得知DA1=0020,COUNT=0008(参见实验截图)
5.2
(1)输入数据段2:
VAR1DB0,25,0DH,30H
VAR2DB12H,0A4H,6BH
VAR3DB'
ABCDEFH'
VAR4DW1234H,5678H
VAR5DW10HDUP(?
)
CODESEGMENT
ASSUMECS:
CODE,DE:
DATA
BEINGMOVAX,DATA
MOVDS,AX
LEASI,VAR5
MOVBX,OFFSETVAR2
MOV[SI],0ABH
MOVAX,VAR1+2
MOV[BX],[SI]
MOVVAR5+4,VAR4
MOVAH,4CH
INT21H
CODEENDS
END
(2)进行汇编:
提示有6个错误。
经分析得:
第9行:
将DE→DS
第10行:
将BEING→BEGIN:
第14行:
将[SI]→SI
第15行:
将VAR1+2→[VAR1+2]
第16行:
将[BX]→BX
第17行:
将VAR5+4→AX,VAR4→[VAR4]
修改后进行汇编得:
5.3
(1)输入数据段3:
STACKSSEGMENT
STACKDW128DUP(?
STACKSENDS
DATASSEGMENT
STRINGDB'
WELCONME!
'
13,10,'
$'
DATASENDS
CODESSEGMENT
CODES,DS:
DATAS
START:
MOVAX,DATAS
LEADX,STRING
MOVAH,9
CODESENDS
ENDSTART
(2)运行程序3得到:
WELCOME!
(3)实验截图:
6.数据处理与分析
1)在DOS状态下,对.asm文件汇编,可以得到一个1.lst文件,通过EDIT1.lst,可以查看到DA1=0020,COUNT=0008
2)AX是数据寄存器,而VAR是地址,赋值应该写成[VAR1+2];
7.质疑、建议、问题讨论
直接用edit.exe编辑汇编程序修改不方便,可以使用记事本编辑,再通过更改后缀名变成.asm文件。
四川师范大学计算机科学学院《汇编程序设计》实验报告
实验二:
(1)学习使用DEBUG的命令;
(2)使用DEBUG命令在数据段中查看程序运行的结果;
(3)利用DEBUG运行简单的程序段。
DEBUG命令的使用过程。
1)将输入的大写字母改为小写字母并输出,编写程序。
输入程序观察寄存器变化
2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。
如果是将小写字母改成大写字母带注释的语句该如何修改?
3)程序的跟踪执行操作
在DOS下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。
那么如何查看程序的运行结果呢?
程序执行过程的跟踪操作步骤如下:
(1)在DOS下输入:
DEBUG文件名.EXE
(2)在DEBUG提示符下输入U命令
如果程序中有数据段,可以看到反汇编后第一句可执行语句为:
A地址:
B地址MOVAX,K地址如:
1261:
0000MOVAX,1260
其中:
K地址就是数据段的段寄存器内容,A地址为代码段段寄存器地址,B地址为程序第一条指令的偏移地址。
(3)可以用T命令单步执行指令,执行到MOVAH,4CH时结束,也可以用G命令执行整个程序,输入:
G=B地址(如:
G=0000)
(4)用D命令查看程序执行后数据段的变化
输入:
DK地址:
0(如:
D1260:
0)
在显示的数据中,对照源程序或LST文件查看结果所在的偏移地址的内容。
4)输入下面的程序,按实验一和上面的步骤运行一遍。
这是一个两个数相与的程序。
结果存放在MSG2单元中,偏移地址为?
值为多少?
DSEGSEGMENT
MSG1DW7856H,2038H
MSG2DW?
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVAX,MSG1
ANDAX,MSG1+2
MOVMSG2,AX
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
3.编写调试下面的程序,用DEBUG查看数据段中的结果
1)Z=((W-X)*10+5)/(X+Y),X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。
2)X,Y为字节类型数,求Z=((X+Y)*8-(X-Y)*2)/16,写出完整的数据段和代码段,不用乘除指令。
1)在debug中用a命令,输入以下程序后观察寄存器变化
2)创建文件并逐步执行
4)实验截图为
5)Z=((W-X)*10+5)/(X+Y),X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。
6)X,Y为字节类型数,求Z=((X+Y)*8-(X-Y)*2)/16,程序代码
6.质疑、建议、问题讨论
实验三:
分支循环程序设计
(1)学习调试程序,查找逻辑错误;
(2)学习分支语句的编程和调试;
(3)学习循环语句的编程和调试。
利用DEBUG命令查找发现逻辑错误并修改,调试。
4.实验内容
(1)有10个数,统计正数的个数,存放在变量M中。
经过汇编后,行程.exe文件。
在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。
用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确(AL寄存器中存放正数的个数)。
程序
DSEGSEGMENT
MSGDB4,-2,-6,0,5,67,8,-3,5,6
MDB?
CSEGSEGMENT
MOVDS,AX
MOVCX,10
LEASI,MSG
L1:
MOVBL,[SI]
CMPBL,0
JBENEXT
INCAL
NEXT:
INCSI
LOOPL1
MOVM,AL
输入程序并调试。
得到上面程序的分析结果。
(2)数据段中是一组无符号数,将最小数存放在M单元中。
对其进行调试发现错误并修改。
源程序如下:
MSGDB13,15,7,25,24
MDB?
MOVCX,4
MOVAL,MSG
MOVSI,OFFSETMSG+1
CMPAL,[SI]
JBNEXT
MOVAL,[SI]
LOOPL1
MOVAL,0
CSEGENDS
ENDSTART
经调试发现循环结束AL中的数值不变,且SI没有自增
故要在next:
处加上INCSI
(3)编程:
在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果放在RESULT中。
(4)编程:
Ai、Bi为字节型无符号数据,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。
实验四:
子程序设计
(1)学习子程序的编写,主子程序的调用
(2)不同模块间程序的调用和调试
2.主要仪器设备(实验用的软硬件环境)
3.实验内容
(1)数据段的三个字符,调用子程序将其逐个显示出来。
子程序的功能是显示一个字符。
但不执行,对CALL语句和RET语句观察SP、IP的变化,并用D命令查看栈顶内容。
程序段如下:
DATASEGMENT
MAGDB‘ABC’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MOVAX,DATA
MOVSI,0
MOVCX,3
LL:
MOVDL,MAG[SI]
CALLMADD
INCSI
LOOPLL
MOVAH,4CH
INT21H
MADDPROC
MOVAH,02H
RET
MADDENDP
CODEENDS
ENDSTART
进行汇编单步执行。
用T命令运行五次,D命令查看SS段内容。
通过在DEBUG中用T单步执行与用P子程序执行,分别使ABC逐个显示出来,当执行到调用子程序时候SP=007A,对IP进行保护,当子程序执行完毕以后,返回到SP保护的IP地址0012.。
直接把文件名输进去后可以把三个字符一起输出:
(2)阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行的文件S31.EXE。
具体步骤如下:
MASMS31.ASM(分别汇编)
MASMS32.ASM
LINKS31S32(将两个文件连接成为一个文件名为S31)
S31.EXE(运行)
源程序如下:
NAMES31.ASM
EXTRNDISP:
FAR
CODESEGMENTPARA'
CODE'
ASSUMECS:
CODE
MOVAH,01H
MOVBL,AL
MOVAH,AL
MOVAL,BL
CMPAX,3030H
JEEXIT
CALLNEARPTRTRAN
CALLFARPTRdisp
JMPSTART
EXIT:
TRANPROCNEAR
ANDAX,0F0FH
MOVBL,AH
MOVCL,10D
MULCL
ADDAL,BL
RET
TRANENDP
ENDSTART
NAMES32.ASM
PUBLICDISP
CODE1SEGMENTPARA'
CODE1
DISPPROCFAR
MOVBH,00
MOVCH,4
ROLL:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
CMPDL,9
JBENEXT1
ADDDL,07H
NEXT1:
ADDDL,30H
MOVAH,02H
DECCH
JNZROLL
DISPENDP
CODE1ENDS
END
经过汇编,链接得到S31.EXE
4.编程题
(1)编程:
利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来(也可以将找到的不相等字符逐个显示,用INT21H的02功能调用)。
最后的输出结果为:
(2)编程:
子程序搜索指定字符缓冲区中是否有N,如果有用Y替代。
调用子程序将BUF1、BUF2、BUF3中的N全部用Y替代。
运行程序:
实验五DOS功能调用
(1)学会DOS中关于显示功能调用指令的用法;
(2)领会修改显存方法显示字符。
3.实验内容
1)输入一个字符,显示出来。
2)输入一个字符串,显示出来。
3)BUF开始的3个16位二进制数用十六进制数的形式显示出来。
(1)理解程序
(2)输入程序,汇编,运行(在DOS状态下输入:
文件名.EXE),观察结果。
(3)如果要分行显示,程序要如何修改?
4)直接改变显存内容显示。
(1)显存空间分配:
内存地址空间中,B8000H-BFFFFH共32KB的空间,为80×
25彩色字符模式显示缓冲区。
向这个地址空间写入数据,写入的内容将立即出现在显示器上。
80×
25=2000个字符,每个字符在缓冲区中占2个字节,一个字节存放ASCII码,一个字节存放字符属性(字符颜色、字符背景颜色、闪烁、高亮度)
(2)偏移地址计算:
如第2行,第40列:
(2-1)×
160+40×
2这个偏移地址中存放字符的ASCII码,
(2-1)×
2+1这个偏移地址中存放字符的属性。
第M行,第N列的一般计算公式为:
(M-1)×
160+N*2存放ASCII码
160+N*2+1存放属性
(3)运行下列程序,在屏幕的第1行,会显示一个字符X。
根据上面
(1)、
(2)点理解程序段。
STACKSEGMENT
DB128DUP(0)
STACKENDS
CSEG,SS:
STACK
MOVAX,STACK
MOVSS,AX
MOVSP,128
MOVAX,0B800H
MOVES,AX
MOVAH,‘X’
S:
MOVES:
[160*1+40*2],AH
ENDSTART
5)编程显示以下图案。
*********
*******
*****
***
*
6)编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。
4.质疑、建议、问题讨论
学习汇编语言应深刻理解汇编语言的逻辑特点,更高效,更直接地达到目标。
在进行编程时,利用好DEBUG程序,以了解程序的运行状态,有助于改错和改进程序。
实验六字符处理程序设计
(1)熟悉串操作指令的功能与应用;
(2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。
WindowsXP操作系统,MASM,LINK
从键盘键入一个字符串,存入内存BUF为首地址的单元中,现要求统计其中含有小写字母的个数,并将统计结果以两位十进制数形式显示在屏幕上。
4.质疑、建议、问题讨论
通过此次实验,我更深刻理解了指针在程序中的应用,也对子程序的灵活调用有了一番认识。
还有就是作为一名程序员,必须具有耐心和细心,才能够写成简洁高效的程序。
实验体会:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 题目 报告 格式