80868088微机原理及应用Ⅰ实验指导书.docx

上传人:b****3 文档编号:10896133 上传时间:2023-05-28 格式:DOCX 页数:41 大小:94.74KB
下载 相关 举报
80868088微机原理及应用Ⅰ实验指导书.docx_第1页
第1页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第2页
第2页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第3页
第3页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第4页
第4页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第5页
第5页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第6页
第6页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第7页
第7页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第8页
第8页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第9页
第9页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第10页
第10页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第11页
第11页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第12页
第12页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第13页
第13页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第14页
第14页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第15页
第15页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第16页
第16页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第17页
第17页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第18页
第18页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第19页
第19页 / 共41页
80868088微机原理及应用Ⅰ实验指导书.docx_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

80868088微机原理及应用Ⅰ实验指导书.docx

《80868088微机原理及应用Ⅰ实验指导书.docx》由会员分享,可在线阅读,更多相关《80868088微机原理及应用Ⅰ实验指导书.docx(41页珍藏版)》请在冰点文库上搜索。

80868088微机原理及应用Ⅰ实验指导书.docx

80868088微机原理及应用Ⅰ实验指导书

 

8086/8088微机原理与接口技术

实验指导书

 

第一部分软件部分实验

实验一汇编语言上机环境及基本操作

一、实验目的及要求

1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。

2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。

3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。

二、实验内容

1建立软件工作环境

为了正常运行汇编程序,需要如下程序:

masm.exe或tasm.exe

link.exe

debug.exe

2建立汇编文件

例在屏幕上输出'Thisisamasmsample!

'

使用edit编辑如下文件,并保存为sample.asm:

;Programisanexample

datasegment

astrDB'Thisisamasmsample!

',0dh,0AH,'$'

dataends

codesegment

assumeCS:

code,DS:

data

mainprocfar

start:

PUSHDS

XORAX,AX

PUSHAX

MOVAX,code

MOVDS,AX

LEADX,astr

MOVAH,09h

INT21h

RET

mainendp

codeends

endstart

1)使用汇编

c:

\>masmsample---开始汇编

Microsoft(R)MacroAssemblerVersion5.00

Copyright(C)MicrosoftCorp1981-1985,1987.……---软件提示

ObjectFilename[sample.obj]:

---提示输入目标文件名,可省略

Sourcelisting[Nul.lst]:

---提示输入列表文件名,可省略

Crossreference[NUL.crf]:

WarningSevere

注意:

若汇编的错误提示不为0,则须重新调用editsample.asm修改错误,然后再汇编,该过程直到错误提示为0为止。

2)使用link产生EXE文件

c:

\>linksample

………….

…………

Runfile[sample.exe]:

--提示输入可执行文件名,可以省略

Listfile[NUL.map]:

--提示输入连接映象文件

Libraries[.lib]--输入文件用到的库文件名

……

…..

3)执行

c:

\>sample或debugsample.exe

附:

ms-dos方式,是windows提供的一个字符界面的shell窗口,通过“开始\程序\ms-dos方式”进入ms-dos方式后,可以按下“ALt+Enter”获得全屏幕的窗口,再该窗口下,主要通过键入命令和观察结果获得交互信息。

命令简介

1、DIR命令

显示当前目录下的文件和目录

格式为:

dir

2、CD命令

改变当前工作目录

格式为:

cdd:

\student\your_name

3、MD命令

建立一个新的目录

格式为:

mdyour_name

4、DEL命令

删除文件

格式为:

delfirst01.asm

5、RD命令

删除目录,要求要删除的目录下无任何目录或文件

格式为:

rdyour_name

6、COPY命令

拷贝命令

格式为:

copyfirst01.asmfirst02.org(将文件first01.asm复制为first01.org)

 

实验二DEBUG调试程序的应用

一、实验目的及要求

1.了解并掌握常用DEBUG调试指令。

2.能够在熟悉汇编程序开发过程的同时,利用DEBUG调试环境对源程序进行调试、跟踪及修改相应的逻辑错误。

二、实验内容

1.直接启动DEBUG程序

如DEBUGCOM在C盘的根目录下,启动的方法是:

C:

\>DEBUG

这时屏幕上会出现“_"提示符,等待键入DEBUG命令。

2.启动DEBUG程序的同时装入被调试文件

命令格式如下:

C:

\>DEBUG[d:

][PATH]filename[.EXE]

其中,【d:

】【PATH】是被调试文件所在盘及其路径,filename是被调试文件的文件名,【.EXE】是被调试文件的扩展名。

例如:

BCDSUM.EXE可执行文件在A盘,用DEBUG对其进行调试的操作命令如下。

C:

\>DEBUGA:

\BCDSUN.EXE

DOS在调用DEBUG程序后,再由DEBUG把被调试文件装入内存,当被调试文件的扩展名为COM时,装入偏移量为100H的位置,当扩展名为EXE时,装入偏移量为0的位置,并建立程序段前缀PSP,为CPU寄存器设置初始值。

3.退出DEBUG

在DEBUG命令提示符“_"下键入Q命令,即可结束DEBUG的运行,返回DOS操作

系统。

4.在DEBUG环境下建立和汇编程序

在DEBUG环境下用户可以直接建立汇编语言源程序,并可以进行编辑修改,还可以进行汇编。

比如,在DEBUG下运行如下程序:

MOVDL,33H;字符3的ASCII码送DL

MOVAH,2;使用DOS的2号功能调用

INT21H进入功能调用,输出‘3'

INT20H:

BIOS中断服务,程序正常结束。

该程序运行结果是在显示器上输出一个字符‘3’。

如果要输出其它字符,请改变程序中‘33H’为相应字符的.ASCII码。

其中涉及DOS和BIOS功能调用。

因为我们是在DOS的支持下运行汇编语言程序,所以一般情况下,不能轻易使用输入输出指令直接通过端口输入/输出,而必须使用DOS内部提供的子程序完成输入输出。

DOS功能调用就是为诸如此类的目的设置的。

DOS功能调用要求在进入INT21H调用前,首先将功能调用号送AH寄存器,并根据功能调用号准备初始数据。

也就是说INT21H的2号功能调用是输出DL寄存器中的字符。

INT20H是BIOS中断服务,这一软中断用来正常结束程序。

运行步骤:

(1)进入DEBUG

设C盘上有DEBUG.COM程序,进入DOS环境后键人DEBUG,即

C:

\>DEBUG

随后屏幕显示:

“_"号是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。

现在用A命令输入程序如下。

(2)输入程序并汇编

_A100

169C:

0100MOVDL,33

169C:

0102MOVAH,2

169C:

0104INT21.

169C:

0106INT20

169C:

0108

至此程序已输入完毕,并汇编成机器指令。

现在用G命令运行程序如下:

(3)执行机器指令程序

_G=200

3

Programterminatednormally

5.编程,并对实验一中的源程序进行DEBUG调试。

附:

常用DEBUG命令

DEBUG命令是在命令提示符”_”下由键盘键入的。

每条命令以单个字母的命令符开头,然后是命令的操作参数,操作参数与操作参数之间,用空格或逗号隔开,操作参数与命令符之间用空格隔开,命令的结束符是回车键(ENTER)。

命令及参数的输入可以是大小写的结合。

Crtl+Break键可中止命令的执行。

Crtl+NumLoek键可暂停屏幕卷动,按任一键继续。

所用的操作数均为十六进制数,不必写H。

1.汇编命令A

格式:

(1)A<段寄存器名>:

<偏移地址>

(2)A<段地址>:

<偏移地址>

(3)A<偏移地址>

(4)A

功能:

汇编命令是将用户输入的汇编语言指令,汇编为可执行的机器指令。

键人该命令后显示段地址和偏移地址并等待用户从键盘逐条键入汇编语言指令。

每当输入一行语句后按“ENTER"键,输入的语句有效。

若输入的语句中有错,DEBUG会显示“^Error",要求用户重新输入,直到显示下一地址时用户直接键入回车键返回到提示符”_”。

其中

(1)用指定段寄存器内容作段地址;(3)用CS内谷作段地址;(4)以cs:

100作地址。

以后命令中提及的各种地址形式,均指

(1)、

(2)、(3)中A命令后的地址形式。

2.比较命令C

格式:

C<源地址范围>,<目标地址>

其中<范围>是由<起始地址×终止地址>指出的一片连续单元,或由<起始地址>L<长度>指定的。

功能:

从<源地址范围>的起始地址单元起逐个与目标起始地址以后的单元顺序比较单元的内容,直至源终止地址为止。

遇有不一致时,以<源地址><源内容><目标内容×目标地址>的形式显示失配单元及内容。

3.显示内存单元命令D

格式:

(1)D<地址>

(2)D<地址范围>

(3)D

其中

(1)以CS为段寄存器;(3)显示CS:

l00为起始地址的一片内存单元内容。

功能:

该命令将显示一片内存单元的内容,左边显示行首字节的段地址:

偏移地址,中间是以十六进制形式显示的指定范围的内存单元内容,右边是与十六进制数相对应字节的ASCII码字符,对不可见字符以'.'代替。

4.修改内存单元命令E

格式:

(1)E<地址><单元内容>

(2)E<地址><单元内容表>

其中<单元内容>是一个十六进制数,或是用引号'(或")括起来的字符串;<单元内容表>是以逗号分隔的十六进制数,或是用,或"括起来的字符串,或者是二者的组合。

功能:

(1)将指定内容写入指定单元后显示下一地址,以代替原来内容。

可连续键入修改内容,直至新地址出现后键入回车为止;

(2)将<单元内容表>逐一写入由<地址>开始的一片单元中,该功能可以将由指定地址开始的连续内存单元中的内容,修改为单元内容表中的内容。

例如:

_EDS:

30F8,AB,’AB’

该命令执行后,从DS:

30到DS:

33的连续4个存储单元的内容将被修改为F8H,ABH,4lH,42H。

5.填充内存命令F

格式:

F<范围><单元内容表>

功能:

将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。

例如:

F05BC:

200L10B2,‘XYZ',3C

该命令将由地址05BC:

200开始的10H(16)个存储单元顺序填充“B2,58,59,5A,3C,B3,58,59,5A,3C,B2,58,59,5A,3C,B2"

6.连续执行命令G

格式:

(1)G

(2)G=<地址>

(3)G=<地址>,<断点>

其中

(2)、(3)中的”=”是不可缺省的。

功能:

默认程序从CS:

IP开始执行。

程序从当前的指定偏移地址开始执行。

从指定地址开始执行,到断点自动停止并显示当前所有寄存器、状态标志位的内容和下一条要执行的指令。

DEBUG调试程序最多允许设置l0个断点。

7.跟踪命令T

格式:

T【=<地址>】【<条数>】

功能:

如果键入T命令后直接按“ENTER"键,则默认从CS:

IP开始执行程序,且每执行一条指令后要停下来,显示所有寄存器、状态标志位的内容和下一条要执行的指令。

用户也可以指定程序开始执行的起始地址。

<条数>的缺省值是一条,也可以由<条数>指定执行若干条命令后停下来。

例如:

T

该命令执行当前指令并显示所有寄存器、状态标志位的内容和下一条要执行的指令。

又例如:

T10

该命令从当前指令开始执行10H条指令后停下来,所有寄存器、状态标志位的内容和下一条要执行的指令。

8.反汇编命令U

格式:

(1)U<地址>

(2)U<地址范围>

功能:

反汇编命令是将机器指令翻译成符号形式的汇编语言指令。

该命令将指定范围内的代码以汇编语句形式显示,同时显示地址及代码。

注意,反汇编时一定确认指令的起始地址后再作,否则将得不到正确结果。

地址及范围的缺省值是上次U指令后下一地址的值。

这样可以连续反汇编。

9.执行过程命令P

格式:

P

功能:

执行一条指令或一个过程(子程序),然后显示各寄存器的状态。

说明:

该命令主要用于调试程序。

它与跟踪命令T的作用类似,T命令是跟踪一条或多条指令,而P命令是执行一条指令(包括带重复前缀的数据串操作指令)或一个完整的过程(子程序)。

例如:

设有如下指令序列

MOVAH,02H

INT21H;

当要执行1NT21H这条指令时,若用T命令进行跟踪,则进入INT21H程序(DOS功能调用)后,需要数十次T命令才能返回当前程序;若采用P命令进行调试,则只执行1NT20H一条指令,执行完立即返回,给调试者的感觉好象是执行了一条普通指令一样。

因此,当以后遇到CALL、INTn指令或带重复前缀的数据串操作指令时,若不想观察相应过程的详细执行过程,就可以用P命令。

10.定义待装入文件命令N

格式:

N【d:

】【PATH】fllename[.EXE】

功能:

N命令一般和L命令联合使用,为L命令定义指定路径的待装入文件。

11.装入文件命令L

格式:

L<地址><盘号><起始逻辑扇区><所读扇区个数n>

其中<地址>的缺省值为CS:

100。

逻辑扇区可由物理扇区号换算得到,以双面双密度盘为例:

物理扇区是按0面0道1区,0面0道2区,…….0面0道9区,0面l道l区,……0面39道9区,l面0道l区,……l面39道9区排列。

而逻辑扇区与物理扇区号的对应关系为物理扇区0面0道l扇区至9扇区,逻辑扇区号为0~8;物理扇区l面0道l扇区至9扇区,逻辑扇区号为9~llH:

物理扇区0面l道l扇区至9扇区,逻辑扇区号为12----1AH……这样每道先0面后l面一直排下去。

其中<盘号>为0、l或2,0表示A盘,l表示B盘,2表示硬盘。

功能:

将<盘号>指定的盘上,从<起始逻辑扇区>起,共n个逻辑扇区上的所有字节顺序读入指定内存地址的一片连续单元。

当L后的参数缺省时,必须在L之前由N命令指定(或进A.DEBUG时一并指出)所读盘文件名。

此时L执行后将该文件装入内存。

例如:

_NEXAMPLE

_L

将当前盘上的EXAMPLE文件装入CS:

100起始的一片内存单元。

12.内存单元搬家命令M

格式:

M<源地址范围×目标起始地址>

其中源及目标地址若仅输入偏移量,则隐含相对DS。

功能:

把<源地址范围>中的内容顺序搬至<目标起始地址>起的一片连续单元。

例如:

MCS:

100110600

该命令把由CS:

100起到CS:

110止共17个字节搬至DS:

600至.DS:

610的一片单元。

13.写盘命令W

格式:

W<地址><盘号><起始逻辑扇区><所写逻辑扇区数n>

功能:

该命令是将内存<地址>起始的一片单元内容写入指定扇区。

只有W而没有参数时,与N命令配合使用使用户完成写盘操作。

用户可用N命令先定义被调试的文件,再将被调试文件的字节长度值送BX、CX(BX寄存器存放字节长度值的高位,CX寄存器存放字节长度值的低位),.最后用写盘命令W将被调试文件存入磁盘。

例如:

欲将D1.COM文件写入磁盘,设文件长度为40字节,可进行如下操作。

_ND1.COM

-RCX

CXxxxx:

0040

_RBX

BXxxxx:

0000

_W

Writing00040bytes

14.显示命令R

格式:

(1)R

(2)R<寄存器名>

功能:

显示当前所有寄存器内容、状态标志及将要执行的下一指令的地址(即CS:

IP)、机器指令代码及汇编语句形式。

其中对状态标志寄存器FLAG以状态标志位的形式显示,详见教材。

15.端口输出命令。

格式:

O<端口地址><字节>

功能:

将该<字节>由指定<端口地址>输出。

例如:

O2F4F

该命令将4FH从2FH口输出.

16.搜索指定内存命令S

格式:

S<地址范围><表>

功能:

在指定范围搜索表中内容,找到后显示表中元素所在地址

例如:

S10011041

屏幕显示:

04BA:

0104

04BA:

010D

表示在l00H~llOH之间的一片存储单元中,104H和10DH两个单元有41H。

又如:

SCS:

100L10‘AB'

表示在当前代码段位移100H至11OH处搜索连续3个字节内容为41H、42H(分别对应A、B的ASCII码)的单元。

17.十六进制算术运算指令H

格式:

H<值l><值2>

功能:

求十六进制数<值l>和<值>的和与差并显示结果。

18.端口输入命令I

格式:

I<端口地址>

功能:

将从指定端口输入的内容显示出来。

19.结束DEBUG返回DOS命令Q

格式:

Q

功能:

返回DOS提示符下。

 

实验三多精度十进制加法程序设计

一、实验目的

1.学习数据传送和算术运算指令的用法。

2.掌握加法计算程序的设计思路和设计方法。

3.熟悉在PC机上建立、汇编、连接和调试程序的方法。

二、实验内容

1.将两个多精度十进制数相加。

2.要求被加数和加数均以组合BCD码形式各自存放在以DATA1和DATA2为首的连续的5个内存单元中,结果送回被加数单元。

三、编程思路

该题目要求掌握ADC指令和DAA指令的应用。

为了实现指定功能,应从以下几个方面考虑:

(1)组织数据时,要按照高位在高地址,低位在低地址的原则。

(2)要完成多精度字节数据相加,最低字节用ADD指令,而其他高位字节则要用ADC指令。

(3)因为被加数和加数都以BCD码表示,所以在加法指令之后要有加法调整指令。

(4)题目要求完成5个字节十进制数相加,所以要用循环程序。

四、参考程序

Crlfmacro

Movdl,0dh

Movah,0ah

Int21h

Movdl,0ah

Int21h

Endm

Datasegment

Data1db37h,49h,53h,19h,46h

Data2db90h,87h,49h,31h,25h

Dataends

Codesegment

Assumecs:

code,ds:

data

Start:

Movax,data

Movds,ax

Movsi,offsetdata1

Movbx,5

Calldispl

Crlf

Movsi,offsetdata2

Movbx,5

Calldispl

Crlf

Movsi,offsetdata1

Movdi,offsetdata2

Movcx,5

Calladda

Movsi,offsetdata1

Movbx,5

Calldispl

Crlf

Movah,4ch

Int21h

Displprocnear

Addsi,bx

Decsi

Ds1:

movdh,[si]

Movdl,dh

Movcl,4

Shrdl,cl

Ordl,30h

Movah,02h

Int21h

Movdl,dh

Anddl,0fh

Ordl,30h

Int21h

Decsi

Decbx

Jnzds1

Ret

Displendp

 

Addaprocnear

CLC

Ad1:

moval,[si]

Adcal,[di]

Daa

Mov[si],al

Incsi

Incdi

Loopad1

Ret

Addaendp

Codeends

Endstart

五、思考题

1)在子程序ADDA中,为什么需要CLC这条语句,没有行不行?

2)在这个程序中,回车换行是用宏指令完成的,如果把宏指令改为子程序应如何设计程序?

3)如果要完成多精度十进制减法,应如何设计程序?

实验四数学表达式计算

一、实验目的

1.掌握算术运算指令的应用方法。

2.理解计算机中除法溢出的含义。

二、实验内容

1.设W、X、Y、Z均为l6位带符号数。

2.要求完成计算表达式(W-(X*Y+Z-220))/X。

3.将表达式的商和余数存入数据区RESULT单元开始的区域中。

三、编程思路

该题目要求掌握乘除法运算中带符号数和无符号数运算的区别。

为了实现指定功能,应从以下几个方面考虑:

(1)带符号数的乘除法运算应选用的指令。

(2)乘、除法运算中操作数的长度问题。

(3)带符号数的扩展问题。

四、参考程序清单

DATASEGMENT

WDW-304

XDW1000

YDW-12

ZDW20

RESULTDW2DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,X

IMULY

MOVCX,Ax

MOVBX,DX

MOVAX,Z

CWD

ADDCX,AX、

ADCBX,DX

SUBCX,220

SBBBX,0

MOVAX,W

CWD

SUBAX,CX

SBBDX,BX

IDIVX

MOVRESULT,AX

MOVRESULT+2,DX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

五、思考题

1)如果是无符号数,乘除时应如何选择指令?

2)如果要求表达式中的X,Y,Z,W从键盘输入应如何设计程序?

实验五分支结构程序设计

一、实验目的

1.掌握多分支结构程序设计的方法;

2.掌握无符数和带符号数比较大小转移指令的区别。

二、实验内容

1.在数据区中定义三个带符号字节变量。

2.编写程序将其中的最大数找出送到MAX单元中。

三、编程思路

该题目要求掌握多分支程序设计方法。

为了实现指定功能,应从以下几个方面考虑:

(1)确定编程的算法思想。

(2)确定带符号数比较大小转移应选择哪一组条件转移指令。

四、参考程序清单

DATASEGMENT

XDB115

YDB23

ZDB-20

MAXDB?

DATAENDS

CODESEGMENT

ASSUMEDS:

DATA,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

MOVAL,X

CMPAL,Y

JGNEXT

MOVAL,Y

CMPAL,Z

JGEXIT

MOVAL,Z

JMPEXIT

NEXT:

CMPAL,Z

JGEXIT

MOVAL,Z

EXIT:

MOVMAX,AL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART;返回DOS

五、思考题

1)如果用子程序的方法来设计程序,应如何修改此程序?

2)如果是无符号数比较大小,条件转移时应选择哪一组指令?

 

实验六循环结构程序设计

一、实验目的

1.掌握循环结构程序设计的方法;

2.掌握数据块传送程序设计的方法;

3.掌握串传送指令的应用。

二、实验内容

1.编写程序实现将数据段STR1单元开始的20个字符移到STR2开始的存储区。

2

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2