汇编语言实验汇总福建农林大学最新文档格式.docx
- 文档编号:16981340
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:58
- 大小:760.38KB
汇编语言实验汇总福建农林大学最新文档格式.docx
《汇编语言实验汇总福建农林大学最新文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言实验汇总福建农林大学最新文档格式.docx(58页珍藏版)》请在冰豆网上搜索。
实验时间:
指导教师签字:
成绩:
实验一汇编程序的汇编及运行
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
CODESENDS
ENDSTART
4.算法描述及实验步骤
实验1:
新建1.txt文件->
输入代码->
在CMD中编译
实验2:
新建2.txt文件->
在CMD中编译-改错
实验3:
新建3.txt文件>
在CMD中编译->
连接->
运行->
输出
5.调试过程
无
6.实验结果
【实验1】
分析:
有上图可知,DA1,DA2的偏移量分别是00200026COUNT的值0008
【实验2】
由上图可知有9个severeerrors错误信息如下
改错:
(1)VAR1DB0,25,ODH,300超过一个字节,改为小于25的数即可
(2)VAR2DB12H,A4H,6BH将A4H改为0A4H
(3)ASSUMECS:
DATA将DE改为DS
(4)BEGIN后面要加冒号
(5)MOV[SI],0ABH立即数送内存单元要指定字节或字,如前面加BYTEPTR
(6)MOVAX,VAR1+2字节数据不能送字寄存器
(7)MOV[BX],[SI]内存单元不能传送数据
(8)ENDSTART应改为ENDBEGIN
【实验3】
3.1汇编
3.2链接
3.3运行,输出WELCOME!
如下图
7.总结
通过此次实验,掌握了用masm+文件名(含扩展名)命令来编译程序,link+文件名命令来链接生成exe文件,熟悉了代码指令的修改及编译指令的规范准则,为以后进一步学习打下基础。
计算机专业:
计算机年级:
实验室号__计算机号
2016-10-24指导教师签字:
刘庆连成绩:
实验二DEBUG的使用
(1)学习使用DEBUG的命令;
(2)使用DEBUG命令在数据段中查看程序运行的结果;
(3)利用DEBUG运行简单的程序段。
操作系统:
1)输入程序观察寄存器变化使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。
注意用T命令执行时,CS:
IP寄存器的内容
使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。
MOVAX,4E20
ADDAX,1416
MOVBX,2000
ADDAX,BX
MOVBX,AX
MOVAX,001A
MOVBX,0026
ADDAL,BL
ADDAH,BL
ADDBH,AL
MOVAH,0
ADDAL,9C
2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。
如果是将小写字母改成大写字母带注释的语句该如何修改?
DSEGSEGMENT
MSG1DB‘abc’
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
LEABX,MSG1
MOVCX,3
S:
MOVAL,[BX]
ANDAL,11011111B;
将AL中的ASCII码的第5位置0,
;
变成大写字母。
MOV[BX],AL
INCBX
LOOPS
MOVAL,0
CSEGENDS
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单元中,偏移地址为?
值为多少?
MSG1DW7856H,2038H
MSG2DW?
MOVDS,AX
MOVAX,MSG1
ANDAX,MSG1+2
MOVMSG2,AX
3.编写调试下面的程序,用DEBUG查看数据段中的结果
1)
,X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。
2)X,Y为字节类型数,求
,写出完整的数据段和代码段,不用乘除指令。
【实验一】输入程序观察寄存器变化
步骤:
win+R调出运行窗口->
在打开中输入cmd->
确定->
进入masm5的目录下运行debug->
debug命令窗口->
输入-a开始输入命令->
依次输入以下代码并按enter键结束->
之后输入-t观察每条指令执行后各寄存器的变化.
【实验二】程序单步运行
与实验一同理,在masm5forwindows软件中输入要求指令代码->
调试->
输入-t观察个寄存器结果变化
【实验三】两数相与操作
【实验四】编写调试程序
步骤:
按要求即可
2)X,Y为字节类型数,求
(1)刚开始使用masm5指令不熟悉,在目标操作数和源操作数之间少了“,”号导致出错,如下图
(2)定于的数据x,y必须有值才能编译成功.
6.实验结果
实验一【输入程序观察寄存器变化】
用-a输入指定指令及用–t步骤执行结果如下图
【实验二】
2.1使用masm5forwindows2015软件并输入代码如下
2.2调试结果–t步骤执行观察,结果是将存储在DS中的abc依次换成ABC,即大小写的切换,执行主要结果如下图
如果将小写字母改成大写字母则应做如下变化
ANDAL,11011111B替换成ORAL,00100000B代码如下图
运行结果如下图(大写变小写)
实验三【两数相与】
-T分步执行结果如下图
有下图可知偏移地址:
0004;
值:
2010
实验四【编写程序】
代码如下图所示
调试主要结果如下图,即(Z=(2-1)*10+5)/(1+2)Z的结果是5和al中的结果为5与预期一致.
由图可知道,运算结果确实为5并将结果存放Z
Z=((2+1)*8-(2-1)*2)/16=1(al).....6(余数)并存与Z
执行结果如下图
通过本实验,首先就是掌握了masm5以及masm5forwindows2015的基本使用,能通过debug工具来进行编译指令和执行指令,对一些指令有了些了解,能通过-t步骤执行来理解汇编指令的具体含义及其相应寄存器中的数据变化,能自己手动输入编译指令来对基本的运算进行演示和观察相应的结果,总之,此次实验让我受益匪浅,为以后进一步学习汇编打下基础
附录:
代码
(1)
,X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段如下
DATASSEGMENT
xdb1
ydb2
wdb2
zdb?
DATASENDS
STACKSSEGMENT
;
此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVAL,W
SUBAL,X
MOVBH,10
MULBH
ADDAX,5
MOVBL,X
ADDBL,Y
DIVBL
MOVZ,AL
MOVZ+1,AH
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
(2)X,Y为字节类型数,求
xdb2
ydb1
moval,x
addal,y
movcl,3
shlal,cl
movbl,x
subbl,y
movcl,1
shlbl,cl
subal,bl
movcl,4
shral,cl
movz,al
movz+1,ah
ENDSTART
指导教师签字:
实验三分支循环程序设计
1.实验目的
(1)学习调试程序,查找逻辑错误;
(2)学习分支语句的编程和调试;
(3)学习循环语句的编程和调试。
2.实验内容
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
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
3)编程:
在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。
4)编程:
,Ai,Bi为字节型无符号数,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。
实验一:
输入题目代码->
保存->
观察结果(在Masmforwindows在完成)
实验二:
根据代码实现功能从MSG中输入五个数,AL取第一个数,SI取第二个数,比较AL,SI所取到的数的大小,若AL<
SI,SI取第三个数,再和AL比较;
若AL>
SI,AL=[SI];
将AL的内容输出,则得出输出五个数中的最小数,步骤同实验一
实验三:
依题可编写如下代码指令
实验四:
【实验一】
分步执行结果如下
分析:
当将第二个数-2放入放入BL的时候发现数值是FE,转化为十进制数是254,并非是-2的十六进制,原因是JBE命令是用于无符号数的,指令说明如下,要实现有符号数的比较要使用JLE指令
JBE指令说明JLE指令说明
进入死循环,原因是两个数比较后,SI没有加1,一直停留在13和15的比较中,修改加入INCSI即可,如下图
【实验三】
执行结果如下
分析,BUL中4,-2,-6,0,5,67,8,-3,5,60的个数是1,实验结果与预期一致
【实验四】
结果如下图
Ai:
10,45和Bi:
8,2的
结果是10*8+45*2=170转化为16进制是AA,有上图可知实验结果和预期一致!
通过此次实验,能够通过简单调试查找出错误,分步执行发现逻辑错误并改正,掌握并理解了分支语句的运用和循环语句的使用,纸上得来终觉浅,绝知此事要躬行,多多手动敲代码才能理解并掌握汇编的实质!
!
题3代码
DSEGSEGMENT
BUFDB4,-2,-6,0,5,67,8,-3,5,6
RESULTDB?
LEASI,BUF
JNENEXT
MOVRESULT,AL
题4代码
DATASEGMENT
NUM1DB10,45
NUM2DB8,2
RESTDW?
DATAENDS
CODESEGMENT
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,NUM1
LEADI,NUM2
MOVCX,10
MOVBX,0
L1:
MOVAL,[SI]
MULBYTEPTR[DI]
ADDBX,AX
INCSI
INCDI
LOOPL1
MOVREST,BX
MOVAH,4CH
INT21H
CODEENDS
实验四子程序设计
1.实验目的
(1)学习子程序的编写,主子程序的调用;
(2)不同模块间程序的调用和调试。
1)数据段中的3个字符,调用子程序将其逐个显示出来。
子程序的功能是显示一个字符。
单步执行,对CALL语句和RET语句观察SP,IP的变化,并用D命令查看栈顶的内容。
DATASEGMENT
MAGDB‘ABC’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
MOVAX,DATA
MOVSI,0
LL:
MOVDL,MAG[SI]
CALLMADD
INCSI
LOOPLL
MOVAH,4CH
INT21H
MADDPROC
MOVAH,02H
RET
MADDENDP
CODEENDS
ENDSTART
2)阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。
具体步骤如下:
MASMS31.ASM(分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 汇总 福建 农林 大学 最新
![提示](https://static.bdocx.com/images/bang_tan.gif)