微机原理课程上机实验指导书.docx
- 文档编号:26687985
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:112
- 大小:133.78KB
微机原理课程上机实验指导书.docx
《微机原理课程上机实验指导书.docx》由会员分享,可在线阅读,更多相关《微机原理课程上机实验指导书.docx(112页珍藏版)》请在冰豆网上搜索。
微机原理课程上机实验指导书
第一部分汇编语言程序设计实验
实验一汇编语言编程基础
汇编语言是一种面向机器的“低级”语言,是计算机能够提供给用户的最快而最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
要真正理解计算机的工作过程,理解计算机程序的执行过程,就必须学习汇编语言。
也正是因为如此,汇编语言程序设计是计算机专业和电子,自动控制等相关专业的重要课程。
但是,对于刚开始学习汇编语言的学生而言,汇编语言的一些命令非常抽象,很难理解,往往学习了很长时间也编不出满意的程序,更别说自如的应用,以致我们认为汇编语言很难掌握,影响我们学习汇编语言的兴趣。
实际上,为了掌握好汇编语言,我们可以从熟悉、使用DEBUG调试工具开始,先来分析和读懂一些与硬件相关的小程序,这也是我们实验一的目的。
1.1汇编语言程序的上机步骤
以下列源程序为例,先学习汇编语言的上机步骤。
文件名为1.asm:
DATASEGMENT
NUM1DB35,35H
NUM2DW35,35H
NUM3DB4DUP(34,3DUP(34H))
NUM4DB'34AB'
NUM5DW'34','AB'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETNUM1
MOVAL,[BX]
MOVBX,OFFSETNUM5
MOVAX,[BX]
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
一.上机步骤
汇编语言程序MASM软件由EDIT.COM编辑器,汇编MASM.EXE程序,连接LINK.EXE程序以及DUEBUG.EXE调试程序四个部分组成。
汇编语言编制完成后,在计算机上的操作过程就分为四个阶段。
1.编辑EDIT.COM
首先输入源程序,有两种方法:
(1)在记事本里录入,特别注意的是:
在保存时文件格式必须选择所有文件,文件后缀名为.ASM,即保存时文件名为XXX.asm。
(2)双击MASM软件中的编辑软件EDIT.COM文件框,在EDIT下输入源程序。
用ALT+F键打开file菜单,用其中的save功能键将文件存盘。
特别注意的是:
汇编语言源程序文件的后缀必须为.asm,即保存时文件名为XXX.ASM。
图1-1EDIT编辑界面
2.用汇编程序MASM.Exe对源程序.ASM文件汇编,生成目标文件.OBJ
汇编阶段的任务是把汇编语言源程序翻译成机器代码(称为目标),产生二进制格式的目标文件XXX.OBJ(名字与源程序名相同,只是后缀名不同),如果源程序有语法错误,则汇编过程结束后,MASM.EXE汇编程序会指出源程序中错误的行号和错误的原因,我们可以再用编辑程序EDIT.com来修改源程序中的错误,汇编无错后,方可得到正确的.OBJ目标文件,才能进行下一部的连接LINK。
双击MASM软件中的MASM.Exe文件框,在命令行后键入源程序名XXX.asm,(如果源程序与MASM软件在同一路径下,可以只键入文件名,而不要后缀),如以下界面:
图1-2MASM编译1.asm文件无错误时的界面
3.连接LINK.EXE
由于汇编所得到的目标代码的存放地址并不是可执行的绝对地址,而是浮动的相对地址,汇编产生的目标文件.OBJ还不能在计算机上运行,需要用连接程序LINK.EXE把目标文件.OBJ文件转换为可执行文件XXX.EXE文件.
双击MASM软件中的LINK.Exe文件框,在命令行后键入目标文件名XXX.OBJ(如果源程序,目标文件与MASM软件在同一路径下,可以只键入文件名,而不要后缀),如以下界面:
图1-3LINK连接1.OBJ文件界面
如果连接没有错误,就会产生一个XXX.EXE的可执行文件,如果.OBJ文件有错误,连接时会指出错误的原因。
对于无堆栈警告(warning:
nostacksegment)的提示,可以不予理睬,它是由于我们在源程序中没有定义堆栈段的原因,对于比较小的程源序和不需要再特别定义堆栈段的源程序,我们可以不定义堆栈段,它并不影响程序的正确执行。
反而,如果连接时有其他的错误,则要检查并修改源程序XXX.ASM,然后再重新汇编MASM.EXE,连接link.exe的步骤,直到得到正确的XXX.EXE文件为止。
4.运行和调试DEBUG.exe
运行可执行文件,即双击XXX.EXE文件框即可,或在DOS下运行此程序,
E:
\XXX.EXE。
1.2熟悉、使用DEBUG调试工具
以下重点介绍一些调试命令:
以1.asm源程序为例:
图1-4运行和调试DEBUG界面
1)N命令:
用于指定进行读写的磁盘上的文件。
命令格式:
N[path][filename]
如:
-n1.exe指定要装载(Load)或写入磁盘(Write)的文件名。
2)L命令:
将指定的文件装入内存中
命令格式:
L回车键
-l回车键
3)反汇编命令U
就是将存放在制定范围内的目标代码,反汇编成8086/8088的汇编指令格式,并按目标代码首地址,目标代码和对应的源指令的格式,在屏幕上显示出来。
把目标代码反汇编后,用户可以方便地知道,程序从什么地址开始执行,执行的是哪一条指令,执行到什么地址为止。
命令格式:
U[地址范围]
-u
13FE:
0000B8FC13MOVAX,13FC
13FE:
00038ED8MOVDS,AX
13FE:
0005BB0000MOVBX,0000
13FE:
00088A07MOVAL,[BX]
13FE:
000ABB1A00MOVBX,001A
13FE:
000D8B07MOVAX,[BX]
13FE:
000FB8004CMOVAX,4C00
13FE:
0012CD21INT21
13FE:
00140000ADD[BX+SI],AL
13FE:
00160000ADD[BX+SI],AL
13FE:
00180000ADD[BX+SI],AL
13FE:
001A0000ADD[BX+SI],AL
13FE:
001C0000ADD[BX+SI],AL
13FE:
001E0000ADD[BX+SI],AL
13FE为CS即代码段的段基地址,0000,0003,0005是偏移地址,B8FC13等是机器码(由代码段中的二进制机器指令反汇编得到)也就是程序在机器中的代码,MOVAX,13FC是助记符,帮助记忆机器中的指令。
(源指令)
4)运行命令:
T命令:
单步运行命令
以1.EXE调试为例,单步运行二次
13FE:
0000B8FC13MOVAX,13FC
13FE:
00038ED8MOVDS,AX
13FE:
0005BB0000MOVBX,0000
13FE:
00088A07MOVAL,[BX]
13FE:
000ABB1A00MOVBX,001A
13FE:
000D8B07MOVAX,[BX]
13FE:
000FB8004CMOVAX,4C00
13FE:
0012CD21INT21
13FE:
00140000ADD[BX+SI],AL
13FE:
00160000ADD[BX+SI],AL
13FE:
00180000ADD[BX+SI],AL
13FE:
001A0000ADD[BX+SI],AL
13FE:
001C0000ADD[BX+SI],AL
13FE:
001E0000ADD[BX+SI],AL
-t
AX=13FCBX=0000CX=0034DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13ECES=13ECSS=13FCCS=13FEIP=0003NVUPEIPLNZNAPONC
13FE:
00038ED8MOVDS,AX
-t
AX=13FCBX=0000CX=0034DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13FCES=13ECSS=13FCCS=13FEIP=0005NVUPEIPLNZNAPONC
13FE:
0005BB0000MOVBX,0000
可以看到机器随机分配给该程序的数据段的段基地址被AX赋予给DS。
该程序的代码段的段基地址为13FE,数据段的段基地址为13FC。
单步执行命令T执行一条命令,并显示CPU中寄存器中的内容和要执行的下一条命令,大家可以看到AX,BX,CX等寄存器的内容,T命令可以跟踪程序中的每一条指令的执行情况.
P命令:
也是单步运行命令。
但是P命令对于每一条指令语句都是一次执行完成.比如CALL、LOOP和DOS功能调用的INTn等指令语句T命令能在程序的执行中,跟随IP指示的地址,跟踪指令的执行,而P命令则是按指令语句,续进执行的.在调试中,用户可根据需要,选择不同的运行程序命令,以适应调试的要求。
5)G(Go)命令:
连续执行内存中的程序,还可以在程序中设置断点,逐段地执行程序,以便一段一段地对程序进行调试。
命令格式:
G[=address[address[address…]]
其中第一个参数=address,规定了执行的起始地址,即以CS的内容为段地址,以等号后面的地址为偏移地址,在输入时,等号是不可缺少的,若不输入起始地址,则以CS:
IP为起始地址,后面的地址参数是断点地址。
如果在G命令中没有设置断点,或设有断点但程序在执行中未能到达断点处,这时程序将一直运行,直至结束。
在结束时显示提示信息“Programterminatednormally"。
在G命令中可以设置断点,格式为G=0000000D
13FE:
000D8B07MOVAX,[BX]
13FE:
000FB8004CMOVAX,4C00
13FE:
0012CD21INT21
AX=1323BX=0000CX=0034DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13FCES=13ECSS=13FCCS=13FEIP=000ANVUPEIPLNZNAPONC
13FE:
000ABB1A00MOVBX,001A
-可以看到AL中的数为23
再设置一次断点G=0000000F
-g=0000000f
AX=3334BX=001ACX=0034DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13FCES=13ECSS=13FCCS=13FEIP=000FNVUPEIPLNZNAPONC
13FE:
000FB8004CMOVAX,4C00
-
可以看到AX=3334
6)D(Dump)命令:
显示指定范围(range)内的内存单元的内容。
其中,参数范围(range)有以下两种表示方式:
a)第一种表示方式:
AddrlAddr2
这里Addrl和Addr2分别代表待显示内存单元的首地址和末地址。
2)第二种表示方式:
AddrlLValue
这里表示显示从地址Addrl开始、长度为Value个字节的内存单元。
例如下面两条命令是等效的。
一D2002FF
—D200L100
显示内容分为三部分。
最左边是本行内存单元首地址(XXXX:
XXXX),第二部分是以十六进制形式显示的相继各字节单元的内容,前后八个单元间用符号“—”隔开。
第三部分是本行显示的十六进制值所对应的ASCII字符。
如果某十六进制值的ASCII字符是不可显示的,便以“.”代替。
注意,每行只显示16个单元的内容,而且每行的首地址都是
16的整倍数,或者说,每行的首地址都是以16为边界的。
对于D命令,又有两种简化格式,如:
一D200
显示从DS:
0200单元开始的80H个单元的内容,即在只给定第一个地址的命令中,约定隐含L80参数。
一D
除第一次从DS:
100开始,显示80H个单元的内容外,以后都继前次地址之后,依次显示80H个单元的内容。
-d
13FE:
0000B8FC138ED8BB0000-8A07BB1A008B07B8................
13FE:
0010004CCD2100000000-0000000000000000.L.!
............
13FE:
00200000000000000000-0000000000000000................
13FE:
00300000000000000000-0000000000000000................
13FE:
00400000000000000000-0000000000000000................
13FE:
00500000000000000000-0000000000000000................
13FE:
00600000000000000000-0000000000000000................
13FE:
00700000000000000000-0000000000000000................
我们从内存单元偏移地址[0000]单元开始,
-d0
13FC:
00002335230035002234-3434223434342234#5#.5."444"444"4
13FC:
00103434223434343334-414234334241000044"44434AB43BA..
13FC:
0020B8FC138ED8BB0000-8A07BB1A008B07B8................
13FC:
0030004CCD2100000000-0000000000000000.L.!
............
13FC:
00400000000000000000-0000000000000000................
13FC:
00500000000000000000-0000000000000000................
13FC:
00600000000000000000-0000000000000000................
13FC:
00700000000000000000-0000000000000000................
-可以看到从偏移地址[0000]单元开始显示内存单元的内容。
7)R(Register)命令
格式:
R[register_name]
功能:
显示CPU中的一个或所有16位寄存器(包括标志寄存器)的内容。
对于标志寄存器来说,显示的是各标志位的状态(置位/复位)。
-r
AX=3334BX=001ACX=0034DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13FCES=13ECSS=13FCCS=13FEIP=000FNVUPEIPLNZNAPONC
13FE:
000FB8004CMOVAX,4C00
-命令Rregister_name不但能显示出该寄存器的当前值,而且还显示提示符“:
”。
这时只要输入新的值,便可更新该寄存器的内容。
若只按回车键,则寄存器的值将保持不变。
例如命令:
-r
AX=3334BX=001ACX=0034DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13FCES=13ECSS=13FCCS=13FEIP=000FNVUPEIPLNZNAPONC
13FE:
000FB8004CMOVAX,4C00
-rax
AX3334
:
6677
-r
AX=6677BX=001ACX=0034DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13FCES=13ECSS=13FCCS=13FEIP=000FNVUPEIPLNZNAPONC
13FE:
000FB8004CMOVAX,4C00
RDS,RCS命令可以修改当前段的地址。
同学们下来可以试以下。
8)-F是标志寄存器的名字。
命令RF将显示各状态位的当前状态,其后显示提示符“一”,这时只要输入合法的标志(对顺序无要求),便可修改标志位状态,若只按回车键,则标志位的状态将保持不变。
如命令:
一RF
NVUPDINGNZACPENC—PLEICY
显示了F中的各状态位,其后又通过输入PLEICY,修改了对应的标志位。
-rf
NVUPEIPLNZNAPONC-pleicy
-rf
NVUPEIPLNZNAPOCY-
9)E(Enter)命令
格式:
Eaddress[1ist]
功能:
用键入的字节(Byte)值或替换值(字节)列表修改指定内存单元的内容参数,address表示待修改的内存单元的首地址,list是一个选择项,它表示替换值(字节)列表。
1)Eaddress
在该命令格式中,没有给出替换值。
DEBUG自动显示起始地址和它的内容,并等待用户键入替换值。
用户这时可选择按空格键(Space)、横杠键
(一)或回车键(Enter),以实现不同的操作:
按回车键(Enter)——结束E命令。
按空格键(Space)——自动显示下一个内存单元的内容,并等待键人替换值。
按照这种方式,一直进行下去,直到按回车键(Enter),才结束E命令。
按横杠键
(一)一一自动显示前一个内存单元的内容,并等待键人替换值。
按照这种方式,一直进行下去,直到按回车键,才结束E命令。
在上述两种修改方式中,如果在未键入替换值的情况下就按回车键,这时该单元的内容保持不变并结束E命令;如果只按空格键或横杠键,不键入替换值,则只显示内存单元的内容。
-e
^Error
-e0
13FC:
000023.35.23.00.35.00.22.34.
13FC:
000834.34.22.34.34.34.22.34.
13FC:
001034.34.22.34.34.34.33.34.
13FC:
001841.42.34.33.42.41.00.00.
13FC:
0020B8.FC.13.8E.D8.BB.00.00.
13FC:
00288A.
-e0
13FC:
000023.35.6723.3400.35.00.22.34.
13FC:
000834.34.22.
-e0
13FC:
000023.67.34.00.35.00.22.34.
13FC:
000834.34.22.34.34.34.22.34.
13FC:
001034.34.22.34.34.34.33.34.
13FC:
001841.42.34.33.42.41.00.00.
.-
-e0003显示从[0003]开始的内容
13FC:
000300.35.00.22.34.
13FC:
000834.34.22.34.34.34.22.34.
13FC:
001034.34.22.34.34.34.
10)F(Fill)命令
格式:
Frangelist
功能:
用list所表示的字节值对指定范围(range)的内存单元进行填充在命令中,若指定范围的内存单元数多于list中的填充字节数,则F命令将反复使用填充字节,直到填满指定范围中的每个单元;若内存单元数少于填充字节数,则F命令将只使用list中的前面若干个字节值,填充各个内存单元。
-fds:
0003L106
-e0
13FC:
000023.67.34.06.06.06.06.06.
13FC:
000806.06.06.06.06.06.06.06.
13FC:
001006.06.06.34.34.34.33.34.
13FC:
001841.42.34.33.42.41.00.
11)A(Assemble)命令
格式:
A[address]
功能:
接收从键盘键入的8086/8088指令,将其汇编成目标代码,并存放在内存单元中。
参数address是指定存放目标代码的起始地址,其后指令的起始地址将由系统自动依次安排。
一ACS:
100;从CS:
100H开始,编写程序
1409:
001C0000ADD[BX+SI],AL
1409:
001E0000ADD[BX+SI],AL
-a
1409:
0000
-acs:
000a
1409:
000Amovbx,0009
1409:
000D
这时我们再反汇编一下,可以看到,程序发生了变化。
-u0
1409:
0000B80714MOVAX,1407
1409:
00038ED8MOVDS,AX
1409:
0005BB0000MOVBX,0000
1409:
00088A07MOVAL,[BX]
1409:
000ABB0900MOVBX,0009
1409:
000D8B07MOVAX,[BX]
1409:
000FB8004CMOVAX,4C00
1409:
0012CD21INT21
A命令只是在DEBUG下,汇编程序,不能存盘,临时修改看结果。
12)Q命令:
结束DEBUG。
至此,通过调试示例程序,学习了DEBUG调试命令,并了解了8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配,调试程序的方法,但这还只是简单的程序,调试复杂的程序比此例要复杂的多,还需要我们在学习过程中,勤动手,多动脑,加强练习,在实践中进步。
1.3汇编语言程序上机操作和调试训练
一。
上机目的:
了解并逐步熟悉汇编语言的编辑方法及特点.
复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。
掌握汇编语言的编辑、汇编及连接的过程。
了解并逐步掌握运用DEBUG进行调试汇编语言程序。
二。
实验内容:
运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。
运用MASM﹒EXE文件进行汇编,修改程序中的各种语法错误,直至正确,形成*.OBJ文件。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程 上机 实验 指导书