福建农林大学汇编语言实验报告.docx
- 文档编号:24354167
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:50
- 大小:851.36KB
福建农林大学汇编语言实验报告.docx
《福建农林大学汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《福建农林大学汇编语言实验报告.docx(50页珍藏版)》请在冰豆网上搜索。
福建农林大学汇编语言实验报告
福建农林大学金山学院
(程序设计类课程)
实验报告
课程名称:
汇编语言
姓名:
我是康宁
系:
我是宇宙第一美男子
专业:
年级:
学号:
指导教师:
职称:
2011~2012学年第二学期
实验项目列表
序号
实验项目名称
成绩
指导教师
1
实验一汇编程序的汇编及运行
2
实验二顺序程序设计
3
实验三分支循环程序设计
4
实验四子程序设计
5
实验五DOS功能调用
总平均
福建农林大学金山学院实验报告
系:
专业:
年级:
姓名:
学号:
实验课程:
汇编语言
实验室号:
_____实验设备号:
实验时间:
5月2号上午三四节
指导教师签字:
成绩:
实验一汇编程序的汇编及运行
1.实验目的和要求
(1)熟悉汇编程序的汇编、连接、执行过程
(2)生成LST文件,查看LST文件
(3)生成OBJ文件,修改语法错误
(4)生成EXE文件
(5)执行
2.实验环境
IBM—PC机及其兼容机
实验的软件环境是:
操作系统:
DOS2.0以上;调试程序:
DEBUG.COM;文本编程程序:
EDIT.EXE、WPS.EXE;宏汇编程序:
MASM.EXE(或ASM.EXE);连接装配程序:
LINK.EXE;交叉引用程序:
CREF.EXE(可有可无)。
3.实验内容及实验数据记录
(1)将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:
DA1,DA2的偏移量分别是多少?
COUNT的值为多少?
DATASEGMENT
ORG20H
NUM1=8
NUM2=NUM1+10H
DA1DB‘IBMPC’
DA2DB0AH,0DH
COUNTEQU$-DA1
DATAENDS
END
(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不
必连接、运行。
)
DATASEGMENT
VAR1DB0,25,ODH,300
VAR2DB12H,A4H,6BH
VAR3DB’ABCDEF’
VAR4DW1234H,5678H
VAR5DW10HDUP(?
)
DATAENDS
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
ENDSTART
(3)输入正确的程序,汇编、连接、运行
STACKSSEGMENTSTACK
DW128DUP(?
)
STACKSENDS
DATASSEGMENT
STRINGDB‘WELCOME!
’,13,10,‘$’
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEADX,STRING
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
1.算法描述及实验步骤
编写各代码并存储为源程序asm文件,对其进行汇编、连接。
1、Dos进入masm目录
2、masm文件名(对文件进行编译)
3、link文件名(对生成OBJ目标文件进行连接)
4、由dos加载连接后生成的可执行文件来执行程序
5.调试过程
(1)运行结果
程序没有错误;
(2)
结果又9处错误,对程序进行调试
DATASEGMENT
VAR1DB0,25,0DH,30
VAR2DB12H,0A4H,6BH
VAR3DB'ABCDEF'
VAR4DW1234H,5678H
VAR5DW10HDUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEING:
MOVAX,DATA
MOVDS,AX
LEASI,VAR5
MOVBX,OFFSETVAR2
MOV[SI],WORDPTR0ABH
MOVAX,WORDPTRVAR1+2
MOVBX,[SI]
MOVCX,VAR5+4
MOVDX,VAR4
MOVCX,DX
MOVAH,4CH
INT21H
CODEENDS
ENDBEING
调试完之后运行的结果:
(3)
6.实验结果
(1)
DA1的偏移量为20,DA2的偏移量为26,COUNT的值为8.
(2)
(3)
(3)
7.总结
让我熟悉了汇编程序的汇编、连接、执行过程;让我知道如何生成.lst文件和查看该文件;生成.obj文件和修改语法的错误,让我更近一步了解汇编
福建农林大学金山学院实验报告
系:
专业:
年级:
姓名:
学号:
实验课程:
实验室号:
_____实验设备号:
实验时间:
2011.5.9指导教师签字:
成绩:
实验二顺序程序设计
1.实验目的和要求
(1)学习使用DEBUG的命令;
(2)使用DEBUG命令在数据段中查看程序运行的结果;
(3)利用DEBUG运行简单的程序段。
2.实验环境
IBM—PC机及其兼容机
实验的软件环境是:
操作系统:
DOS2.0以上;调试程序:
DEBUG.COM;文本编程程序:
EDIT.EXE、WPS.EXE;宏汇编程序:
MASM.EXE(或ASM.EXE);连接装配程序:
LINK.EXE;交叉引用程序:
CREF.EXE(可有可无)。
3.实验内容及实验数据记录
1)输入程序观察寄存器变化使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。
注意用T命令执行时,CS:
IP寄存器的内容
使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。
注意用T命令执行时,CS:
IP寄存器的内容
MOVAX,4E20
ADDAX,1416
MOVBX,2000
ADDAX,BX
MOVBX,AX
ADDAX,BX
MOVAX,001A
MOVBX,0026
ADDAL,BL
ADDAH,BL
ADDBH,AL
MOVAH,0
ADDAL,BL
ADDAL,9C
2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。
如果是将小写字母改成大写字母带注释的语句该如何修改?
DSEGSEGMENT
MSG1DB‘abc’
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
LEABX,MSG1
MOVCX,3
S:
MOVAL,[BX]
ANDAL,11011111B;将AL中的ASCII码的第5位置0,
SUBAL,20H;变成大写字母。
MOV[BX],AL
INCBX
LOOPS
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
4.算法描述及实验步骤
第一题:
(1)在doc下直接输入debug
(2)在debug提示符下输入A,然后按回车键
(3)页面自动出现一组地址,分别为段地址和偏移地址,直接在提示符后输入单条程序
(4)按回车键,出现第二组地址,直接按回车键
(5)在提示符下输入T,执行第一条指令
(6)重复
(2)、(3),输入第二条程序,直至所有指令单步执行结束
第二题
(1)编写源程序,用记事本输入程序,并存储为源程序(保存在masm目录下),扩展名更改为1.asm
(2)对源程序进行汇编、连接
操作如下:
i.在dos状态下,进入masm目录
ii.输入命令:
masm
iii.在系统出现的提示中输入:
Sourcefilename[.asm]:
输入1
Objectfilename[1.obj]:
回车键
Sourcelisting[nul.lst]:
输入1,生成.lst文件
Cross-reference[nul.crf]:
回车键
iv.出现提示出错,对源程序代码进行修改,重复执行以上步骤
v.输入:
link1.asm
vi.在系统出现的提示中输入:
Runfile[1.exe]:
输入1
Listfile[nul.map]:
回车键
libraries[.lib]:
回车键
vii.出现“nostacksegment”警告,不理会。
生成了1.exe可执行文件
(3)程序的跟踪执行操作如下
i.在dos下输入:
debug1.exe
ii.在debug提示符下输入u命令
iii.用t命令单步执行指令
iv.用d命令查看程序执行后数据段的变化
5.调试过程
第二题
汇编生成.lst文件时出错
对源程序的代码错误进行修改,之后汇编完成
连接生成.exe时出错
删除错误语句,连接完成
6.实验结果
第一题
单步执行指令
第二题
T单步执行结果
第三题
U命令反汇编
T命令单步执行
D命令查看数据段变化
由2.lst可知msg2的偏移地址为0004H,值为?
第四题
7.总结
通过实验,学习使用DEBUG的命令和使用DEBUG命令在数据段中查看程序运行的结果并且学会了利用DEBUG运行简单的程序段。
附录:
福建农林大学金山学院实验报告
系:
专业:
年级:
姓名:
学号:
实验课程:
实验室号:
___实验1#605__实验设备号:
实验时间:
2012.5.14
指导教师签字:
成绩:
实验三分支循环程序设计
1.实验目的和要求
1、学习调试程序,查找逻辑错误;
2、学习分支语句的编程和调试;
3、学习循环语句的编程和调试。
2.实验环境
实验的硬件环境是:
IBM—PC机及其兼容机
实验的软件环境是:
操作系统:
DOS2.0以上;调试程序:
DEBUG.COM;文本编程程序:
EDIT.EXE、WPS.EXE;宏汇编程序:
MASM.EXE(或ASM.EXE);连接装配程序:
LINK.EXE;交叉引用程序:
CREF.EXE(可有可无)。
3.实验内容及实验数据记录
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?
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVCX,10
MOVAL,0
LEASI,MSG
L1:
MOVBL,[SI]
CMPBL,0
JBENEXT
INCAL
NEXT:
INCSI
LOOPL1
MOVM,AL
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
1.数据段中是一组无符号数,将最小数存放在M单元中。
按上题方法查找一处逻辑错误。
DSEGSEGMENT
MSGDB13,15,7,25,24
MDB?
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVCX,4
MOVAL,MSG
MOVSI,OFFSETMSG+1
L1:
CMPAL,[SI]
JBNEXT
MOVAL,[SI]
NEXT:
LOOPL1
MOVM,AL
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
2.编程:
在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。
3.编程:
,Ai,Bi为字节型无符号数,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。
4.算法描述及实验步骤
1.编写源程序:
用edit或记事本输入各段,并存储成源程序,扩展名为.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文件主名
Runfile[.exe]:
按回车键
Listfile[nul.map]:
按回车键
Libraries[.lib]:
按回车键
(6)没有提示错误,汇编过程就结束了,产生了.Exe可执行文件。
如果出现“nostacksegment”的错误警告,不用理会。
(7)3.执行程序:
在dos提示符下直接文件主名就可以执行文件了。
程序执行后,有的会显示结果,有的可能执行后什么结果也没有,是因为程序
中没有显示命令。
5.调试过程
1.
分析错误原因:
由于题目中给出的数字4,-2,-6,0,5,67,8,-3,5,6,实际只有6个正数,所以上述的程序有误,且因为这几个数其中含有有符号数,要把程序中的JBE改为JLENEXTNEXT
改正后:
2.
分析错误原因:
由于没有使SI指向下一个字符的指令,所以要在NEXT:
LOOPL1前加指令INCSI。
改正后如图:
3.
编程并运行后结果为如图:
6.实验结果
1.M中的结果为6
2.修改程序后得到正确的试验结果
3.编写程序并运行,实验结果与实际十个字节数中的0个数一致。
7.试验总结
通过本次的上机操作我掌握了学习调试程序,查找逻辑错误的方法,和分支语句的编程和调试,也学习了循环语句的编程和调试的步骤。
附录:
3.DSEGSEGMENT
BUFDB4,0,0,0,5,67,8,-3,5,6
RESULTDB?
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVCX,10
MOVAL,0
LEASI,BUF
L1:
MOVBL,[SI]
CMPBL,0
JNZNEXT
INCAL
NEXT:
INCSI
LOOPL1
MOVresult,AL
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
福建农林大学金山学院实验报告
系:
专业:
年级:
姓名:
学号:
实验课程:
汇编语言
实验室号:
_____实验设备号:
实验时间:
2012-05-21
指导教师签字:
成绩:
实验四子程序设计
1.实验目的和要求
1、学习子程序的编写,主子程序的调用
2、不同模块间程序的调用和调试
2.实验环境
实验的硬件环境是:
IBM—PC机及其兼容机
实验的软件环境是:
操作系统:
DOS2.0以上;调试程序:
DEBUG.COM;文本编程程序:
EDIT.EXE、WPS.EXE;宏汇编程序:
MASM.EXE(或ASM.EXE);连接装配程序:
LINK.EXE;交叉引用程序:
CREF.EXE(可有可无)。
3.实验内容及实验数据记录
1、数据段中的3个字符,调用子程序将其逐个显示出来。
子程序的功能是显示一个字符。
单步执行,观察IP的变化
DATASEGMENT
MAGDB‘ABC’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,0
MOVCX,3
LL:
MOVDL,MAG[SI]
CALLMADD
INCSI
LOOPLL
MOVAH,4CH
INT21H
MADDPROC
MOVAH,02H
INT21H
RET
MADDENDP
CODEENDS
ENDSTART
2、阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。
具体步骤如下:
MASMS31.ASM(分别汇编)
MASMS32.ASM
LINKS31S32(将两个文件连接成为一个文件名为S31)
S31.EXE(运行)
3、编程:
利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来。
(也可以将找到的不相等字符逐个显示,用INT21H的02功能调用)
4、编程:
子程序搜索指定字符缓冲区中是否有n,如果有用y替代。
调用子程序将BUF1,BUF2,BUF3中的n全部用y替代
4.算法描述及实验步骤
1用doss运行改程序,用反汇编跟踪如下
Call指针指向了0019,movah,02
分布跟踪如下
可以看出ret后ip指向了0012,sp又回到了栈底,证实了call调用子程序是通过堆栈保护了现场进入子程序,之后在通过ret恢复了原状。
2.按要求把s31s32分别汇编连接形成一个s31.exe文件,如下
3在doss下运行一下程序
DATASEGMENT
BUF1DB'HapBneVerndan!
'
LEN=$-BUF1
BUF2DB'Happneverndan!
'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,buf1
leadi,buf2
movcx,len
callcmpp
MOVAH,4CH
INT21H
;子程序名cmpp
;功能:
比较两缓冲区中不相等的字符,并输出
;入口参数:
buf1首地址SI,buf2首地址di,循环比较次数CX
;占用寄存器:
dl
cmppPROCNEAR;子程序
l1:
movdl,[si]
cmpdl,[di]
jznext
movah,02h
int21h
next:
incsi
incdi
loopl1
RET;子程序返回
cmppENDP
CODEENDS
ENDSTART
改程序实现了,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来。
4.编写一下程序实现子程序搜索指定字符缓冲区中是否有n,如果有用y替代。
调用子程序将BUF1,BUF2,BUF3中的n全部用y替代
DATASEGMENT
BUF1DB'Everndoghashisdan!
',0ah,0dh,'$'
LEN1=$-BUF1
BUF2DB'Happneverndan!
','$'
LEN2=$-BUF2
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,BUF1
MOVCX,LEN1
CALLCMMP
LEASI,BUF2
MOVCX,LEN2
CALLCMMP
MOVAH,4CH
INT21H
;子程序的功能:
搜索字符串中是否有N字符,如果有用Y替代,并显示字符串
;入口参数为字符串偏移地址SI,字符串长度CX
;将要显示的字符串的偏移地址送DX,用于显示字符串。
这句应在子程序的开始,因为下面
;;语句会改变SI的值
CMMPPROC
MOVDX,SI
CMP1:
CM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 福建 农林 大学 汇编语言 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)