微机原理与应用上机指导书模板.docx
《微机原理与应用上机指导书模板.docx》由会员分享,可在线阅读,更多相关《微机原理与应用上机指导书模板.docx(16页珍藏版)》请在冰豆网上搜索。
微机原理与应用上机指导书模板
《微机原理与应用》
上机指导书
机械工程与自动化学院机械制造工程系
实验一DEBUG程序的使用验证性
实验目的和要求:
1熟悉windows操作系统下模拟DOS环境debug的进入和退出。
2.熟练掌握常用的debug子命令,会利用这些子命令进行简单程序的调试。
实验条件:
1.PC机2.DOS系统3.debug调试程序
实验内容:
1.DEBUG的调用
格式:
[drive:
][path]debug[d:
][path][filename.ext]
example:
调入ASM1.COM
1)debug↓
2)debug↓
-NASM1.COM↓
-L↓
2.退出DEBUG
-Q↓
3.DEBUG的子命令
1)相关的CPU寄存器,FLAGS寄存器标志位状态,驱动器号标志码
(1)驱动器编号
编号磁盘属性
0A软盘
1B软盘
2C硬盘
(2)命令中使用地址。
段地址:
偏移量example:
CS:
0100
段地址:
始偏移量末偏移量example:
CS:
01000110
段地址:
始偏移量长度example:
CS:
0100L10
(3)不调入文件时,IP为0100。
(4)SP指向栈底。
(5)不调入文件时,AX、BX、CX、DX、SI、DI、BP为0。
当调入文件时,文件长度装入CX,大于64K时,其长度高位装入BX,均以字节为单位。
(6)CS、DS、SS、ES位于内存空间对应段的底部,既DEBUG程序后的第一段。
(7)FLAGS寄存器标志位为
NV(无溢出)UP(方向为增)EI(中断允许)PL(符号为正)NZ(非零)NA(无辅助进位)PO(奇)NC(无进位)
(8)DEBUG子命令有:
A(汇编);U(反汇编);G(运行);T(跟踪);R(寄存器显示与修改);D(内存显示);E(内存修改);S(查找);F(填充);M(数据移动);C(数据比较);N(文件命名);W(存盘);L(装入);I(端口输入);O(端口输出);H(十六进制运算);Q(退出)。
格式:
R[寄存器名]
功能:
显示或修改CPU寄存器的内容,包括:
AXBXCXDX;CSDSSSES;SPSIBPDIIPFLAGS
FLAGS符号表
标志位名置位
(1)复位(0)
OFOVNV
DFDNUP
IFEIDI
SFNGPL
ZFZRNZ
AFACNA
PFPEPO
CFCYNC
Example:
-R↓;立即显示各寄存器的内容
-RBX↓;显示并修改BX的内容
BX0000
:
0100↓
-RF↓
OVDNEINGZRACPECY-PONZ↓
格式:
A[起始地址]
功能:
从始地址汇编并把指令变成机器码;不指定始地址,默认为当前的CS:
连续地址。
Example:
-A0100↓
格式:
U[始地址]或U[地址范围]
功能:
将始地址起或地址范围的机器码反汇编显示出来。
Example:
-U100↓
-U100108↓
格式:
G[=始地址][断点地址……]
功能:
从始地址运行程序,遇断点停。
Example:
-G=10010d↓
-G=100↓
格式:
T[=始地址][跟踪条数]
功能:
从始地址运行一条或数条指令。
Example:
-T=100↓
-T↓
-T=10003↓
格式:
D[始地址]或D[地址范围]
功能:
显示内存十六进制数。
Example:
-D↓(DS)
-D100↓
-D100120↓
格式:
E[始地址][数据表]
功能:
将用数据表的内容修改始地址连续的内存单元的内容;没给出数据表,在命令执行后逐个修改,结束按回车--往后修改按空格键;往前修改按-号键;空格和-号键为单元间隔。
Example:
-E0104412434↓(DS)
-E0104↓
0100:
01044167↓
格式:
S地址范围数据表
功能:
查找指定范围的数据表,找到显示地址,找不到返回提示符。
Example:
-S1000128CD20↓
格式:
F地址范围数据表
功能:
将地址范围的数据用数据表的内容填充,如果地址表范围大于数据表个数,将从重复使用数据表。
Example:
-F6C02:
01006C02:
010412233445↓
格式:
M源地址范围目的始地址
功能:
将源地址范围的内容装入到目的地址。
Example:
M6C02:
01006C02:
02007F38:
0100↓
格式:
C源地址范围目的地址
功能:
将源地址范围的内容依次与目的地址的内容相比较,不同时显示:
源地址源数据目的数据目的地址
格式:
N[d:
][p]filename[.ext]
功能:
(当调入文件或写文件到盘时)给文件命名。
格式:
W始地址或W始地址驱动器号始扇区扇区数
功能:
将从始地址开始,BX和CX记录的字节长度写入到N命名的磁盘文件中。
或将始地址开始的内容,写入驱动器号标识磁盘的始扇区标定的扇数内容。
格式:
L[始地址]
或L始地址驱动器号始扇区扇区数
功能:
将N命名的文件调入内存,文件长度存于CX和BX中;或从标识盘中始扇区,标定扇区数装入到内存始地址中。
格式:
I端口地址
功能:
从端口地址读入一字节数据并显示。
地址0—FFH;DX从0—FFFFH。
格式:
O端口地址字节值
功能:
将指定端口的字节传送到输出端口。
可以按CTRL-BREAK终止命令的执行。
若命令产生相当多的输出行,为在屏幕上看清楚,可以按CTRL-NUMLOCK键暂停,按任一键继续。
实验二汇编语言程序设计
实验目的和要求:
1熟悉在DOS操作系统下使用较普遍的汇编程序MASM.EXE。
2.练习在DOS操作系统下使用较普遍的连接程序LINK.EXE。
3.学习汇编程序的使用,调试程序。
实验要求:
1.掌握DOS操作系统下的汇编程序MASM.EXE和连接程序LINK.EXE。
2.加深对汇编程序的理解和认识。
实验条件:
1.PC机2.DOS系统3.汇编语言工作环境
实验内容:
一、汇编程序
在DOS系统下使用得较普遍的汇编程序是MAXM.exe。
1.汇编程序的主要工具
(1)地址计数器
在每一段开始(由SEGMENT伪操作标识),地址计数器被初始化为0,每处理一条指令,包括助记符指令、数据定义以及存储器分配等伪操作,地址计数器就增加一个值,此值为该指令所需的字节数。
在汇编过程中,地址计数器的内容就是当前正在被汇编的指令的偏移地址。
(2)符号表
记录用户所定义的符号极其属性。
(3)机器指令表
给出助记符表示的指令与机器指令的对应关系。
(4)伪操作表
给出所有伪操作及相关信息。
2.汇编程序的主要功能
(1)检查汇编语言源程序,若程序中有不符汇编程序要求的语句,给出错误信息;
(2)利用地址计数器确定被汇编的每条指令的偏移地址;
(3)确定各符号的偏移地址,建立符号表;
(4)利用符号表、机器指令表和伪操作表把助记符指令翻译成机器语言指令,此时
变量和符号均为浮动地址,段地址尚不定,假如指令的操作数涉及到变量或标号,则指令中的地址为浮动值;
(5)产生源程序的目标代码文件,供连接程序用。
(6)产生列表文件,给出源程序指令相对应的地址计数器的值和符号表,对于有浮
动地址的指令在其二进制指令后以R标识。
3.汇编程序的使用
将DOS下所有相关路径设好,使用汇编程序的完整格式为:
MASM[/option][Source(.asm)],[Object(.obj)],[Listing(.lst)],[Crossref(.crf)[;]↙
命令MASM后跟若干参数,这些参数需用空格或逗号等分隔符分开。
放在[]中的参数是可选参数,表示可以不紧跟在命令MASM后输入,可在命令执行后,按给出的提示输入;也可不输入,而使用命令的缺省值作为参数。
放在()中的扩展名为缺省时的默认值。
/option命令的动作选项,由符号“/”引导。
利用命令MASM/HELP可查看所有动作选项及其说明。
Source(.asm)指定汇编源程序的文件名,缺省的扩展名为.asm。
Object(.obj)指定目标文件名,缺省的目标文件名与源程序名相同,缺省的扩展名为.obj。
Listing(.lst)指定列表文件名,缺省的扩展名为.lst。
缺省情况是不生成列表文件。
Crossref(.crf)指定交叉参考文件名,缺省的扩展名为.crf。
缺省情况是不生成交叉参考文件。
命令可用分号结束,表示其后各项参数按缺省值处理。
命令中除源程序参数Source(.asm)必须输入外,其它参数均设有缺省值,可不用输入。
下面通过实例来介绍汇编程序的使用。
test.asm是一个带有两处语法错误的汇编语言程序源文件,其内容如下:
datasegment
bufferdb‘HelloWorld!
’,‘$’,;手误一:
在‘$’后多输了一个逗号
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leadx,bufer;手误一:
将buffer误输出为bufer
movah,09H
int21H
movah,4cH
int21H
codeends
endstart
如注释所表明,程序中有两处语法错误,但检查时未发现,我们来看汇编程序会给出什么样的提示。
汇编方法一:
D:
\MASM↙(命令尚未输入任何参数)
Microsoft(R)MacroAssemblerVersion5.10(显示masm.exe的版本信息)
Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.
Sourcefilename[.ASM]:
TEST↙(输入源文件名,缺省扩展名为.asm)
Objectfilename[test.obj]:
↙(直接回车,[]为缺省的目标文件名)
Sourcelisting[NUL.LST]:
↙(直接回车,不生成列表文件)
Cross-reference[NUL.CRF]:
↙(直接回车,不生成交叉参考文件)
test.ASM
(2):
warningA4101:
Missingdata;zeroassumed
(指出错误1在第2行及其错误原因)
test.ASM(10):
errorA2009:
Symbolnotdefined:
BUFER
(指出错误2在第10行及其错误原因)
49924+421225Bytessymbolspacefree
1WarningErrors(显示警告性错误总数)
2SevereErrors(显示严重性错误总数)
汇编提示我们,程序中有两处错误,并给出错误所在行号及错误原因。
由于有严重性错误,汇编后未生成目标文件。
可根据提示,在编辑器下修改程序的语法错误。
方法一的输入较多,使汇编速度受到影响。
采用下面介绍的方法二,可获得与方法一同样的结果,即按缺省文件名生成目标文件,不生成列表文件及和交叉参考文件。
假设已在编辑器下将TEST.asm的两处语法错误改正。
汇编方法二:
D:
\MASMTEST;↙(命令中用分号缺省后面的输入)
Microsoft(R)MacroAssemblerVersion5.10
Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.
49928+421221Bytessymbolspacefree
0WarningErrors
0SevereErrors
汇编后未有错误提示,表明汇编已成功,生成目标文件TEST.obj。
若要形成列表文件,必须在汇编中输入列表文件名,否则将不生成该文件。
D:
\MASM↙(命令尚未输入任何参数)
Microsoft(R)MacroAssemblerVersion5.10
Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.
Sourcefilename[.ASM]:
TEST↙
Objectfilename[test.obj]:
↙
Sourcelisting[NUL.LST]:
TEST↙(输入列表文件名,缺省扩展名为.lst)
Cross-reference[NUL.CRF]:
↙
47868+421247Bytessymbolspacefree
0WarningErrors
0SevereErrors
列表文件是一个文本文件,可用任何一个文本编辑器查看。
汇编程序中,至少要有一条END语句,否则即使程序中有很多错误,汇编也只给出无END语句错误信息,且显示警告性错误总数,严重性错误总数均为0,用户不要被此值误导。
例将带有两处错误的源程序test.asm的最后一条语句endstart去掉,对test.asm进行汇编得如下结果。
D:
\MASMTEST;↙
Microsoft(R)MacroAssemblerVersion5.10
Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.
Endoffileencounteredoninputfile无END语句错误信息
Endoffileencounteredoninputfile
49968+421181Bytessymbolspacefree
0WarningErrors
0SevereErrors
二、连接程序
在DOS系统下使用得较普遍的连接程序是LINK.exe。
1.连接程序的主要功能
(1)找到要连接的所有目标模块,并确定各目标模块的相对段值;
(2)确定各目标模块中的浮动地址及外部符号地址;
(3)产生可再定位的装入模块,即可执行文件(后缀名为.exe);
(4)产生映像文件(后缀名为.map)
2.连接程序的使用
将DOS下所有相关路径设好,使用汇编程序的完整格式为:
LINK[/option][Object(.obj)],[Runfile(.exe)],[Mapfile(.map)],[Library(.lib)[;]↙
命令LINK后跟若干参数,这些参数需用空格或逗号等分隔符分开。
放在[]中的参数是
可选参数,表示可以不紧跟在命令LINK后输入,可在命令执行后,按给出的提示输入;也可不输入,而使用命令的缺省值作为参数。
放在()中的扩展名为缺省时的默认值。
/option命令的动作选项,由符号“/”引导。
利用命令LINK/HELP可查看所有动作选项及其说明。
Object(.obj)指定目标文件名,缺省的扩展名为.obj,多个目标文件之间用加号“+”分隔。
Runfile(.exe)指定可执行文件名,缺省的文件名与第一个目标文件名相同,缺省的扩展名为.exe。
Mapfile(.map)指定映像文件名,缺省的扩展名为.map。
缺省情况是不生成映像文件。
Library(.lib)指定库文件名,缺省的扩展名为.lib。
多个库文件之间用加号“+”分隔。
缺省情况是不使用库文件。
命令可用分号结束,表示其后各项参数按缺省值处理。
命令中除目标文件参数Object(.obj)必须输入外,其它参数均设有缺省值,可不用输入。
下面通过实例来介绍连接程序的使用。
将TEST.obj文件连接成可执行文件。
连接方法一:
D:
\LINK↙(命令尚未输入任何参数)
Microsoft(R)OverlayLinkerVersion3.61(显示link.exe的版本信息)
Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.
ObjectModules[.OBJ]:
TEST↙(输入目标文件名,缺省扩展名为.obj)
RunFile[TEST.EXE]:
↙(直接回车,[]为缺省的可执行文件名)
ListFile[NUL.MAP]:
↙(直接回车,不生成映像文件)
Libraries[.LIB]:
↙(直接回车,不使用库文件)
LINK:
warningL4021:
nostacksegment(显示警告性错误)
连接程序指出程序中无堆栈段,这是一个,该错误不影响可执行文件的生成。
由于无严重性错误,连接成功,生成可执行文件。
对于初学者,在程序中可以不设置堆栈段,使用的是系统分配的堆栈。
方法一的输入较多,使连接速度受到影响。
采用下面介绍的方法二,可获得与方法一同样的结果,即按缺省文件名生成可执行文件,不生成映像文件和不使用库文件。
连接方法二:
D:
\LINKTEST;↙(命令中用分号缺省后面的输入)
Microsoft(R)OverlayLinkerVersion3.61
Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.
LINK:
warningL4021:
nostacksegment
若要形成映像文件,必须在汇编中输入映像文件名,否则将不生成该文件。
D:
\LINK↙(命令尚未输入任何参数)
Microsoft(R)OverlayLinkerVersion3.61
Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.
ObjectModules[.OBJ]:
TEST↙
RunFile[TEST.EXE]:
↙
ListFile[NUL.MAP]:
TEST↙(输入映像文件名,缺省扩展名为.map)
Libraries[.LIB]:
↙
LINK:
warningL4021:
nostacksegment
映像文件是一个文本文件,可用任何一个文本编辑器查看。
映像文件中给出模块中每个段的其始地址,结束地址和长度,并给出程序入口地址,这些值都是相对值,只有加上可执行文件装入内存后的入口地址绝对值与映像文件给出的入口地址之差才是各段在内存中的绝对值。
用DEBUG调用可执行文件后用R命令查看CS:
IP的值,即是程序入口地址的绝对值。
若要在程序中定义一个堆栈段,必须将该段的组合类型设为STACK类型,否则连接时仍给出无堆栈段的警告性错误。
在TEST.asm源文件中增加如下的段定义:
s_segsegmentpapastack(定义该组合类型为stack)
dw100dup(?
)
s_segends
重新汇编TEST.asm源文件,并进行连接,无堆栈段的警告性错误信息消失。
三、DOS的装入和返回功能
连接后产生的.exe文件是一个可执行文件,存储在磁盘上,要执行该程序,必须将其装入内存,并控制CPU的CS:
IP指向程序的入口地址,CPU才开始执行程序。
执行完程序后,还需利用DOS的返回功能结束程序的执行,返回命令接受状态。
1.装入功能
在DOS的提示符后输入可执行文件的文件名,按回车键,DOS系统即调用装入功能(又
称EXEC系统功能),完成以下操作:
(1)确定内存可用部分,以便存放要执行的.exe文件。
(2)在可用内存的起点建立执行程序的程序段前缀PSP(programsegmentprefix),
程序段前缀的大小为100H,即256个字节,需要注意的是程序段前缀最开始的两个字节是一条INT20H指令。
(3)装入可执行程序到内存可用区,并修改以下寄存器的值:
DS和ES设置为程序段前缀所在内存的段值;
SS和SP设置为由连接程序传过来的值;
CS和IP设置为程序的入口地址,它是汇编语言程序中为操作END后跟的符号名对应的
物理地址;
由于CS:
IP已指向程序的入口地址,从而CPU开始执行已装入内存中的程序。
2.程序结束返回功能
执行该程序后,若要返回DOS命令解释器的的等待命令接受状态,即在屏幕上出现DOS
提示符,等待输入新的命令,需要在用户程序的最后安排完成此功能的程序段,通常是采用调用DOS系统功能完成。
可以采用以下两种方法中的任一种:
第一种:
在要4CH处,安排调用4CH系统功能的指令。
MOVAX,4C00H
INT21H
执行完4CH的功能调用,即返回DOS。
第二种:
调用程序结束中断功能(INT20H指令)
20H中断例行程序是处理程序结束用的,但调用该功能时,要求当前的CS为.exe文件程序段前缀所在内存的段值。
DOS推荐给用户的汇编程序标准框架:
codeSEGMENT
ASSUMECS:
code
mainPROCFAR
start:
PUSHDS;入栈保护程序段前缀的首地址
XORAX,AX
PUSHAX
...;程序主体部分
...
RET;取出程序段前缀的首地址给CS:
IP
mainENDP
codeENDS
ENDstart
这一结构就是保证利用INT20H返回DOS,解释如下:
程序装入内存后DS寄存器的初值被置为程序段前缀所在的段值,程序一开始就把当前DS寄存器内容压入堆栈,并把一个零值压入堆栈,实质是入栈保存程序段前缀的首地址。
执行完程序主体部分,最后执行RET指令时,由于程序定义为一个远过程,故RET为远返回,将从堆栈中弹出两个字分别IP和CS。
此时CS和IP将指向程序段前缀的首地址。
由于程序段前缀在首地址处安排的是一条INT20H指令,且CS的值是.exe文件程序段前缀所在内存的段值,从而执行INT20H可以正确返回DOS系统。