微机原理实验指导书AAA资料.docx
- 文档编号:26662294
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:49
- 大小:438.56KB
微机原理实验指导书AAA资料.docx
《微机原理实验指导书AAA资料.docx》由会员分享,可在线阅读,更多相关《微机原理实验指导书AAA资料.docx(49页珍藏版)》请在冰豆网上搜索。
微机原理实验指导书AAA资料
汇编语言程序的建立和执行
要建立和运行汇编语言程序、系统盘上应该首先有如下文件:
.EDIT.COM(或其它全屏幕编辑软件如WS.COM,EDLIN.COM等)编辑程序
.MASM.EXE宏汇编程序
(或ASM.EXE)普通汇编程序
.LINK.EXE链接程序
.DEBUG.COM调试程序
其中MASM.EXE是宏汇编程序,如果使用的是普通汇编程序ASM.EXE,则不支持宏汇
编.
下面,以建立和执行用户程序ABC.EXE为例来说明上机过程。
1.用EDIT命令建立汇编语言源程序(.ASM文件)
源程序就是用户用汇编语言的语句编写的程序,它不能被机器识别。
源程序必须以
ASM为附加文件名。
例如打入命令:
A>EDITABC.ASM(每个命令后面应输入回车,以下均如此)
此时用户可以通过编辑程序的插入命令编写用户的源程序ABC.ASM。
至于EDIT的
使用方法可以查阅手册。
2.用MASM(或者ASM)命令产生目标文件[.OBJ文件]
源程序建立以后,就可以用宏汇编程序MASM.EXE(或者普通汇编程序ASM.EXE)进
行汇编。
所谓汇编,实际上就是把以ASM为附加名的源文件转换成用二进制代码表
示表示的目标文件,目标文件以OBJ为附加名。
汇编过程中,汇编程序对源文件进
行两次扫描,如果源程序中有语法错误,则汇编过程结束后,汇编程序会指出源程序
中的错误,这时,用户可以再用编辑程序来修改源程序中的错误,最后,得到没有
语法错误的OBJ文件。
例如,对ABC.ASM的汇编过程如下:
A>MASMABC.ASM
此时,汇编程序给出如下回答:
Microsoft(R)MacroAssemblerVersion5.00
CopYright(C)MicrosoftCorpl981一1985,1987.Allrightsreserved。
Objectfilename[abc.OBJ]:
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
51526十402346Bytessymbolspacefree
1WarningErrors
0SevereErrOrs
从上面的操作过程中可以看到,汇编程序的输入文件就是用户编写的汇编语言
源程序,它必须以ASM为文件扩展名。
汇编程序的输出文件有三个,第一个是目标
文件,它以OBJ为扩展名,产生OBJ文件是我们进行汇编操作的主要目的,所以这
个文件是一定要产生,也一定会产生的,操作时,这一步只要打人回车就行了;第
二个是列表文件,它以LST为扩展名,列表文件同时给出源程序和机器语言程序,
从而,可以使调试变得方便,列表文件是可有可无的,如果不需要,则在屏幕上出
现提示信息[NUL.LST]:
时打入回车即可,如果需要,则打入文件名后回车;第三
个是交叉符号表,此表给出了用户定义的所有符号,对每个符号都列出了将其定义
的所在行号和引用的行号,并在定义行号上加上“#”号,同列表文件一样,交叉
符号表也是为了便于调试而设置的,对于一些规模较大的程序,交叉符号表为调试
工作带来很大方便。
当然,交叉符号表也是可有可无的,如果不需要,那么,在屏
幕上出现提示信息[NUL.CRF]:
时,打入回车即可。
汇编过程结束时,会给出源程序中的警告性错误[WarningErrors]和严重错
误[ServersErrors],前者指一般性错误,后者指语法性错误,当存在这两类错
误时,屏幕上除指出错误个数外,还给出错误信息代号,程序员可以通过查找手册
弄清错误的性质。
如果汇编过程中,发现有错误,则程序员应该重新用编辑命令修改错误,再进
行汇编,最终直到汇编正确通过。
要指出的是在汇编过程中只能指出源程序中的语
法错误,并不能指出算法错误和其他错误。
3.用LINK命令产生可执行文件(EXE文件)
汇编过程根据源程序产生出二进制的目标文件(OBJ文件),但OBJ文件用的是
浮动地址,它不能直接上机执行。
所以还必须使用链接程序(LINK)将OBJ文件转
转换成可执行的EXE文件。
LINK命令还可以将某一个目标文件和其它多个模块(这
些模块可以是由用户编写的,也可以是某个程序库中存在的)链接起来。
具体操作如下(以对ABC.OBJ进行链接为例):
A>LINKABC
此时,在屏幕上见到如下回答信息:
IBMPersonalComputerlink
Version2.00(C)CopyrightIBMCorpl981,1982,1983
RunFile[ABC.EXE]:
ListFile[NUL.MAP]:
Libraries[.LIB]:
Warnhg:
NOSTACKSegment
L1NK命令有一个输入文件,即由汇编程序产生的OBJ文件,有时,用户程序
用到库函数,此时,对于提示信息Libraries[.LIB],要输入库名。
L1NK过程产生两个输出文件,一个是扩展名为EXE的执行文件,产生此文件
件当然是L1NK过程的主要目的,另一个是扩展名为MAP的列表分配文件,有人也称
它为映象文件。
它给出每个段在内存中的分配情况。
比如某一个列表分配文件为如下
内容:
Warning:
NoStackSegmcnt
StartStopLengthNameClass
0000H0015H0016HCODE
0020H0045H0026HDATA
0050H0061H0012HEXTRA
originGroup
ProgramentryPointat0000:
0000
MAP文件也是可有可无的。
从L1NK过程的提示信息中,可看到最后给出了一个“无堆栈段”的警告性错误
,这并不影响程序的执行。
当然,如果源程序中设置了堆栈段,则无此提示信息。
4.程序的执行
有了.EXE文件后,就可以执行程序了,此时,只要打入文件名即可。
仍以ABC
为例:
A>ABC(回车)
A>
实际上,大部分程序必须经过调试阶段才能纠正程序设计中的错误,从而得到正
确的结果。
所谓调试阶段,就是用调试程序(DEBUG程序)发现错误,再经过编辑、
汇编、链接纠正错误。
关于DEBUG程序中的各种命令,可参阅DOS手册,本实验指
导书后面附有一些常用命令,下面给出最常用的几个命令。
先进入DEBUG程序并装入要调试的程序ABC.EXE,操作命令如下:
A>DEBUGABC.EXE;进入DEBUG,并装配ABC.EXE
此时,屏幕上出现一个短划线,表明以进入DEBUG状态。
为了察看程序运行情
况,便于调试,常常要分段运行程序,为此,要设立“断点”,即让程序运行到某处
自动停下,并把所有寄存器的内容显示出来。
为了确定我们所要设定的断点地址常
常用到反汇编命令,反汇编命令格式如下:
一U;从当前地址开始反汇编
也可以从某个地址处开始反汇编,如下所示。
一U200;从CS:
200处开始反汇编
程序员心中确定了断点地址后,就可以用G命令来设置断点。
比如,想把断点
设置在0120H处,则如下打入命令:
一G120
此时,程序在0120H处停下,并显示出所有寄存器以及各标志位的当前值,在
最后一行还给出将要执行的指令的地址、机器语言和汇编语言,程序员可以从显示
的寄存器的内容来了解程序运行是否正确。
对于某些程序段,单从寄存器的内容看不到程序运行的结果,而需要观察数据
段的内容,此时可用D命令,使用格式如下:
一dDS:
0000
从数据段的0单元开始显示128个字节
在有些情况下,为了确定错误到底由哪条指令的执行所引起,要用到跟踪命令。
跟
踪命令也叫单步执行命令,此命令使程序每执行一条指令,便给出所有寄存器的内
容,并处于等待状态。
比如:
一T3
从当前地址往下执行三条指令
此命令使得从当前地址往下执行三条指令,每执行一条,便给出各寄存器内容。
最后,给出下一条要执行的指令的地址、机器语言和汇编语言.
从DEBUG退出时,使用如下命令:
一Q;
每一个有经验的程序员都必定熟练掌握调试程序的各主要命令。
为此,初学者
可通过软件实验部分的实验一来掌握DEBUG的一些基本操作并花一些功夫查阅、掌
握DOS手册中有关DEBUG程序的说明。
建立和运行汇编源程序的基本步骤见下图:
实验一DEBUG软件的使用
DEBUG.COM是专为8086/8088汇编语言设计的一种调试工具,是汇编语言程序设计者必须掌握的工具。
具有显示、修改、动态跟踪等功能。
使用它可以对*.COM、*.EXE文件进行动态跟踪。
DEBUG可以显示和修改内存与寄存器内容,以便在调试中检查程序,查找与改错;亦支持小汇编,直接对小段程序进行汇编;也可对磁盘进行读写。
DEBUG部分指令请见本书附录。
一、实验目的
1.通过实验掌握DEBUG软件的基本使用方法。
2.进一步熟悉、理解8088/8086的寻址方式。
3.掌握数据传送、算术运算、逻辑运算等类指令的基本操作。
二、实验内容与步骤
本实验进行前必须保证系统盘上有DEBUG.EXE文件。
进入DEBUG只需在DOS环境下执行DEBUG命令,即键入DEBUG回车后,屏幕上显示
DEBUG提示符:
“_”(短划线)。
操作如下:
A:
>DEBUG
-
注:
字符下有下划线的为键入的内容,\代表回车,后面内容均如此.
1.程序输入汇编命令(A命令)
在输入程序应注意以下几点:
(1)输入的数字必须是十六进制数,并且不输入H。
(2)分号后面的内容(注释)不要输入。
(3)不输入标号,条件转移指令中的标号用偏移地址代替。
方法:
先用一个离本转移指令的IP不远的但不一定准确的偏移地址代替标号
,待程序输入且完成反汇编后获得标号所在处的准确的偏移地址时再
修改。
在DEBUG提示符下键入A即进入汇编输入状态
-A\
键入下面的汇编程序
13F2:
0100MOVAX,2000
13F2:
0103MOVDS,AX
13F2:
0105MOVSS,AX
13F2:
0107MOVBX,2050
13F2:
010AMOVSI,BX
13F2:
010CMOVDI,3050
13F2:
010FMOVSI,DI
13F2:
0111MOVSP,5FFF
13F2:
0114MOVCL,19
13F2:
0116MOVBL,CL
13F2:
0118MOVAH,F0
13F2:
011AMOVCH,AH
13F2:
011CMOVBYTEPTR[DI],40
13F2:
011FMOVWORDPTR[SI],0100
13F2:
0123MOVDL,[SI+01]
13F2:
0126MOVDH,[SI+01]
13F2:
0129MOVAL,[SI+01]
13F2:
012CMOVWORDPTR[BX+SI],0022
13F2:
0130MOV[BX+SI+02],BX
13F2:
0133MOV[BX+SI+02],BX
13F2:
0136MOVBP,[BX+DI+02]
13F2:
0139MOV[BX+DI],BX
13F2:
013BMOVAX,[BP+DI]
13F2:
013DMOVBL,AL
13F2:
013FMOVES,BX
13F2:
0141PUSHBX
13F2:
0142PUSHDI
13F2:
0143PUSHDI
13F2:
0144POPCX
13F2:
0145POPDX
13F2:
0146XCHGBP,AX
13F2:
0147XCHGDH,BL
13F2:
0149SCHF
13F2:
014ACMC
13F2:
014BLAHF
13F2:
014CSTD
13F2:
014DCLI
13F2:
014EPUSHF
13F2:
014FCLD
13F2:
0150POPF
13F2:
0151INT21
13F2:
0153^C
重新回到DEBUG提示符“-”状态,表示汇编命令已结束。
2.反汇编命令(U命令)
-U01000153\
则屏幕显示如下信息:
13F2:
0100B80200MOVAX,2000
13F2:
01038ED8MOVDS,AX
13F2:
01058ED0MOVSS,AX
13F2:
0107BB5052MOVBX,2050
13F2:
010A89DEMOVSI,BX
13F2:
010CBF5053MOVDI,3050
13F2:
010FB119MOVSI,DI
.
.
.
.
13F2:
014E9CPUSHF
13F2:
014FFCCLD
13F2:
01509DPOPF
13F2:
0151CD21INT21
3.写文件于磁盘中
在程序键入后,应及时存盘,以免发生错误操作时,丢失程序。
写文件前先用N命令给文件命名。
若文件名定为LXA.COM,则具体操作如下:
-NLXA.COM\
定义好名称后,再在CX中存放文件长度即字节数:
文件长度=终止地址一起始地址+1
具体操作如下:
-RCX\;利用R命令显示CX寄存器当前内容
CX0000;屏幕显示CX的现存内容
:
0153\;输入文件长度
-W\;利用W命令将文件写入
Writing0153bytes;写入完成
若文件长度>65536则用BX、CX存放长度。
返回DO5后用DIR命令可以见到
LXA.COM文件已经存在,文件长度339字节。
4.程序跟踪调试
在状态下主要是可以对程序进行调试,调试前可先装入已存好的程序。
注意:
在DEBUG环境下不要执行INT20H。
对已存在的COM文件(或EXE文件)可以这样装人文件:
键人
A:
>DEBUGELXA.COM\
又出现提示符“-”。
此时可以用R命令查看DEBUG对.COM文件(或.EXE文件)的段寄存器、IP及F寄存器的初始化值。
-R\
AX=0000BX=0000CX=0000DX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=13F2ES=13F2SS=13F2CS=13F2IP=0100NVUPDIPLNZNAPONC
13F2:
0100B80020MOVAX,2000
可以用T命令来进行单步和多步指令的运行,运行指令后将显示各寄存器内容和下一条将要执行的指令:
T=100\;从CS:
0100H开始单步执行,显示寄存器值
AX=2000BX=0000CX=0153DX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=13F2ES=13F2SS=13F2CS=13F2IP=0103NVUPDIPLNZNAPONC
13F2:
01038ED8MOVDS,AX
-T\;从当前IP开始执行一条指令
AX=2000BX=0000CX=0153DX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=2000ES=13F2SS=13F2CS=13F2IP=0105NVUPDIPLNZNAPONC
13F2:
01058ED0MOVSS,AX
-T4\;用Tn命令来跟踪几条指令,n为需跟踪的指令条数。
Ax=2000BX=2050CX=0153DX=0000SP=FFFEBP=0000SI=3050DI=3050
DS=2000ES=13F2SS=2000CS=13F2IP=0111NVUPDIPLNZNAPONC
13F2:
0111BCFF5FMOVSP,5FFF
Ax=2000BX=2050CX=0153DX=0000SP=5FFEBP=0000SI=3050DI=3050
DS=2000ES=13F2SS=2000CS=13F2IP=0114NVUPDIPLNZNAPONC
13F2:
0114B119MOVCL,19
Ax=2000BX=2050CX=0119DX=0000SP=5FFEBP=0000SI=3050DI=3050
DS=2000ES=13F2SS=2000CS=13F2IP=0116NVUPDIPLNZNAPONC
13F2:
011688CBMOVBL,CL
Ax=2000BX=2019CX=0119DX=0000SP=5FFEBP=0000SI=3050DI=3050
DS=2000ES=13F2SS=2000CS=13F2IP=0118NVUPDIPLNZNAPONC
13F2:
0118B4F0MOVAH,F0
用G命令执行指定区域中的指令
-g=0100013f;从IP=0100H开始执行到113FH,并显示寄存器的内容
AX=2019BX=2019CX=0119DX=0101SP=SFFFBP=2019SI=3050DI=3050
DS=2000ES=13FZSS=2000CS=13FZIP=013FNVUPDIPLNZNAPONC
13F2:
013F8EC3MOVES,BX
用D命令可查看指定存储单元后的128个存储单元的内容。
如若需查看数据段3050存储单元的内容,可用下面的命令。
丛中可看出3050H单元的内容为00H。
-dds:
3050
2000:
30500001000096000000-B4000000D3000000........4...S...
2000:
3060FZ00000010010000-2F0100004D010000r......./...M...
2000:
30706C0100002009ZDOD-SD000000SD0000001....-.]...].-.
2000:
308020000900ZD00OD00-5D000000SD000000...-...]...]...
2000:
30900000000000000000-0000000000000000.'...-.-.-.---..
2000:
30A0ZE00000000000000-0000000000000000...-............
2000:
30B00000000000000000-0000000000000000.......--...-...
2000:
30C00000000000000000-0000000000000000......-.-..-....
5.程序调试练习
修改并调试以下程序,使之完成向以30000H开始的内存单元中存入31个先自然递增然后又自然递减的数据(00H~0FH~00H)的功能。
程序从CS:
0100H开始存放。
调试完成后程序命名为LXB.COM并存盘。
程序如下:
;LXB
MOVAX,3000
MOVDS,AX
MOVSI,0
MOVCL,OFH
XORAX,AX
L1:
MOV[SI],AL
INCSI
DECCL
JNZL1
MOVCX,10H
L2:
MOV[SI],AL
INCSI
DECAL
LOOPL2
INT20
步骤如下:
1.用汇编A命令输入程序。
2.用反汇编U命令显示程序及目标码。
-U0100\
13F2:
0100B80030MOVAX,3000
13F2:
0103SED8MOVDS,AX
13F2:
0105BE0000MOVSI,0000
13F2:
0108B10FMOVCL,OF
13F2:
010A31C0XORAX,AX
13F2:
010C8804MOV[SI],AL
13F2:
010EFECOINCAL
13F2:
0110FEC9DECCL
13F2:
011275F8JNZ010C
13F2:
0114B91000MOVCX,0010
13F2:
01178804MOV[SI],AL
13F2:
011946INCSI
13F2:
0llAFEC8DECAL
13F2:
0llCE2F9LOOP0117
13F2:
0llECD20INT20
-g=01000lle
AX=00FFBX=0000CX=0000DX=0000SP=FFFEBP=0000SI=0010DI=0000
DS=3000ES=13F2SS=13F2CS=13F2IP=0llENVUPDINGNZACPENC
13F2:
0llECD20INT20
3.用W命令将文件存入磁盘,文件名定为LXB.COM
4.用G命令运行程序到INT20H(注意:
不执行INT20H命令)
5.用D查看数据段中0000H处数据,检查是否将数据按要求存入该区域
-dds:
0000\
3000:
0000OFOEODOCOBOA0908-0706050403020100-.............-.
3000:
00100000000000000000-0000000000000000......----...-.-
3000:
00200000000000000000-0000000000000000......-....-....
3000:
00300000000000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验 指导书 AAA 资料