微机原理课程上机实验指导书.docx

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

微机原理课程上机实验指导书.docx

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

微机原理课程上机实验指导书.docx

微机原理课程上机实验指导书

第一部分汇编语言程序设计实验

实验一汇编语言编程基础

汇编语言是一种面向机器的“低级”语言,是计算机能够提供给用户的最快而最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

要真正理解计算机的工作过程,理解计算机程序的执行过程,就必须学习汇编语言。

也正是因为如此,汇编语言程序设计是计算机专业和电子,自动控制等相关专业的重要课程。

但是,对于刚开始学习汇编语言的学生而言,汇编语言的一些命令非常抽象,很难理解,往往学习了很长时间也编不出满意的程序,更别说自如的应用,以致我们认为汇编语言很难掌握,影响我们学习汇编语言的兴趣。

实际上,为了掌握好汇编语言,我们可以从熟悉、使用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文件。

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

当前位置:首页 > 人文社科 > 法律资料

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

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