王建霞微机原理实验指导书.docx

上传人:b****9 文档编号:23368333 上传时间:2023-05-16 格式:DOCX 页数:58 大小:434.56KB
下载 相关 举报
王建霞微机原理实验指导书.docx_第1页
第1页 / 共58页
王建霞微机原理实验指导书.docx_第2页
第2页 / 共58页
王建霞微机原理实验指导书.docx_第3页
第3页 / 共58页
王建霞微机原理实验指导书.docx_第4页
第4页 / 共58页
王建霞微机原理实验指导书.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

王建霞微机原理实验指导书.docx

《王建霞微机原理实验指导书.docx》由会员分享,可在线阅读,更多相关《王建霞微机原理实验指导书.docx(58页珍藏版)》请在冰豆网上搜索。

王建霞微机原理实验指导书.docx

王建霞微机原理实验指导书

《微机原理》实验指导书

王建霞

河北科技大学信息学院

2005年3月

前言

本指导书结合教材《微型运算机原理及应用》的内容和本、专科生实验大纲的要求编制。

软件实验中给出了程序框图和主要程序清单。

硬件实验中给出了硬件结构图及连线图。

其中程序清单仅仅是为了学生编程序时作为参考用的,学生在做实验前,必需充分预习,自己编制程序,才能准予上机做实验。

本指导书中除大纲中规定必做的实验外,还给大家提供了一些有实用性的选做实验。

以知足课外自由实验上机学生的要求。

本实验指导书内容较丰硕、系统,除能够作为运算机专业大学本科实验指导书外,也能够作为非运算机专业的研究生学习微型运算机的实验指导书,也可作为各类型的微型运算机培训班的实验指导书。

本实验指导书由王建霞、靳玉福、陈义峰老师编写,因水平有限,不免有不足的地方,请老师同窗多提宝贵意见。

编者于

实验一Debug练习及汇编语言程序的成立和运行……………………(4)

实验二两个多位十进制数相加的实验…………………………………(11)

实验三十进制数乘除运算编程…………………………………………(15)

实验四 排序实验…………………………………………………………(23)

实验五系统熟悉实验……………………………………………………(30)

实验六存储器扩展实验…………………………………………………(35)

实验一Debug练习及汇编语言程序的成立和运行

一、预习内容

用debug成立和运行汇编语言程序

debug是调试汇编语言程序的工具,它不仅能跟踪程序的运行,还可显示修改内存与寄放器内容,以便在调试程序中检查程序,找错,改错;它还支持小汇编,直接对小段程序进行汇编;也可对盘进行读写操作。

但debug不宜汇编较长的程序,不便于分块程序的设计,不能利用绝大多数ASM和MASM提供的伪指令。

debug的进入是DOS状态下键入debug文件名,便进入debug状态,在debug的提示符“—”下键入debug命令。

C>debug↙

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

命令及参数的输入能够是大小写的结合,CtrL+break键中止命令的执行。

debug下所用的数均为十六进制数,且没必要写H。

debug的常常利用命令有:

1.汇编命令A

格式:

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

<位移>

(2)A<段地址>:

<位移>

(3)A<位移>

(4)A

功能:

键入该命令后显示段地址和位移并等待用户从键盘逐条键入汇编命令,逐条汇编成代码指令,直到显示下一地址时用户直接键入回车键返回到提示符“—”。

其中

(1)用指定寄放器内容作段地址,(3)用CS内容作段地址,(4)用CS:

0100作地址。

以后其它命令中提及的各类“地址”形式,均为

(1)、

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

2.反汇编命令U

格式1:

U<地址>

格式2:

U<地址范围>

功能:

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

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

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

如此能够持续反汇编。

3.显示内存命令

格式:

(1)D<地址>;以CS为段寄放器

(2)D<地址范围>

(3)D;显示CS:

0100起始的一片内容。

功能:

以两种形式显示指定内存范围内容。

一种形式为十六进制内容,一种形式为相应字节的ASCII码字符,对不可见字符以“·”代替。

4.修改内存命令E

格式:

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

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

功能:

(1)将指定内容写入指定单元后显示下一地址,可持续键入修改内容,直到新地址出现后键入↙为止。

(2)将<单元内容表>一一写入由<地址>开始的一片单元。

5.填充内存命令F

格式:

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

功能:

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

例如:

—F12FF:

00000100A↙

—D12FF:

00000100↙

6.显示并修改寄放器命令R

格式1:

R

格式2:

R<寄放器名>

功能:

格式1显示当前所有寄放器内容,状态标志及将要执行的下一指令的地址,代码及汇编语句格式。

其中对状态标志FLAG以每位的形式显示。

格式2显示指定寄放器内容。

例如:

RIP↙

7.单步执行并显示系统环境T

格式:

T[=<地址>][<条数>]

功能:

<地址>的缺省值是当前IP值,<条数>的缺省值是一条。

执行由指定地址起始的<条数>指定的若干条指令。

例如:

—T;执行当前指令并显示状态

—T10;从当前指令始执行10H条指令。

8.持续执行命令G

格式:

(1)G=<起始地址><断点地址>

(2)G<结束地址>;从IP指向的地址开始执行程序到结束地址。

9.退出debug命令Q

—Q↙;进入DOS状态下

C>

例如:

利用串操作传送指令将0FFH送入附加段的0180H开始的128个字节存储单元中,编写一段程序。

1.进入DEBUG状态

C>DEBUG↙

—debug的常常利用命令有:

1.汇编命令A

格式:

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

<位移>

(2)A<段地址>:

<位移>

(3)A<位移>

(4)A功能:

键入该命令后显示段地址和位移并等待用户从键盘逐条键入汇编命令,逐条汇编成代码指令,直到显示下一地址时用户直接键入回车键返回到提示符“—”。

其中

(1)用指定寄放器内容作段地址,(3)用CS内容作段地址,(4)用CS:

0100作地址。

以后其它命令中提及的各类“地址”形式,均为

(1)、

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

2.用A命令编辑源程序

一A↙

××××:

0100MOVDI,0180↙

0103MOVCX,80↙

0106MOVAL,FF↙

0108REPSTOSB↙

010AHLT↙

010B↙

3.用U命令反汇编以上源程序

一UCS:

0100↙

××××:

0100BF8001MOVDI,0180

××××:

0103B98000MOVCX,0080

××××:

0106BOFFMOVAL,FF

××××:

0108F3REPE

××××:

0109AASTOSB

××××:

010AF4HLT

4.若源程序有错可返回第2步用A命令进行修改,再进行第3步。

若无错误,可运行程序。

5.用R命令观察程序未执行前,程序中各有关寄放器内容,并填入括号内。

一R↙

AL=()DI=()CX=()DS=()

CS=()IP=()

6.用D命令观察程序未执行前,寄存结果的存储区的内容。

—DES:

0180↙

7.用T命令执行一条指令,观察DI寄放器内容的转变,并填入此值:

—T↙

DI=()IP=()CS=()

8.用T命令一条条执行程序,并观察相应寄放器内容或存储单元内容,一直执行到最后一条指令为止。

9.用D命令观察最终结果

—DES:

0180↙

现在可观察到ES:

0180~ES:

01FF单元中的内容已全数改成FF。

10.用R命令改变IP值,使它返回到程序的第一条指令处。

—RIP↙

IP××××

:

0100↙

11.用R命令以观察IP值;已改成0100

—R↙

12.用A命令对存储数据的缓冲区改变位置

—A0100↙

××××:

0100MOVDI,0200↙

××××:

0103↙

13.用D命令观察程序执行前,存储区的内容

—DES:

0200↙

14.用G命令设置断点为HLT指令处

—G010A↙

15.再用D命令观察执行结果

—DES:

0200↙

将会观察到ES:

0200~ES:

027F的内容改变成FF。

二、可执行文件的生成

1.在DOS状态下键入EDIT文件名,便进入全屏幕编辑状态。

例如:

C>EDITTEST.ASM↙

CODESEGMENT

ASSUMECS:

CODE,DS:

CODE

START:

MOVAX,CODE

MOVDS,AX

MOVDX,OFFSETAA

MOVAH,09

INT21H

MOVAH,4CH

INT21H

AADB′HOWAREYOU$′

CODEENDS

ENDSTART

2.汇编源程序

用汇编程序对源程序进行汇编生成机械能够识别的机械语言,即生成了目标文件(*.obj)。

汇编的结果给出了程序的错误语句,能够按照错误提示修改源程序。

其操作步骤如下:

C>MASM↙

Microsoft(R)MacroAssemblerVersion

Copyright(c)MicrosoftCorp1981—1985,1987

ALLrightsreserved

Sourcefilename[.ASM]test↙

Objectfilename[]:

SourceListing[]:

Cross—reference[]:

51736+405848bytesSymbolSpacefree

0warningerrors

0severeerrors

汇编的对象是用户编写的汇编语言源程序,它必需是以ASM为扩展名。

汇编程序的输出文件有三个,第一个目标文件,它以OBJ为扩展名,产生OBJ文件是咱们进行汇编操作的主要目的;第二个是列表文件,它以LST为扩展名,列表文件同时给出源程序和机械语言程序,从而能够使调试变得方便,列表文件是可有可无的,如不要,直接键入回车键即可,如需要,则打入文件名和回车;第三是交叉符号表,此表给出了用户概念的所有符号,对每一个符号都列出了将其概念的所在行号和引用的符号,并在概念行号上加“#”号,同列表文件一样,交叉符号表为调试工作带来专门大的方便。

交叉符号表也是可有可无的,如不需要,那么在屏幕上出现提示信息[]:

时,打入回车即可。

汇编进程结束时,会给出源程序中的警告性错误[warningErrors]和严峻错误[severeErrors],前者指一般性错误,后者指语法性错误,当存在这两类错误时,屏幕上除指犯错误个数表外,还给犯错误信息代号和错误所在的行号。

若是汇编进程中有错误,则程序员应该从头用编辑命令进行修改,再进行汇编,最终直到汇编正确通过。

要指出的是汇编进程只能指出源程序中的语法错误,并非能指出算法错误和其它错误。

3.用Link命令产生可执行文件(*.EXE文件)

汇编进程按照源程序产生二进制的目标文件(OBJ文件),但OBJ文件用的是浮动地址,它不能直接上机执行。

所以还必需利用链接程序(LINK)将OBJ文件转换成可执行的EXE文件。

Link命令还能够将一个目标文件和其它多个模块(这些模块是由用户编写的,也能够是某个程序库中存在的)链接起来。

具体操作如下:

C>LinkTEST↙

现在屏幕上见到如下回答信息:

IBMPersonalcomputerLinker

Version(C)copyrightIBMCorpl981,1982,1983

RUNFile[test.EXE]:

ListFile[]:

test↙G

Libraries[.LiB]:

Waming:

1NOStacksegment

therewas1errordetected

Link命令有一个输入文件,即OBJ文件,有时,用户程序用到库函数,现在,对于提示信息Libraries[.LiB]要输入库名。

Link进程产生两个输出文件,一个是扩展名为EXE的执行文件,产生此文件是Link进程的主要目的,另一个是扩展名MAP的列表分派文件,有人也称它为映像文件,它给出每一个段在内存中的分派情形MAP文件也是可有可无的。

4.程序执行

C>test↙

若是运行结果不正确可把文件装入debug进行调试,发觉错误并更正。

C>debug↙

—U↙

三、实验设备

硬件环境IBM/PC及其兼容机

软件环境操作系统版本以上

调试程序编辑程序

汇编程序连接程序

四、实验内容

(1)

1.将数据段中0200H字节存储单元中的二位BCD码转换为二个ASCII码送0201H开始的二个字节单元中,编写一段程序。

2.编写一段程序,在内存中自0200H地址开始的持续七个单元中存入0~9的平方值。

要求利用计算法查表求0210H单元中指定数0~9中的任意一数的平方值,并将所求平方值存入0211H单元中。

五、实验内容

(2)

1.显示一个字符‘A’

2.从键盘上读取一个字符并显示

3.距离秒显示8个A

实验二两个多位十进制数相加的实验

一、实验目的

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

2.熟悉在PC机上成立、汇编、连接、调试和运行8088/8086汇编语言程序的进程。

二、实验内容

将两个多位十进制数相加。

要求被加数均以ASCII码形式各自顺序寄存在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回DATAl处。

三、程序框图

四、程序清单

 CRLFMACRO;成立宏指令CRLF

MOVDL,0DH

MOVAH,02H

INT21H

MOVDL,0AH

MOVAH,02H

INT21H

ENDM

DATASEGMENT

DATA1DB33H,39H,31H,37H,34H;第一个数据(作为被加数)

DATA2DB36H,35H,30H,38H,32H;第二个数据(作为加数)

DATAENDS

STACKSEGMENT;堆栈段

STADB20DUP(?

TOPEQU【

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVAX,TOP

MOVSP,AX

MOVSI,OFFSETDATA2

MOVBX,05

CALLDISPL;显示被加数

CRLF

MOVSI,OFFSETDATAl

MOVBX,05;显示加数

CALLDISPL

CRLF

MOVDI,OFFSETDATA2

CALLADDA;加法运算

MOVSI,OFFSETDATAl

MOVBX,05;显示结果

CALLDISPL

CRLF

MOV  AX,4C00H

INT21H

DISPLPROCNEAR;显示子功能

DS1:

MOVAH,02

MOVDL,[SI+BX-1];显示字符串中一字符

INT21H

DECBX;修改编移量

JNZDSl

RET

DISPLENDP

ADDAPROCNEAR

MOVDX,SI

MOVBP,DI

MOVBX,05

AD1:

SUBBYTEPTR[SI+BX-1],30H

SUBBYTEPTR[DI+BX-1],30H

DECBX;将ASCII码表示的数字串转化

为十六进制的数字串

JNZADl

MOVSI,DX

MOVDI,BP

MOVCX,05;包括进位,共5位

CLC

AD2:

MOVAL,[SI]

MOVBL,[DI]

ADCAL,BL;带进位相加

AAA;非组合BCD码的加法调整

MOV[SI],AL

MOVSI,OFFSETDATA1;结果送被加数区

INCSI

INCDI;指向下一名

LOOPAD2;循环

MOVSI,DX

MOVDI,BP

MOVBX,05

AD3:

ADDBYTEPTR[SI+BX-1],30H

ADDBYTEPTR[DI+BX-1],30H

DECBX;十六进制的数字串转化为ASCII码表示的数字串

JNZAD3

RET

ADDAENDP

CODEENDS

ENDSTART

五、试探题

自编两个多位十进制数相减程序。

实验三十进制数乘除运算编程

(1) 两个数相乘的实验

一、实验目的

掌握乘法指令和循环指令的用法

二、实验内容

实现十进制数的乘法。

被乘数和乘数均以ASCII码形式寄存在内存中,乘积在屏幕上显示出来。

三、程序框图

四、程序清单

DATASEGMENT

DATAlDB32H,39H,30H,35H,34H

DATA2DB33H

RESULTDB6DUP(00H)

DATAENDS

STACKSEGMENT

STADB20DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVAX,TOP

MOVSP,AX

MOVSI,OFFSETDATA2

MOVBL,[SI];乘数2→BL

ANDBL,00001111B;屏蔽高4位,ASCII码转化为十六进制数

MOVSI,OFFSETDATAl

MOVDI,OFFSETRESULT

MOVCX,05

LOOPl:

MOVAL,[SI]

ANDAL,00001111B;取被乘数1,ASCII变十六进制数

INCSI;指向被乘数1的下一字符单元

MULBL;相乘

AAM;AAM调整

ADDAL,[DI];结果低位与前次计算的进位相加

AAA;AAA调整

MOV[DI],AL

INCDI;结果送存到下一单元

MOV[DI],AH

LOOPLOOP1;运算机结果高位进位送存

MOVCX,06

MOVSI,OFFSETRESULT

DISPL:

MOVAH,02

MOVDL,[SI]

ADDDL,30H

INT21H

DECSI

LOOPDISPL;显示结果

MOVAX,4C00H

INT21H;结束

CODEENDS

ENDSTART

(2) BCD码相乘的程序

一、实验目的

掌握用组合的BCD码表示数据,并熟悉如何实现组合BCD码乘法运算

二、实验内容

实现BCD码的乘法,要求被乘数和乘数以组合的BCD码形式寄存,各占一个内存单元。

乘积寄存在另外两个内存单元中。

由于没有组合的BCD码乘法指令,程序中采用将乘数1作为计数器,累加另一个乘数的方式取得计算结果。

三、程序框图

四、程序清单

DISPLMACRO

ADDDL,30H

     MOVAH,02

     INT21H

ENDM

CRLFMACRO

MOVDL,0DH

MOVAH,02

INT21H

MOVDL,0AH

MOVAH,02

INT21H

ENDM  

DATASEGMENT

DATAlDB01001000B;48H

DATA2DB01110101B;75H

RESULTDW?

DATAENDS

STACKSEGMENT

STADB20DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVAX,TOP

MOVSP,AX

MOVDI,OFFSETRESULT;指向结果存储区

MOVSI,OFFSETDATAl;指向乘数1

MOVAH,[SI]

MOVCL,04

SHRAH,CL;显示乘数1高位字节

MOVDL,AH

DISPL

MOVAL,[SI]

MOVBL,AL;显示乘数1低位字节

ANDAL,00001111B

MOVDL,AL

DISPL

CRLF;回车换行

MOVSI,OFFSETDATA2;指向乘数2

MOVAH,[SI]

MOVCL,04

SHRAH,CL;显示乘数2高位字节

MOVDL,AH

DISPL

MOVAL,[SI]

ANDAL,00001111B

MOVDL,AL;显示乘数2低位字节

DISPL

CRLF;回车换行

XORDX,DX;DX(部份积)清0

S1:

CMPBL,0

JZS2;乘数1的值已减为O否?

CLC

MOVAL,[SI]

ADCAL,DL;乘数2加部份积低位

DAA;组合的BCD码调整

MOVDL,AL;结果送部份积高位

MOVAL,00H

ADCAL,DH;往部份高位送进位

DAA;组合BCD码调整

MOVDH,AL;结果送部份积高位

MOVAL,BL

DECAL;乘数1的值减1

DAS;组合BCD码减法调整

MOVBL,AL;结果送BL

JMPS1

S2:

MOV[RESULT],DX;结果送存储器

MOVSI,DX

MOVCL,4

SHRDH,CL

MOVDL,DH

DISPL

MOVDX,SI;显示结果高2位

ANDDH,00001111B

MOVDL,DH

DISPL

MOVDX,SI

MOVCL,4

SHRDL,CL

DISPL

MOVDX,SI;显示结果低2位

ANDDL,00001111B

DISPL

CRLF;回车换行

S3:

MOVAX,4C00H

INT21H;返回DOS

CODEENDS

ENDSTART

实验四 排序实验

一、实验目的

掌握用汇编语言编写的程序的思路和方式。

二、实验内容

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

当前位置:首页 > 总结汇报 > 实习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1