PC汇编语言实验报告.docx
《PC汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《PC汇编语言实验报告.docx(55页珍藏版)》请在冰点文库上搜索。
PC汇编语言实验报告
实验报告
实验课程:
IBM-PC汇编语言程序设计
学生姓名:
学号:
专业班级:
2011年12月15日
汇编语言实验指导
前言
汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法。
汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。
本实验指导按照汇编语言程序设计的教学大纲要求编写。
依据循序渐进、由浅入深的规律,通过实例复习巩固所学知识,借助实例开展汇编语言程序设计。
通过这种既具有构造性又具有创造性的学习活动,更便于初学者的理解和掌握,通过上机实验,并在实验后完成实验报告,又能进一步加深和拓宽所学知识。
为了帮助老师和学生开展实验,我们特编了这本实验指导,希望能对我校的《汇编语言》教学工作有所帮助。
本实验指导所有实例均在PC机上调试通过。
(1)利用DEBUG调试汇编语言程序段
(2)初级程序的编写与调试实验
(一)
(3)初级程序的编写与调试实验
(二)
(4)汇编语言程序上机过程
(5)分支程序实验
(6)循环程序实验
(7)子程序实验
实验1利用DEBUG调试汇编语言程序段
一.实验目的
1.熟悉DEBUG有关命令的使用方法;
2.利用DEBUG掌握有关指令的功能;
3.利用DEBUG运行简单的程序段。
二.实验内容
1.进入和退出DEBUG程序;
1)开始—运行,输入cmd,点确定进入命令窗口
2)在命令窗口中输入dubug进入debug程序
3)进入debug窗口后,输入q命令退出debug
2.学会DEBUG中的
1)D命令(显示内存数据D段地址:
偏移地址)
例1:
-D100;显示DS段,0100开始的128个字节内容
说明:
指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。
1DSEGREG[起始地址][L长度]
;显示SEGREG段中(缺省内默认为DS),以[起始地址](缺省内为当前的偏移地址),开始的[L长度](缺省内默认为128)个字节的内容.
2DSEGREG[段地址:
偏移地址]
;显示SEGREG段中(缺省内默认为DS),[段地址:
偏移地址]开始的[L长度](缺省内默认为128)个字节内容
-D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H)
-DDS:
100;显示DS段,0100H开始的128个字节内容
-DCS:
200;显示CS段,0200H开始的128个字节内容
-D200:
100;显示DS段,0200:
0100H开始的128个字节内容
-D200;显示DS段,0200H开始的128个字节内容
-D100L10;显示DS段,100H开始的100H个字节内容
2)E命令(修改指定内存)
例1:
-E1004142434448474645
-D100,L08
结果:
08F1:
01004142434448474645
例2:
-E100:
08F1:
01007642:
42是操作员键入
此命令是将原100号内存内容76修改为42,用D命令可察看。
①E地址 ;从指定地址开始,修改(或连续修改)存储单元内容。
DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。
②E地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。
-EDS:
100F3‘AB’8D;把DS段中0100H开始的四个字节修改为F3‘AB’(A和B的ASCII码)8D
也可以按下面的方式实现
3)R命令(显示当前寄存器的内容)
显示修改寄存器命令R
R;★显示所有寄存器和标志位状态;
★显示当前CS:
IP指向的指令。
显示标志时使用的符号:
标志 标志=1 标志=0
OF OV NV
DF DN UP
IF EI DI
SF NG PL
ZF ZR NZ
AF AC NA
PF PE PO
CF CY NC
4)T命令(设置陷井,单步执行)
①T;从当前IP开始执行一条指令。
②T数值;从当前IP开始执行多条指令,数值:
执行的指令条数。
②T=地址;从给定的地址执行一条指令
③T=地址 数值;从给定的地址执行多条指令,数值:
执行的指令条数.
-T;从当前IP开始执行一条指令
-T5;从当前IP开始执行5条指令
-T=100 5;从当前0100H开始执行5条指令
5)A命令(将指令直接汇编成机器码输入到内存中。
)
汇编命令A
A[地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:
IP开始(通常是CS:
100)。
注释:
①在DEBUG下编写简单程序即使用A命令。
②每条指令后要按回车。
③不输入指令按回车,或按Ctrl+C结束汇编。
④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。
使用A命令在0100H开始输入指令movax,10inccxmovbl,al
单步执行上述指令
6)G命令等的使用(执行A命中输入的汇编指令)
运行程序命令G
①G;从CS:
IP指向的指令开始执行程序,直到程序结束或遇到INT3。
②G=地址;从指定地址开始执行程序,直到程序结束或遇到INT3。
③G断点1[,断点2,…断点10];从CS:
IP指向的指令开始执行程序,直到遇到断点。
④G=地址 断点1[,断点2,…断点10]
-G;从CS:
IP指向的指令开始执行程序。
-G=100;从指定地址开始执行程序。
-G=100105110120
使用A命令在0100H开始输入指令movax,10inccxmovbl,alint3
然后使用g命令执行
上面的例子设断点在100H处然后用T命令单步执行
3.用DEBUG,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。
三.实验要求
仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;
四.实验环境
PC微机
DOS操作系统或Windows操作系统
MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境
五.实验步骤
用DEBUG验证乘法、除法、加法、减法带进位加、带借位减、堆栈操作指令、串操作指令的功能:
1.验证加法和带进位加,使用A命令,在DEBUG中键入以下代码:
movax,f111
movbx,f222
movcx,2
movdx,3
addax,bx
adccx,dx
使用G命令查看结果
2.验证减法和带借位减法,使用A命令,在DEBUG中键入以下代码:
movax,2
movbx,3
movcx,5
movdx,2
subax,bx
sbbcx,dx
使用G命令查看结果
3.验证乘法和除法,使用A命令,在DEBUG中键入以下代码:
乘法:
moval,b4
movbl,11
mulbl
使用G命令查看结果
除法:
movax,400
movbl,b4
divbl
使用G命令查看结果
4.验证堆栈操作指令,使用A命令,在DEBUG中键入以下代码:
movax,1111
pushax
movax,2222
使用G命令查看结果后在使用A命令,在DEBUG中键入以下代码:
popax
使用G命令查看结果
5.验证串操作指令,使用A命令,在DEBUG中键入以下代码:
org1000
db‘hello’
movsi,1000
movdi,1500
movcx,5
cld
repmovsb
使用G命令查看结果
六.实验报告要求
1.如何启动和退出DEBUG程序;
2.整理每个DEBUG命令使用的方法,实际示例及执行结果。
七.思考题
启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?
答:
进入DOS,输入DEBUGxxx.exe,其中xxx为文件名。
实验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,2000
MOVCX,0F
LOP:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPLOP
INT20
(2)用A命令DB伪指令在1000H键入下列字符串:
‘IBM_PCCOMPUTER'
(3)用G命令运行此程序,并用D命令检查目的地址处的字符与源串a是否一致。
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开始的地方去?
修改程序以做到这一点。
MOVSI,100E
MOVDI,1010
MOVCX,0F
LOP:
MOVAL,[SI]
MOV[DI],AL
DECSI
DECDI
LOOPLOP
INT20
或者
DB‘IBM_PCCOMPUTER’
MOVSI,100E
MOVDI,1010
MOVAX,137E
MOVES,AX
MOVCX,0F
STD
REPMOVS
INT20
实验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.CcOM的磁盘文件中。
(存入前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的统计长度是否与你自己统计的实际长度是否一样?
CL的统计长度与实际长度相等,均为35H
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的控制字符用'.'代替。
答:
在DOS下输入DEBUGCC.COM打开程序,从最后一条指令INT20(包括该指令)开始修改,修改方法如下:
MOVCX,10
MOVSI,0
J3:
MOVDI,[SI]
MOVAH,2
CMPDL,0D
JBEJ5
J4:
INT21
INCSI
DECCX
JNZJ3
INT20
J5:
CMPDL,07
JNBJ4
MOVDL,2E
JMPJ4
六.实验报告要求
1、各项实验记录及观察体会。
2、自编程序草稿及调试结果。
七.思考题
利用INT21H显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?
答:
利用INT21H显示时,07H-0DH的控制符会用笑脸之类的符号显示;直接向VRAM送ACSII码时,07H-0DH的控制符不显示。
实验4汇编语言程序上机过程
一.实验目的
熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。
了解汇编语言程序的汇编、运行环境。
二.实验内容
1.掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用;
2.伪指令:
SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;
3.利用的INT21H的1号功能实现键盘输入的方法;
三.实验要求
1.仔细阅读有关伪指令SEGME