1632位微机原理与接口技术实验指导书Word格式.docx
《1632位微机原理与接口技术实验指导书Word格式.docx》由会员分享,可在线阅读,更多相关《1632位微机原理与接口技术实验指导书Word格式.docx(113页珍藏版)》请在冰豆网上搜索。
用编辑软件建立的源程序.ASM文件,必须经过汇编才能产生.OBJ文件。
在Windows环境下,点击屏幕左下角的“开始”—“所有程序”—“附件”—“命令提示符”,键入D:
并回车,再键入cdmasm并回车,则显示如图1-2所示:
图1-2命令提示符窗口
在D:
\masm>
提示符下键入MASM并回车,则在屏幕上显示:
Microsoft(R)MacroassembleVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987ALLrightsreserved
Sourcefilename[.ASM]:
输入要汇编的汇编语言源程序文件名,并回车,则屏幕显示:
OBJfilename[<
file>
.obj]:
直接键入回车,则生成中括号中指定文件名的.obj文件;
也可以在上述输入自己的文件名后再键入回车,则生成自己指定文件名的.obj文件。
然后屏幕显示:
Sourcelisting[nul.lst]:
直接键入回车,则不生成.lst文件;
若要生成.lst文件,则键入一个文件名后键入回车,屏幕显示:
Cross-reference[nul.crf]:
直接键入回车,则不生成.crf文件;
若要生成.crf文件,则键入一个文件名后键入回车,屏幕显示:
49748+451356Bytessymbolspacefree
0WarningErrors
0SevereErrors
D:
说明:
通过上述汇编后生成以下几个文件。
(1).OBJ文件
.OBJ文件是必须生成的一个目标代码文件,当源程序中无语法错误时,则在当前工作盘上自动存入一个.OBJ文件,供下一步连接用。
若源程序有语法错误时,会出现错误信息提示:
文件名.ASM(12):
errorA2009:
Symbolnotdefined:
AX1
文件名.ASM(15):
BRANCH1
50824+450280Bytessymbolspacefree
0WarningErrors(警告错误)
2SevereErrors(严重错误)
上述有两行错误信息,错误信息格式是:
源程序文件(行号):
错误信息代码:
错误信息说明
若严重错误总数不为0,则.OBJ文件没有生成,需回到编辑状态下修改汇编源程序,并重新汇编,如此往复,直到无错误为止。
(2).LST文件(列表文件)
.LST文件对调试程序有帮助,它是将源程序中各语句及其对应的目标代码和符号表以清单方式列出,如果需要,在屏幕显示的第二个提问的冒号后输入文件名即可,如果不需要,直接按回车键。
(3).CRF文件(交叉引用文件)
交叉引用.CRF文件给出了源程序中定义的符号引用情况,按字母顺序排列。
.CRF文件不可显示,须用CREF.EXE系统程序将.CRF文件转换成为.REF文件后方可显示输出。
若按后一种格式输入,系统会依次出现四个提示信息,比第一种格式多了一项源程序文件名的输入。
应答方式与第一种格式相同。
3、连接目标程序
汇编后生成的.OBJ文件,其目标代码中的所有地址都是浮动的偏移地址,机器不能直接运行。
必须用连接程序(LINK.EXE)对其进行连接装配定位,产生.EXE可执行文件,方可运行。
在系统提示符(D:
)下键入LINK<
.obj的文件名>
,并回车,屏幕上出现以下提示信息:
Microsoft(R)OverlayLinkerVersion3.60
Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.
RunFile[<
.EXE]:
缺省情况下,生成以源程序文件名(即方括号中的默认值)的可执行文件。
如果不修改可执行文件的文件名,则直接键入回车;
否则,键入可执行文件的文件名,并回车,则生成的可执行文件以该文件名为名字。
屏幕显示:
ListFile[NUL.MAP]:
Libraries[.LIB]:
连续键入回车后,返回系统提示符。
连接后,可生成两种文件:
.EXE和.MAP。
(1).EXE文件(可执行文件)
若连接过程中无错误,则自动在当前工作盘生成.EXE文件。
若有错误,则会给出错误信息提示,这时必须重新修改源程序,再汇编、连接。
(2).MAP(连接映像文件)
是一个列表清单文件,一般不用生成。
(3).LIB库文件
连接程序询问是否使用某种库文件,不需使用库文件直接按回车键。
(4)若要连接多个模块目标程序,可用“+”把它们连接起来。
在系统提示符下键入下列LINK命令并回车:
\MASM>
LINKfiles1+files2+files3
屏幕显示同LINK一个模块目标程序一样。
4、调试和运行程序
经过汇编、连接后生成的.EXE文件,可在DOS系统直接运行,只要键入可执行文件的文件名,并回车即可。
例如:
<
文件名>
DOS的COMMAND.COM模块将该程序装配到内存,并设置和分配启动地址。
也可在DEBUG调试程序下运行。
如何用DEBUG程序来运行和调试程序将在DEBUG调试程序中详细讨论。
5、DEBUG调试程序
DEBUG.EXE程序是专门为开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。
它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。
6、DEBUG程序使用
在DOS系统提示符下键入命令并回车:
D:
DEBUG[盘符:
][路径]文件名.EXE
这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG进行程序调试。
若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;
若命令行中有文件名,则DOS系统把DEBUG程序调入内存后,再由DEBUG将指定可执行文件装入内存。
7、DEBUG常用命令简介
(1)汇编命令A
格式:
A[起始地址]
功能:
将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。
若缺省起始地址,则从当前CS:
100地址开始存放。
A命令按行汇编,主要是用于小段程序的汇编或对目标程序的修改。
(2)反汇编命令U
格式1:
U[起始地址]
格式2:
U[起始地址][结束地址][字节数]
功能:
格式1从指定起始地址处开始将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:
IP开始。
格式2将指定范围的内存单元中的目标代码转换成汇编指令。
(3)显示、修改寄存器命令R
R[寄存器名]
若给出寄存器名,则显示该寄存器的内容并可进行修改。
缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。
-R
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0B03ES=0B03SS=0B03CS=0B03IP=0100NVUPEIPLNZNAPONC
-RAX;
输入命令
AX0000;
显示AX的内容
:
;
供修改,直接键入AX新值并回车;
若不修改,则直接键入回车。
若对标志寄存器进行修改,在DEBUG提示符下键入RF,并回车。
-RF
NVUPDIPLNZNAPONC—
屏幕显示如上信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。
不修改按回车键。
要修改,则个别输入一个或多个此标志的相反值,再按回车键。
R命令只能显示、修改16位寄存器。
(4)显示存储单元命令D
格式1:
D[起始地址]
格式2:
D[起始地址][结束地址][字节数]
格式1从起始地址开始按十六进制显示80H个单元的内容,每行16个单元,共8行,每行右边显示16个单元的ASCII码,不可显示的ASCII码则显示“·
”。
格式2显示指定范围内存储单元的内容,显示方式与格式1一样。
如果不写起始地址或地址范围,则从当前地址开始按格式1显示。
例如,键入D200并回车,屏幕显示如下:
-D200
0B03:
0200434649FEC48A073C-207401AA43E2BCC3CFI....<
t..C...
0210F646040275438BD5-83C20557B8006CBB.F..uC.....W..l.
0220400033C98BF2BA01-01CD215F7315E88C@.3.......!
_s...
0230DB3D020074233D03-00741E3D05007419.=..t#=..t.=..t.
0240E9ABD88BD8B80044-CD21B43ECD21F6C2.......D.!
.>
.!
..
0250807553F646040474-4D8B560580FA0074.uS.F..tM.V....t
02600580FE3A7402B240-80CA2080EA60E83C...:
t..@....`.<
0270E47306E847DBE975-D88BD583C2058A7E.s..G..u.......~
表示从DS:
0200H开始显示128个单元内容,其中DS值不同的计算机环境其值不同。
-D100120;
表示显示DS:
0100-DS:
0120单元的内容
在DEBUG中,地址表示方式有如下形式:
段寄存器名:
相对地址,如:
DS:
100
段基值:
偏移地址(相对地址),如:
23A0:
1500
(5)修改存储单元命令E
E[起始地址][内容表]
E[地址]
格式1按内容表的内容修改从起始地址开始的多个存储单元内容,即用内容表指定的内容来代替存储单元当前内容。
—EDS:
0100'
VAR'
1234
0100为起始单元的连续五个字节单元内容依次被修改为
'
V'
、'
A'
R'
、12H、34H。
格式2是逐个修改指定地址单元的当前内容。
0010
156F:
001041.5F
其中156F:
0010单元(注意:
不同计算机环境DS值不一定是156F)原来的值是41H,5FH为输入的修改值。
若只修改一个单元内容,这时按回车键即可;
若还想继续修改下一个单元内容,则应按空格键,就显示下一个单元内容,需修改就键入新内容,不修改再按空格跳过,如此重复直到修改完毕,按回车键返回DEBUG“-”提示符。
如果在修改过程中,将空格键换成按“-”键,则表示可以修改前一个单元内容。
(6)运行命令G
G[=起始地址][第一断点地址[第二断点地址……]]
CPU从指定起始地址开始执行,依次在第一、第二等断点处中断。
若缺省起始地址,则从当前CS:
IP指示地址开始执行一条指令。
最多可设置10个断点。
(7)跟踪命令T
T[起始地址][正整数]
从指定地址开始执行‘正整数’条指令,若缺省‘正整数’,表示执行一条指令,若两项都缺省,表示从当前CS:
(8)指定文件命令N
N<
文件名或扩展名>
指定即将调入内存或从内存写入磁盘的文件名。
该命令应该用在L命令和W命令之前。
(9)装入命令L
L[起始地址][盘符号][扇区号][扇区数]
L[起始地址]
格式1根据盘符号,将指定扇区的内容装入到指定起始地址的存储区中。
格式2将N命令指定的文件装入到指定起始地址的存储区中,若省略起始地址,则装入到CS:
100处或按原来文件定位约定装入到相应位置。
(10)写磁盘命令W
W<
起始地址>
[驱动器号]<
起始扇区>
扇区数>
W[起始地址]
格式1把指定地址开始的内容数据写到磁盘上指定扇区中。
格式2将起始地址的BX×
10000H+CX个字节内容存放到由N命令指定的文件中。
在格式2的W命令之前,除用N命令指定存盘文件名外,还必须将要写的字节数用R命令送入BX和CX中。
(11)退出命令Q
Q
退出DEBUG,返回到操作系统。
1.2.2其他Debug调试命令
DEBUG调试的其他命令见表1-1,请参考有关书籍。
表1-1DEBUG常用命令
名称
含义
命令格式
A(Assemble)
逐行汇编
A[address]
C(Compare)
比较两内存块
Crangeaddress
D(Dump)
显示内存单元(区域)内容
D[address]
D[range]
E(Enter)
修改内存单元(区域)内容
Eaddresslist
F(Fill)
填充内存单元(区域)
Frangelist
G(GO)
连续执行程序
G[=address][address]
H(Hexarthmetic)
两参数进行十六进制运算
HValueValue
I(Input)
从指定端口地址读取并显示一个字节值
Iportaddress
L(Load)
装入某个文件或特定磁盘扇区的内容到内存
L[address]
M(Move)
将内存块内容复制到另一个内存块
Mrangerange
N(Name)
指定要调试的可执行文件参数
N[d:
[path]filename[.exe]]
O(Output)
将字节值发送到输出端口
Oportaddressbyte
Q(Quit)
退出DEBUG
R(Register)
显示或修改一个或多个寄存器内容
R[registername]
S(Search)
在某个地址范围搜索一个或多个字节值
Srangelist
T(Trace)
单步/多步跟踪
TorT[address][Value]
U(Unassmble)
反汇编并显示相应原语句
U[address]orU[range]
W(Write)
文件或数据写入特定扇区
W[address[drivesectorsector]]
?
显示帮助信息
第2章80X86汇编语言实验内容
1.实验设备
硬件:
PC计算机一台;
软件,汇编软件
2.实验目的
(1)熟悉汇编语言程序设计方法;
(2)熟悉汇编程序调试过程;
(3)掌握使用数据传送、运算类、转移等指令编程及调试方法。
(4)掌握顺序结构、分支结构、循环结构和子程序调用的编程方法。
3.实验及实验报告要求
(1)编程、调试、运行、检查结果,并记录
要求:
对程序反复输入几组数据,并运行程序,记录结果。
(2)实验报告要求
实验报告中应包含实验内容、源程序、实验步骤、运行结果、结果分析是否正确及存在的问题。
2.1系统认识实验
2.1.1实验目的
掌握微型计算机汇编软件调试汇编源程序的基本操作。
熟悉传送类指令、简单运算类指令来编写汇编语言源程序,掌握调试过程及实验结果分析。
4.1.2实验内容
1、从3500H内存单元开始建立0~15共16个数据(建立的数据为00H,01H~09H.0AH~0FH)。
并运行之,检查记录结果。
(1)分析
①3500H为偏移地址,对应的段基址采用默认的DS当前值;
②程序中,如果不涉及到堆栈,则堆栈段可省略。
(2)实验程序
DATASEGMENT
ORG3500H;
设定起始偏移地址,如果没有该语句,默认的偏移地址为0000H
MEM1DB16DUP(?
)
DATAENDS
CODESEGMENT;
定义代码段
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,3500H;
程序开始设数据区首址
MOVCX,0010H;
字节数送入CX中
MOVAH,00H;
SAHF;
清标志寄存器指令
MOVAL,00H
A1:
MOV[DI],AL;
写入一字节
INCDI;
修改地址指针
INCAL;
修改数据
LOOPA1;
未填完转移
CODEENDS;
代码段结束
ENDSTART;
程序结束
2、如果1-1题建立的数据为BCD码表示的十进制数据(即建立的数据为00H,01H~09H,10H~15H),修改上述程序并调试运行,检查记录结果。
提示:
BCD运算,是二进制编码的十进制运算,使用指令ADD和DAA或INC和DAA共同完成,仅能使用AL进行运算。
15+28进行运算,编程如下:
MOVAL,15H;
15H是15的BCD码表示
ADDAL,28H;
28H是28的BCD码表示,这里完成15H+28H=3DH运算
DAA;
将AL中的结果3DH调整为BCD码,结果为43H
3、编程完成1+2+3+4+5+6+7+8+9的求和运算。
调试运行程序,并记录运算结果。
4、将内存3500H单元开始存放的0~9共10个字节数传递到3600H单元开始的数据区中(可分同一段内传送和段间专送)。
该程序应该编写数据段,从3500H开始存放0~9共10个数;
从3600定义10个字节单元,准备接收数据。
数据段定义如下:
ORG3500H
MEM1DB0,1,2,3,4,5,6,7,8,9
ORG3600H
MEM2DB10DUP(?
思考题:
(1)如果上述数据段定义中没有ORG语句,则从什么内存地址开始存放数据?
(2)如果采用字数据传送,请修改程序,并调试运行程序,记录运行结果。
(3)如果采用串传送指令(MOVSB,MOVSW),请修改程序,并调试运行程序,记录运行结果。
如果使用MOVSB,MOVSW指令,要将原始数据串的段基地址放入DS寄存器,接收数据的目的串段基地址放入ES寄存器,可以使DS与ES设置成同一个段基址(即逻辑段重叠);
也可以设置成不同逻辑段,即数据段和附加数据段。
4.1.3实验步骤
以实验内容1为例实验步骤如下。
实验内容2、3、4请自行依照实验步骤完成调试并记录实验结果。
第1步输入源程序
打开WINDOWS环境下的汇编开发环境,输入源程序。
在桌面上双击快捷方式图标“MasmforWindows集成实验环境”。
出现下面界面,其中右侧是源程序模板,如图2-1:
按提示输入编写好的源程序。
图2-1汇编源程序模板
图2-1说明:
在右侧窗口给出了段结构模板,根据模板输入源程序。
模板中的段名可以自己修改定义,没有涉及到的段可省略不写。
输入汇编语言源程序后,保存程序(规定扩展名为.ASM),使用ALT+X返回集成软件环境。
输入源程序后,如图2-2所示。
图2-2输入源程序后界面
第2步:
汇编
编译/汇编成目标文件,点击运行菜单下“编译成目标文件(OBJ)”,等待系统汇编,汇编成功后,汇编信息显示于屏幕下面的窗口中,显示编译成功。
如图2-3所示。
则可进行第3步。
如果显示错误提示信息,则返回第1步修改源程序后在汇编,直到无错误为止。
图2-3编译/汇编命令
第3步:
连接
连接生成可执行文件。
点击运行菜单下“生成可执行文件(EXE)”,等待系统对汇编生成的.obj文件进行连接,连接成功后,生成相应的可执行文件(.EXE),信息显示于屏幕下方的窗口上,如图2-4所示。
如果连接成功,显示生成*.EXE文件成功,进行下一步DEBUG调试。
否则,返回第1步,修改源程序,再汇编、连接,直到无错误信息为止。
图2-4连接命令及连接成功后的信息显示
第4步:
在DEBUG调试环境下进行程序的调试过程
通过DEBUG调试可以检查程序每一条指令及程序执行结果,以便查错和纠