微机原理实验指导书软件部分.docx
- 文档编号:10492810
- 上传时间:2023-02-14
- 格式:DOCX
- 页数:17
- 大小:30.95KB
微机原理实验指导书软件部分.docx
《微机原理实验指导书软件部分.docx》由会员分享,可在线阅读,更多相关《微机原理实验指导书软件部分.docx(17页珍藏版)》请在冰豆网上搜索。
微机原理实验指导书软件部分
实验一
一、实验名称:
常用DEBUG命令的功能及使用举例
二、实验目的:
掌握汇编语言基本运行环境和熟悉DEBUG调试程序的命令。
包括:
学习使用指令,掌握常用的指令功能和简单程序设计;掌握DEBUG调试程序的命令,熟悉程序输入、存储器和CPU寄存器及标志位的检查方法,单步、断点、连续等运行程序的调试方法。
三、实验内容:
DEBUG的主要命令功能与格式
DEBUG命令是在DEBUG提示符“-”下,由键盘键入的。
每条命令以单个字母的命令符开头,然后是命令的操作参数,操作参数与操作参数之间,用空格或逗号隔开,操作参数与命令符之间用空格隔开,命令的结束符是回车键Enter。
命令及参数的输入可以是大小写的结合。
Ctrl+Break键可中止命令的执行。
Ctrl+NumLock键可暂停屏幕卷动,按任一键继续。
所用数均为十六进制数,且不必写H。
1.汇编命令A
格式:
A[[<段寄存器名>/<段地址>:
]<段内偏移>]
上式等价于:
(1)A<段寄存器名>:
<段内偏移>
(2)A<段地址>:
<段内偏移>
(3)A<段内偏移>
(4)A
功能:
键入该命令后显示段地址和段内偏移并等待用户从键盘逐条键入汇编命令,逐条汇编成代码指令,顺序存放到段地址和段内偏移所指定的内存区域,直到显示下一地址时用户直接键入回车键返回到提示符“-”。
注:
其中
(1)用指定段寄存器的内容作段地址,(3)用CS的内容作段地址,(4)以CS:
100作地址。
以后命令中提及的各种‘地址’形式,均指
(1)、
(2)、(3)中A后的地址形式。
2.显示内存命令D
格式:
D[<地址>/<范围>]
上式等价于:
(1)D<地址>
(2)D<范围>
(3)D
功能:
以两种形式显示指定范围的内存内容。
一种形式为十六进制内容,一种形式为以相应字节的内容作为ASCII码的字符,对不可见字符以‘.’代替。
注:
其中
(1)以CS为段寄存器。
(3)显示CS:
100起始的一片内容。
3.修改内存命令E
格式:
E<地址>[<单元内容表>]
上式等价于:
(1)E<地址>
(2)E<地址><单元内容表>
其中<单元内容表>是以逗号分隔的十六进制数,或用’或”括起来的字符串,或者是二者的组合。
功能:
(1)不断显示地址,可连续键入修改内容,直至新地址出现后键入回车Enter为止。
(2)将<单元内容表>逐一写入由<地址>开始的一片单元。
4.填充内存命令F
格式:
F<范围><单元内容表>
功能:
将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。
例如:
-F5BC:
200L10B2,‘XYZ’,3C
5.执行命令G
格式:
G[=<地址>[,<断点>]]
上式等价于:
(1)G
(2)G=<地址>
(3)G=<地址>,<断点>
功能:
执行内存中的指令序列
注:
(1)从CS:
IP所指处开始执行
(2)从指定地址开始执行
(3)从指定地址开始执行,到断点自动停止。
6.内存搬家命令M
格式:
M<源地址范围><目标起始地址>
其中源及目标地址若仅输入偏移量,则隐含相对DS。
功能:
把<源地址范围>中的内容顺序搬至<目标起始地址>起的一片连续单元。
例如:
-MCS:
100110600
把从CS:
100起至CS:
110止17个字节搬至DS:
600至DS:
610的一片单元。
7.结束DEBUG返回DOS命令Q
格式:
Q
功能:
返回DOS提示符下
8.显示修改寄存器命令R
格式:
R[<寄存器名>]
上式等价于:
(1)R
(2)R<寄存器名>
功能:
(1)显示当前所有寄存器内容,状态标志及将要执行的下一指令的地址,代码及汇编语句形式。
其中对状态标志FLAG以每位的形式显示,见下表。
标志
置位符号
复位符号
溢出OF
OV(overflow)
NV(nooverflow)
方向DF
DN(down)
UP(up)
中断IF
EI(enableinterrupt)
DI(disableinterrupt)
符号SF
NG(negative)
PL(plus)
零位ZF
ZR(zero)
NZ(nozero)
辅助AF
AC(auxiliarycarry)
NA(noauxiliary)
奇偶PF
PE(parityeven)
PO(parityodd)
进位CF
CY(carry)
NC(nocarry)
(2)显示指定寄存器内容
例如:
-RAX
-RF
9.执行并显示系统环境命令T
格式:
T[=<地址>][<条数>]
功能:
执行由指定地址起始的、由<条数>指定的若干条命令。
其中<地址>的缺省值是当前IP值,<条数>的缺省值是一条。
例如:
-T
-T10
10.反汇编命令U
格式:
U[<地址>/<地址范围>]
上式等价于:
(1)U<地址>
(2)U<地址范围>
(3)U
功能:
将指定范围内的代码以汇编语句形式显示,同时显示地址及代码。
注意,反汇编时一定确认指令的起始地址后再作,否则将得不到正确结果。
地址及范围的缺省值是上次U指令后下一地址的值。
这样可以连续反汇编。
下面从几个典型例子出发,通过上机实习,引导同学们学会使用DEBUG调试程序运行汇编语言程序,以便读者在以后的学习中能够有一个熟练的调试和运行手段。
在进入DEBUG的提示符‘-’之后,用户可以通过DEBUG的命令输入汇编源程序,并用相应命令将其汇编成机器语言程序;然后调试并运行该程序。
例1在DEBUG下运行如下程序。
MOVDL,33H;字符3的ASCII码送DL
MOVAH,2;使用DOS的2号功能调用
INT21H;进入功能调用,输出‘3’
INT20H;BIOS中断服务程序,正常结束。
该程序运行结果是在显示器上输出一个字符‘3’。
如果要输出其它字符,请改变程序中‘33H’为相应字符的ASCII码。
运行步骤:
(1)进入DEBUG
屏幕显示:
-
‘-’号是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。
现在用A命令送程序如下:
(2)送程序并汇编
-A100
169C:
0100MOVDL,33
169C:
0102MOVAH,2
169C:
0104INT21
169C:
0106INT20
169C:
0108
-
至此程序已送完,汇编成机器指令,顺序存放于CS段100H起始的8个存储单元。
如果在汇编后想看一下机器指令是什么样子的话,方法之一是可以用反汇编命令U作如下操作:
(3)反汇编
-U100108
169C:
0100B233MOVDL,33
169C:
0102B402MOVAH,02
169C:
0104CD21INT21
169C:
0106CD20INT20
169C:
0108
-
右边是汇编指令,中间是该汇编指令的机器码,左边是存放该条指令的内存单元地址。
(4)运行程序
-G
3
Programterminatednormally
-
(5)送机器指令程序
-E200B233B402CD21CD20
-
(6)显示内存
-D200208
169C:
0200B233B402CD21CD20-61.3...!
..a
-
(7)执行机器指令程序
-G=200
3
Programterminatednormally
-
(8)退出DEBUG返回DOS
-Q
C:
\DOS>
例2进入DEBUG,用A命令送字节数据加法程序,用R命令显示状态,并用T命令单条执行
(1)进入并用A命令写入汇编源程序
C:
\DOS>DEBUG
-A
1392:
0100MOVAH,3
1392:
0102MOVAL,2
1392:
0104ADDAL,AH
1392:
0106INT20
1392:
0108
-
(2)用R命令显示寄存器状态
-R
AX=0000BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000DS=1392ES=1392SS=1392CS=1392IP=0100NVUPEIPLNZNAPONC
1392:
0100B403MOVAH,03
-
(3)用G命令执行,但看不到计算结果。
-G
Programterminatednormally
-
(4)用T命令单条执行,可以看到中间结果。
-T
AX=0300BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1392ES=1392SS=1392CS=1392IP=0102NVUPEIPLNZNAPONC
1392:
0102B002MOVAL,02
-T
AX=0302BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000DS=1392ES=1392SS=1392CS=1392IP=0104NVUPEIPLNZNAPONC1392:
010400E0ADDAL,AH
(5)再执行T命令,可以看到最终结果,(AL)=5
-T
AX=0305BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1392ES=1392SS=1392CS=1392IP=0106NVUPEIPLNZNAPONC
1392:
0106CD02INT20
-T
AX=0305BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1392ES=1392SS=1392CS=011CIP=1094NVUPDIPLNZNAPONC
011C:
109490NOP
-
(6)退出
-Q
C:
\DOS>
例3在DEBUG下运行下述程序,查看执行结果。
MOVAX,0FEH;被乘数0FEH送AX
MOVCL,2
SHLAX,CL;被乘数乘以4,结果送AX
MOVBX,AX;被乘数乘以4的结果送BX保留
MOVCL,2
SHLAX,CL;被乘数乘以16,结果送AX
ADDAX,BX;被乘数乘以20,结果在AX中
MOV[300H],AX;将积存入DS段第300H—301H号内存单元
MOVAH,4CH;将功能号4CH送AH
INT21H;执行DOS的4CH号功能调用,结束程序返回DOS。
该程序运行结果是将0FEH乘以14H,结果放在DS段第300H—301H号内存单元中。
(1)进入DEBUG,显示300H至301H号内存单元内容
C:
\DOS>DEBUG
-D300301
1392:
03000000..
-
(2)用A命令装入程序段并汇编
-A
1392:
0100MOVAX,0FE
1392:
0102MOVCL,2
1392:
0104SHLAX,CL
1392:
0106MOVBX,AX
1392:
0108MOVCL,2
1392:
010ASHLAX,CL
1392:
010CADDAX,BX
1392:
010EMOV[300],AX
1392:
0111MOVAH,4C
1392:
0113INT21
1392:
0116
-
(3)用G命令执行到断点处(程序正常结束前)停止
-T=100,8
AX=13D8BX=3F80CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1392ES=1392SS=1392CS=1392IP=0111NVUPDIPLNZNAPONC
1392:
0111B44CMOVAH,4C
-
(4)用D命令显示300H至301H的内容(最终结果)
-D300301
1392:
0300D813..
-
(5)用Q命令退出DEBUG环境,返回DOS
-Q
C:
\DOS>
四、实验题目:
下面是一个2字节非压缩BCD码加的程序,试分析程序中被加数和加数以及和分别存放在哪些寄存器中,程序中CH有何作用。
阅读后再设计一个2字节非压缩BCD码减法程序。
然后分别计算56+98=?
,90-15=?
,并查看各寄存器的内容。
ANBCD:
MOVCH,AH
ADDAL,BL
AAA
XCHGAL,CH
ADCAL,BH
AAA
MOVAH,AL
MOVAL,CH
五、实验报告要求:
1.仔细阅读本讲义,弄清Debug主要命令的功能。
2.总结用debug调试程序的方法。
3.认真调试试验题目。
实验二分支程序设计
一、实验目的:
通过分支程序设计的练习,熟悉运算类指令对标志位状态的影响,以及标志位状态的表示方法;掌握无条件转移、条件转移指令的使用方法;掌握分支程序设计、编写、调试和运行程序的方法。
二、编程实例
变量X的符号函数可用下式表示:
试编程实现该符号函数的程序。
问题分析:
(1)符号函数的函数关系已经确定,它的特点是Y的取值由X的符号决定。
因此只要能判别出X的符号,即可得Y的值。
为了判别X的符号,可以让X直接与0比较,也可以用一条能影响标志为的指令来进行。
例如用‘与’或‘或’操作,就把X的符号和是否为0反映到了SF与ZF标志上。
(2)如果X=0,进入第一个分支,Y=0;如果X>0,则进入第二分支,Y=1;否则,进入第三分支,Y=-1。
流程图如下图所示。
符号函数的结构流程图
参考程序如下:
DATASEGMENT
XDW300H
YDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVAX,X
ORAX,AX
JEZERO;为0
JNSPLUS;为正
MOVBL,0FFH;为负
JMPEXIT
ZERO:
MOVBL,0
JMPEXIT
PLUS:
MOVBL,1
EXIT:
MOVY,BL
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
编辑后生成的源文件名为fzsj.asm,汇编后生成的目标文件名为fzsj.obj,连接后生成的可执行文件名为fzsj.exe。
将fzsj.exe文件用DEBUG程序调试,查看Y单元的内容并核对程序运行结果;对X的原始数据做适当修改,重新运行程序并核对运行结果。
三、实验题目
设某班学生(30名)某门课程的成绩(百分制)存放在内存中,试编程统计90分以上、80~89分、70~79分、60~69分以及低于60分的学生人数,并分别存放到A、B、C、D、E单元中。
(1)分析题目,并画出程序流程图;
(2)根据流程图编写程序;
(3)编辑汇编程序,用DEBUG程序调试,查看A~E单元的内容并核对程序运行结果;
(4)对原始数据做适当修改,重新运行程序并核对运行结果;
(5)修改程序,试从键盘输入课程成绩,查看运行结果。
四、实验报告要求
(1)分析编程实例,总结分支程序设计的方法;
(2)完成实验题目;
(3)将实验的过程及分析结果书写在实验报告上。
实验三循环程序设计
一、实验目的:
通过循环程序设计的上机练习,掌握循环结构的各种实现方法,进一步了解循环结构中初始化部分、循环题不分、循环控制部分的功能以及它们彼此之间的关系,尤其是两重循环结构中外层和内层循环之间的关系。
二、编程实例
某数据区内有20个数据,其中可能有正数、负数或零,试编制程序求出正数、负数和零的个数,并将个数存放在内存单元A~C中。
问题分析:
为统计数据区内正数、负数或零的个数,需要逐个判断数据,将数据直接与0比较,也可以用一条能影响标志为的指令来进行。
例如用‘与’或‘或’操作,就把数据的符号和是否为0反映到了SF与ZF标志上。
参考程序如下:
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
DATASEGMENT
BUFDB10,25,-21,-45,80,0,55,-67,-100,0
DB37,19,-50,-89,-76,83,50,2,0,-78
ADB?
BDB?
CDB?
DATAENDS
CODESEGMENT
ASSUMESS:
STACK,CS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,OFFSETBUF
MOVCL,20
XORCH,CH
MOVA,0
MOVB,0
MOVC,0
AGAIN:
MOVAL,[DI]
TESTAL,80H
JEZERO;为0
JNSPLUS;为正
INCB;为负
JMPEXIT
ZERO:
INCC
JMPEXIT
PLUS:
INCA
EXIT:
INCDI
LOOPAGAIN
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
编辑后生成的源文件名为xhsj.asm,汇编后生成的目标文件名为xhsj.obj,连接后生成的可执行文件名为xhsj.exe。
将xhsj.exe文件用DEBUG程序调试,查看并核对程序运行结果。
三、实验题目
设某班学生(30名)某门课程的成绩(百分制)存放在内存中,试编程将成绩按照从大到小的顺序排列。
(1)分析题目,并画出程序流程图;
(2)根据流程图编写程序;
(3)编辑汇编程序,用DEBUG程序调试,查看并核对程序运行结果;
(4)对原始数据做适当修改,重新运行程序并核对运行结果;
(5)修改程序,试从键盘输入课程成绩,查看运行结果。
实验四子程序与软中断程序设计
一、实验目的
1.掌握子程序的定义和调用方法。
理解CALL和RET指令的功能,掌握子程序调用时参数传递的方法。
2.掌握中断程序的定义和调用方法。
掌握中断向量的设置方法和DOS系统功能调用的方法。
二、实验内容
1.AL中有一个键盘输入字符的ASCII码,调用一个子程序,判断是否是十六进制数‘0’~‘F’的ASCII码,若是,AL返回一位十六进制数,并以十进制形式显示;否则AL返回0FFH。
2.用软中断实现上述要求。
三、实验要求
(1)分析题目,并画出程序流程图;
(2)根据流程图编写程序;
(3)编辑汇编程序,用DEBUG程序调试,查看并核对程序运行结果;
(4)对原始数据做适当修改,重新运行程序并核对运行结果;
(5)分析子程序和中断程序设计的区别。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验 指导书 软件 部分