汇编语言实验指导书.docx
- 文档编号:20113640
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:53
- 大小:51.76KB
汇编语言实验指导书.docx
《汇编语言实验指导书.docx》由会员分享,可在线阅读,更多相关《汇编语言实验指导书.docx(53页珍藏版)》请在冰豆网上搜索。
汇编语言实验指导书
汇编语言实验指导书
前言
汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法。
汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。
本实验指导书按照汇编语言程序设计的教学大纲要求编写。
依据循序渐进、由浅入深的规律,通过实例复习巩固所学知识,借助实例开展汇编语言程序设计。
通过这种既具有构造性又具有创造性的学习活动,更便于初学者的理解和掌握,通过上机实验,并在实验后完成实验报告,又能进一步加深和拓宽所学知识。
为了帮助老师和学生开展实验,我们特编了这本实验指导书,希望能对我校的《汇编语言》教学工作有所帮助。
本实验指导书所有实例均在PC机上调试通过。
目录
实验1利用DEBUG调试汇编语言程序段………………………………………54
实验4汇编语言程序上机过程63
实验5分支程序实验……………………………………………………………...65
实验6循环程序实验……………………………………………………………...68
实验7子程序实验……………………………………………………………….69
实验8 字符处理程序实验…………………………………………………………73
实验9排序程序设计77
实验1利用DEBUG调试汇编语言程序段
一.实验目的
1.熟悉DEBUG有关命令的使用方法;
2.利用DEBUG掌握有关指令的功能;
3.利用DEBUG运行简单的程序段。
二.实验内容
1.进入和退出DEBUG程序;
2.学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。
对于U命令、N命令、W命令等,也应该试用一下;
3.用DEBUG,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。
三.实验要求
1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;
2.作为例子,准备用A命令,输入在显示器上显示字符“$”的系统调用程序段;
3.编写将AX左移9位的程序段。
四.实验环境
PC微机
DOS操作系统或Windows操作系统
MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境
五.实验步骤
1.在DOS提示符下,进入DEBUG程序;
2.在DOS目录下启动DEBUG;
3.详细记录每一步所用的命令,以及查看结果的方法和具体结果。
六.实验报告要求
1.如何启动和退出DEBUG程序;
2.整理每个DEBUG命令使用的方法,实际示例及执行结果。
七.思考题
启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?
实验2初级程序的编写与调试实验
(一)
一.实验目的
1.进一步熟悉DEBUG命令;
2.掌握数据在内存中的存放方式和内存操作数的几种寻址方式,段寄存器和物理地址计算;
3.熟悉数据传送指令、算术运算指令、逻辑指令、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP;
4.掌握简单的汇编语言程序编写与调试。
二.实验内容
1.内存操作数及各种寻址方式使用;
2.求累加和程序;
3.多字节加法程序;
4.数据串搬家程序;
5.段寄存器概念及字符串传送指令练习。
三.实验要求
1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;
2.阅读数据传送指令、算术运算指令、逻辑指令、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP的内容;
3.用DEBUG的有关命令调试本实验中的求累加和程序、多字节加法程序、数据串搬家程序段。
四.实验环境
PC微机;
DOS操作系统或Windows操作系统;
MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境。
五.实验步骤
1.内存操作数及各种寻址方式使用
MOVAX,1234
MOV[1000],AX
MOVBX,1002
MOVBYTEPTR[BX],20
MOVDL,39
INCBX
MOV[BX],DL
DECDL
MOVSI,3
MOV[BX+SI],DL
MOV[BX+SI+1],DL
MOVWORDPTR[BX+SI+2],2846
步骤:
(1)用A命令键入上述程序,并用T命令逐条运行。
(2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。
注意D命令显示结果中右边的ASCII字符及双字节数存放法。
2.求累加和程序:
程序:
MOVBX,1000
MOVCX,10
SUBAX,AX
LOP:
ADDAL,[BX]
ADCAH,0
INCBX
J:
LOOPLOP
INT3
步骤:
(1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替;
(2)用命令NAA将此程序命名为文件AA(文件名可任取);
(3)用R命令将BX:
CX改为程序长度值(即最后一条指令后面的地址减去开始地址;
(4)用命令W100将此程序存到AA命名的磁盘文件中;
(5)用命令Q退出DEBUG;
(6)用命令DEBUGAA再次调入DEBUG和文件AA,可用U命令检查调入程序;
若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入;
(7)用E命令在内存地址1000H处键入16个数字;
(8)用命令G=100J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值;
(9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错;
(10)重复G、J与T,再检查AX是否正确;
(11)用G命令使程序运行到结束,检查AX值是否正确。
3.多字节加法程序
程序:
MOVDI,1000
MOVCX,8
MOVSI,2000
CLC
LOP:
MOVAL,[SI]
ADC[DI],AL
INCSI
INCDI
LOOPLOP
INT20
步骤:
(1)用命令键入此程序
(2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。
4.数据串搬家程序
(1)用A命令键入下列程序:
MOVSI,1000
MOVDI,1500
MOVCX,0FH
LOP:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPLOP
INT20
(2)用A命令DB伪指令在1000H键入下列字符串:
‘IBM_PCCOMPUTER'
(3)用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。
5.段寄存器概念及字符串传送指令练习
(1)用A命令键入下列程序:
MOVSI,0
MOVDI,0
MOVAX,1000
MOVDS,AX
MOVAX,1500
MOVES,AX
MOVCX,0F
CLD
REPMOVSB
INT20
(2)用A命令DB伪指令在1000:
0000处键入字符串'IBM_PCCOMPUTER',并用D命检查之
(3)用D命令检查0F00:
1000处内容,看是否一样。
为什么?
(4)用G命令运行此程序,检查目的地址1500:
0000处内容。
并记下DS与ES值。
(5)修改此程序,使ES与DS为同一值,以减少一条指令,而源物理地址和目的物理地址(是多少?
)仍和原来一样。
6.自编程序
用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同多字节加法程序,调试并做记录。
六.实验报告要求
1.各项实验记录;
2.要求你修改的程序的清单(修改后)和调试记录;
3.自编程序原稿及调试后修正稿,写出原稿错在那里。
七.思考题
1.MOVBYTEPTR[BX],20
MOVWORDPTR[BX+SI+2],2846
上述指令中BYTEPTR及WORDPTR伪操作不加行不行?
试一试。
2.用G命令运行多字节加法程序,并用D命令检查其结果(存放在哪里?
),是否正确?
3.将多字节加法程序中的INT20H指令改为INT3,有何区别?
若这条指令不加,行不行?
试一试。
4.数据串搬家程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?
修改程序以做到这一点。
实验3初级程序的编写与调试实验
(二)
一.实验目的
1.掌握无条件转移指令、条件转移指令;
2.掌握利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法;
3.掌握直接向视频RAM送ASCII码进行屏幕显示的方法;
4.掌握屏幕字符显示程序编写与调试。
二.实验内容
1.字符、字符串的屏幕显示;
2.直接向VRAM送ASCII码显示字符;
3.用字符搜索法确定字符串长度;
4.16进制数化ASCII码的一般方法(显示内存内容)。
三.实验要求
1.仔细阅读有关无条件转移指令、条件转移指令的内容;
2.阅读利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的内容;
3.阅读实验指导书中的字符串屏幕显示程序、字符屏幕显示程序、直接向VRAM送ASCII码显示字符程序、用字符搜索法确定字符串长度程序、16进制数化ASCII码的一般方法的程序段,调试上述程序。
四.实验环境
PC微机;
DOS操作系统或Windows操作系统;
MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境。
五.实验步骤
1.利用INT210AH号功能调用显示字符串。
(1)用A命令在100H处键入下列程序:
MOVAH,9
MOVDX,110
INT21
INT20
(2)用A命令在110H处键入下列字符串的ASCII码:
DB'Thisisasample!
$'
(3)用N命令和W命令将此程序(包括数据区)存入文件名为AA.OM的磁盘文件中。
(存入前BX:
CX必须置为文件长度值)。
(4)用Q命令退出DEBUG。
(5)在DOS命令下打AA,运行此程序,即在屏幕上显示'Thisisasample!
'字符串,若不出现,用DEBUG检查程序有无错误。
2.利用INT21H2号功能显示字符
(1)用A命令在100H处键入下列程序:
XORDL,DL
MOVCX,100
LOP:
MOVAH,2
INT21
INCDL
PUSHCX
MOVCX,8
DELY:
PUSHCX
MOVCX,0
J:
LOOPJ
POPCX
LOOPDELY
POPCX
LOOPLOP
INT20
(2)用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。
仔细观察每个字符,和IBM-PCASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?
(3)按CTRL+BREAK退出此程序,若一次不行可多做几次。
3.直接向VRAM送ASCII码显示字符
(1)用A命令在100H处键入下列程序
MOVAX,B000
MOVDS,AX
XORAL,AL
XORBX,BX
MOVCX,100
LOP:
MOV[BX],AL
INCBX
INCAL
PUSHCX
MOVCX,8
DELY:
PUSHCX
MOVCX,0
J:
LOOPJ
POPCX
LOOPDELY
POPCX
LOOPLOP
INT20
(2)用N命令和W命令将此程序存入BB.COM文件中。
(一定要先存入!
)
(3)用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT21H2号功能调用有何不同?
4.用字符搜索法确定字符串长度
(1)用A命令在100H开始的内存处键入下列程序
JMPSTART
DB'Thisistheprogramtomeasure'
DB'thelengthofastring!
$'
START:
MOVBX,102
MOVAL,24
XORCL,CL
LOP:
CMPAL,[BX]
JZEXIT
INCBX
INCCL
JMPLOP
EXIT:
INT3
(2)用G命令运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样?
5.用字符搜索法确定字符串长度
(1)用A命令在100H处键入下列程序:
MOVSI,0
MOVBL,10
LOP:
MOVDL,[SI]
MOVCL,4
SHRDL,CL
CMPDL,0A
JCJ1
ADDDL,7
J1:
ADDDL,30
MOVAH,2
INT21
MOVDL,[SI]
ANDDL,0F
CMPDL,0A
JCJ2
ADDDL,7
J2:
ADDDL,30
MOVAH,2
INT21
MOVDL,20
MOVAH,2
INT21
INCSI
DECBL
JNZLOP
INT20
(2)用N,W命令将此程序用CC.COM文件名存入磁盘。
(3)用Q命令退出DEBUG。
(4)在DOS命令状态下直接运行CC.COM命令文件,应在屏幕上显示出内存从0000H开始的16个字节的内容,若有错误,用DEBUG检查之。
(5)自编程序:
修改上面程序,使除以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用'.'代替。
六.实验报告要求
1、各项实验记录及观察体会。
2、自编程序草稿及调试结果。
七.思考题
利用INT21H显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?
实验4汇编语言程序上机过程
一.实验目的
熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。
了解汇编语言程序的汇编、运行环境。
二.实验内容
1.掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用;
2.伪指令:
SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;
3.利用的INT21H的1号功能实现键盘输入的方法;
三.实验要求
1.仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容;
2.了解利用的INT21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT21H4C号功能返回系统的方法;
3.阅读下面程序段。
四.实验环境
PC微机
DOS操作系统或Windows操作系统
MASM。
EXE,LINK。
EXE,DEBUG。
COM或宏汇编集成环境
五.实验步骤
程序:
datasegment
messagedb'Thisisasampleprogramofkeyboardanddisply'
db0dh,0ah,'Pleasestrikethekey!
',0dh,0ah,'$'
dataends
stacksegmentparastack'stack'
db50dup(?
)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movdx,offsetmessage
movah,9
int21h
again:
movah,1
int21h
cmpal,1bh
jeexit
cmpal,61h
jcnd
cmpal,7ah
jand
andal,11011111b
nd:
movdl,al
movah,2
int21h
jmpagain
exit:
movah,4ch
int21h
codeends
endstart
实验步骤:
1.用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。
2.用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3.用TYPE命令显示1产生的.LST文件。
4.用LINK将.OBJ文件连接成可执行的.EXE文件。
5.在DOS状态下运行LINK产生的.EXE文件。
即在屏幕上显示标题并提示你按键。
每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。
按ESC键可返回DOS。
若未出现预期结果,用DEBUG检查程序。
六.实验报告要求
汇编,连接及调试时产生的错误,其原因及解决办法。
七.思考题
1.若在源程序中把INT21H的'H'省去,会产生什么现象?
2.把INT21H4CH号功能改为INT20H,行不行?
实验5分支程序实验
一.实验目的
1.掌握分支程序的设计方法;
2.掌握利用DEBUG修改参数、检查结果的方法;
3.熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
二.实验内容
1.编写一个程序,显示AL寄存器中的两位十六进制数
2.编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符
三.实验要求
1.编写实验内容要求的两个程序;
2.写出调试以上程序,即修改程序参数,检查结果的操作方法;
3.熟悉源程序汇编、连接命令的使用方法即要回答的内容。
四.实验环境
PC微机
DOS操作系统或Windows操作系统
MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境
五.实验步骤
1.用EDIT或其它编辑软件,编写.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM。
2.对其进行汇编及连接,产生.EXE文件。
3.对.EXE文件进行调试运行。
(1)用DEBUG调试运行,学会修改AL内容的方法;
(2)对DSPKEY.EXE键入不同的字符,分别进行调试;
(3)在MS-DOS下运行这两个.EXE文件。
六.实验报告要求
1.画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
2.说明本实验是如何利用DEBUG进行调试的。
七.思考题
编写显示AX中四位十六进制数程序,画出程序的流程图。
实验参考程序清单
(1) 显示AL中两位十六进制数程序:
;DISPHEX.ASM
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,3EH
MOVBL,AL
MOVDL,AL
MOVCL,4
SHRDL,CL
CMPDL,9
JBENEXT1
ADDDL,7
NEXT1:
ADDDL,30H
MOVAH,2
INT21H;显示高位ASCII码
MOVDL,BL
ANDDL,0FH
CMPDL,9
JBENEXT2
ADDDL,7
NEXT2:
ADDDL,30H
MOVAH,2
INT21H;显示低位ASCII码
MOVAH,4CH
INT21H
CODEENDS;返回DOS
ENDSTART
(2) 显示键入字符程序
;DISPKEY.ASM
CODESEGEMENT
ASSUMECS:
CODE
START:
MOVAH,1
INT21H;等待键入字符,送AL
CMPAL,0DH;是否是回车符?
JZDONE;是则转DONE退出程序
CMPAL,’0’
JBNEXT
CMPAL,’9’
JACHARUP
MOVDL,AL
MOVAH,2
INT21H
JMPSTART
CHARUP:
CMPAL,41H
JBNEXT
CMPAL,5AH
JACHRDN
DISPC:
MOVDL,’C’
MOVAH,2
INT21H
NEXT:
JMPSTART
CHRDN:
CMPAL,61H
JBNEXT
CMPAL,7AH
JANEXT
JMPDISPC
DONE:
MOVAH,4CH
INT21H
CODE:
ENDS
ENDSTART
实验6循环程序实验
一.实验目的
1.掌握循环程序的设计方法;
2.学会针对不同的问题,选用不同的组织循环的方法;
3.进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。
二.实验内容
1.编写一个程序,显示BX寄存器中的两位十六进制数;
2.编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符
三.实验要求
1.编写实验内容要求的两个程序;
2.写出调试以上程序,即修改程序参数,检查结果的操作方法;
3.熟悉源程序汇编、连接命令的使用方法即要回答的内容。
四.实验环境
PC微机
DOS操作系统或Windows操作系统
MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境
五.实验步骤
1.用EDIT或其它编辑软件,编写.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM;
2.对其进行汇编及连接,产生.EXE文件;
3.对.EXE文件进行调试运行。
(1)用DEBUG调试运行,学会修改AL内容的方法;
(2)对DSPKEY.EXE键入不同的字符,分别进行调试;
(3)在MS-DOS下运行这两个.EXE文件。
六.实验报告要求
画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
七.思考题
编写一循环程序,测量一字符串长度,并用16进制数显示之。
实验7子程序实验
一.实验目的
1.掌握主程序与子程序之间的调用关系及调用方法;
2.掌握子程序调用过程中近程调用与远程调用的区别;
3.掌握通过堆栈转送参数的方法。
二.实验内容
1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。
要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。
2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。
三.实验要求
1.第一个实验程序用子程序的近程调用实现。
由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。
实验
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 指导书