微机原理实验指导书新版.docx

上传人:b****8 文档编号:9039315 上传时间:2023-02-02 格式:DOCX 页数:89 大小:1.14MB
下载 相关 举报
微机原理实验指导书新版.docx_第1页
第1页 / 共89页
微机原理实验指导书新版.docx_第2页
第2页 / 共89页
微机原理实验指导书新版.docx_第3页
第3页 / 共89页
微机原理实验指导书新版.docx_第4页
第4页 / 共89页
微机原理实验指导书新版.docx_第5页
第5页 / 共89页
点击查看更多>>
下载资源
资源描述

微机原理实验指导书新版.docx

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

微机原理实验指导书新版.docx

微机原理实验指导书新版

 

微机原理与接口技术

实验指导书

主编:

王青岳

陈超波张晓倩许韫韬

西安工业大学电信学院

软件实验部分1

1汇编基本原理2

1.1程序,可直接运行的程序,汇编源程序,汇编2

1.2CPU取指令、执行指令的过程3

2汇编工具MASM5.0使用方法3

2.1汇编源程序文件的建立方法3

2.2编译阶段5

2.3链接阶段6

2.4程序调试阶段7

3软件实验项目9

软件实验一清零实验9

软件实验二码制转换实验11

软件实验三数据区移动实验13

软件实验四冒泡法排序实验16

软件实验五存储器校验实验18

软件实验六实时时钟显示实验19

硬件实验部分21

1微机实验系统简介22

2实验系统上位机软件使用方法23

2.1软件启动23

2.2如何使用星研集成环境软件23

3硬件实验项目32

硬件实验一8255PA口控制PB口实验32

硬件实验二8255控制交通灯实验34

硬件实验三74HC138译码器实验37

硬件实验四8253方波实验39

硬件实验五8259A中断控制器实验41

硬件实验六8250可编程通信实验(与微机)44

硬件实验七简易电子琴实验49

硬件实验八LED8*8点阵实验58

软件实验部分

1汇编基本原理

1.1程序,可直接运行的程序,汇编源程序,汇编

程序

程序以文件的形式存在,它是由若干条“指令”顺序排列存储构成的。

指令是对符合CPU指令集的所有信息的统称,“指令”在程序中以两种形式存在,一种是以“指令代码”的形式(在可直接运行的程序文件中),另一种是以“助记符”的形式(在汇编源程序文件中)。

无论“可直接运行的程序”还是“汇编源程序”,其中的指令都是以顺序排列的方式存储的,只是指令存在的方式不同。

可直接运行的程序

当程序中的指令是以可执行的“指令代码”的形式存在时,该程序即为可直接运行的程序,该程序所在的文件即为“可执行程序文件”。

“直接运行”是指该程序中的指令代码可以被CPU直接执行。

汇编源程序

当程序中的指令是以“助记符”的形式存在时,该程序即为汇编源程序。

该程序所在的文件即为“汇编源程序文件”。

汇编

每一条指令助记符都一一对应着一条指令代码。

将以助记符形式存储的汇编源程序文件翻译成以指令代码形式存储的可执行程序文件的过程叫汇编。

其逆过程叫反汇编。

换言之,以图1所示为例,经过汇编过程后,汇编源程序文件(*.asm)中以顺序排列方式存储着的所有指令助记符1到指令助记符n,都一一对应的转换成了可执行程序文件(*.exe)中的指令代码1到指令代码n。

图1

1.2CPU取指令、执行指令的过程

如图1所示,CPU取指、执行指令的的过程如下

1)CPU中程序计数器PC所指向的地址即为将要取出的指令代码所在的地址;

2)PC指向地址后,经读信号有效,该地址中存放的指令代码通过数据总线传送到CPU内部指令寄存器IR中,此时CPU只是取出该指令的二进制代码,尚不知道该二进制代码的具体含义;

3)CPU内部的指令译码器ID对IR寄存器中的二进制代码进行译码,经比对其内部的指令集后,CPU即可知道IR中二进制代码的具体指令代码含义;

4)知道指令代码的具体含义后,IR中的指令将被执行。

2汇编工具MASM5.0使用方法

MASM5.0宏汇编程序用于DOS环境下。

这里我们主要使用它的MASM.exe编译工具和LINK.exe链接工具。

如前所述,汇编是将助记符书写的源程序文件翻译为二进制指令代码的可执行文件的过程。

在MASM5.0工具,实际的汇编过程分为两个阶段,编译阶段和链接阶段。

图2

2.1汇编源程序文件的建立方法

可以使用任何一个文本编辑软件来建立汇编源程序文件。

如在windows环境下可以使用其“记事本”工具,在DOS环境下可以使用工具等。

需要注意的是,建立的汇编源程序文件必须以.asm为扩展名,由于DOS不支持中文和长文件名系统,因此*.asm的文件名部分不可以采用中文输入法输入文件名,常见的可以采用英文、数字或下划线等,并且字符的长度不可以超过8个(最多可以是8个)。

例如“12345678.asm”和“abc_1.asm”都是合法的,而“123456789.asm”及“汇编.asm”都是非法文件名,不能被masm5.0的编译工具识别。

此外,存盘路径也不可以出现中文或长字符。

实例:

在windows操作系统点“开始”菜单——“运行”栏,在其中输入cmd,回车,进入模拟DOS环境。

如图3所示。

MASM5.0工具通常安装在实验室电脑的D:

\或者E:

\根目录下。

在模拟DOS环境中敲入D:

\或者E:

\,进入相应盘的根目录。

然后敲edit回车,进入文本编辑环境。

如图4所示。

图3

图4

在edit编译器中,输入源程序,点击“file”菜单的“saveas”“另存为”选项,选择存盘路径为D:

\或者E:

\(根据masm5.0所在的路径选择),在FileName栏中输入汇编源程序文件名abc.asm,点击“ok”即建立汇编源程序文件成功。

如图5所示。

图5

2.2编译阶段

如图2所示,建立好汇编源程序后,需要使用masm.exe工具进行编译,编译的目的是为了得到*.obj的目标代码文件,该文件是纯二进制代码文件,不能直接显示在屏幕上。

经链接后才能得到可执行文件*.exe。

在编译阶段中,masm.exe工具将对源程序的语法进行检验,如果发现错误将给予提示。

错误提示分为严重错误和警告错误两种。

严重错误指示某些指令存在语法错误,不能形成对应的二进制机器指令。

而警告错误指示某些指令含义不够明确,需要提醒程序员注意。

程序员可以根据提示对源程序进行修改,直到得到正确的结果为止。

在汇编过程中还会产生列表文件和交叉引用文件。

列表文件的后缀为.LST,主要用于给出源程序和机器代码程序的清单,其中包含了源程序中各语句及其对应的目标代码,各语句的偏移量等相关信息,对调试程序有帮助,以供检查程序使用。

交叉索引文件的后缀为.CRF,它是一个为源程序所引用的各种符号进行前后对照的文件,主要用于给出不同程序段中互相引用的全部符号列表。

初学者可以不用建立。

举例:

在以上步骤建立abc.asm源程序文件后,对源文件进行编译。

键入

“masmabc.asm”回车,如没有语法错误,则生成目标文件,如图6所示。

图6

若有错误,则提示错误所在的行号及错误类型,回到源程序中重新改正相应错误处存盘,重复编译过程,直到没有错误才可以得到.obj的目标文件。

如图7所示

图7

2.3链接阶段

在汇编过程中形成了目标文件(.OBJ),但是在该文件中,只是将源程序的操作码部分变成了机器码,而地址操作数还是可浮动的相对地址,不是实际地址,浮动地址需要再定位。

只有经过链接过程才能形成最后的可执行文件。

链接程序的功能就是把一个或多个目标文件合并成一个可执行文件,其后缀为.EXE。

其实在链接过程中一共形成两个文件:

第一个是可执行文件(.EXE)。

默认的可执行文件名字与源程序文件相同,也可以根据用户要求修改可执行文件的名字;链接过程中形成的第二个文件是内存映像文件(.MAP),它给出了每个段的地址分配情况和长度。

如果不需要该文件则可以在链接命令执行时直接输入Enter键。

在链接过程中还与一个库文件(.LIB文件)相关。

一般的汇编程序不需要库文件。

但是当汇编语言与高级语言(如C语言)接口时需要用到库文件。

此时输入相应的库文件名字即可。

如图8所示,输入linkabc.obj,对目标文件进行链接,得到可执行文件abc.exe。

图8

2.4程序调试阶段

只有得到*.exe可执行文件后才可以进行调试,调试使用windows自带的debug.exe调试工具。

使用方法是,在图8所示状态下,输入“debugabc.exe”回车。

进入debug调试环境提示符“-”,用“-U”命令可以显示反汇编信息。

如图9所示,在-u命令后的第一行处,显示的“0b5e:

0000”即第一条指令代码存放的地址,其中0b5e是指令段段地址,0000是偏移地址。

该地址存放的指令代码是b44c,占两个字节(0000和0001两个便宜地址),因此第二行指令偏移地址从0002开始存放。

该行右边的“movah,4ch”即“b44c”这条指令代码对应的助记符。

回顾汇编过程,源程序*.asm中存放的即为图9右边所示的助记符;经过masm.exe工具编译后得到目标文件*.obj,即得到了图9中间部分的指令代码(该指令代码可以直接被CPU识别),但是此时并没有得到物理地址,只有相对的浮动地址;再经过link.exe工具链接后得到可执行文件*.exe,即得到了图9左边所示的指令代码所在的具体物理地址。

所以只有可执行文件.exe才可以直接运行,因为其中既包含了指令代码,又包含了指令代码所在的具体物理地址。

图9

在debug调试环境中,“-q”命令是退出调试状态。

“-d”,“-g”,“-t”也经常使用,如图10所示。

图10

单步执行-t后状态字信息的含义如表1所示

溢出标志OF

方向标志DF

中断标志IF

符号标志SF

零标志ZF

辅助标志AF

奇偶标志PF

进位标志CF

OV

(1)

DN

(1)

EI

(1)

NG

(1)

ZR

(1)

AC

(1)

PE

(1)

CY

(1)

NV(0)

UP(0)

DI(0)

PL(0)

NZ(0)

NA(0)

PO(0)

NC(0)

表1debug中状态字信息的含义

 

3软件实验项目

软件实验一清零实验

一、实验目的

熟悉MASM编译环境,了解程序的汇编方法,熟悉常用汇编指令。

二、实验内容

编写程序,将程序数据段内256个字节内容清零(或写为55h)

三、实验步骤

1)按照本章第2节所述,建立源程序文件*.asm(*为自己输入的文件名)

2)用masm.exe工具队源程序进行编译,得到目标文件*.obj;

3)用link.exe工具对目标文件进行链接,得到可执行文件*.exe;

4)用debug调试环境的-U命令,查看数据段段地址,用-D命令查看运行前存储器内容,用-g运行程序后再用-d查看清0(清55H)后的内容

图11调试时先用-U命令查看数据段段地址

图12运行程序前先用-d命令查看数据段,看到0000-00ffh地址中有256个AAH

图13–g连续运行程序,提示程序正常执行

图14再次用d命令看数据段,看到00-00ffH共256个单元清成了55h

五、参考程序

datasegment

bufdb256dup(0aah)

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movcx,256

leasi,buf

moval,55h

L1:

mov[si],al

incsi

loopL1

movah,4ch

int21h

codeends

endstart

六、思考题

1)画出该程序流程图

2)start:

标号处开始的两条指令起什么作用?

能不能省略?

3)程序是如何返回dos的?

不加返回DOS指令会有怎样的后果?

4)总结Loop指令的用法及功能?

其最大循环次数是CX中写多少?

循环多少次?

 

软件实验二码制转换实验

一、实验目的

了解16进制码转ascii码的方法,学习汇编指令。

二、实验内容

编写程序,将程序数据段内0,1,2,……0Ah,0Bh,0Ch,0Dh,0Eh,0Fh的16个16进制数转换为相应的ascii码,并存储在原码所在的相应地址中。

三、编程原理

取出一个数后,首先判断该数是否大于等于10(或小于10),如果大于10则加37H转换,小于10则加30H。

四、实验步骤

1)按照本章第2节所述,建立源程序文件*.asm(*为自己输入的文件名)

2)用masm.exe工具队源程序进行编译,得到目标文件*.obj;

3)用link.exe工具对目标文件进行链接,得到可执行文件*.exe;

4)用debug调试环境的-U命令,查看数据段段地址,用-D命令查看运行前存储器内容,用-g运行程序后再用-d查看转码后的内容

图15–U命令查看数据段段地址

图16程序运行前先用-d命令查看数据段内容

图17程序运行后再用-d命令查看数据段内容

 

四、参考程序

datasegment

bufdb0,1,2,3,4,5,6,7,8,9,0Ah,0bH,0CH,0Dh,0Eh,0Fh

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movcx,16

leasi,buf

L2:

moval,[si]

cmpal,10

jbL1

addal,7h

L1:

addal,30h

mov[si],al

incsi

loopL2

movah,4ch

int21h

codeends

endstart

五、思考题

1)画出程序流程图

2)总结无符号条件转移指令的功能,要求更改程序,用JA指令实现相同功能。

3)总结CMP指令和test指令的用法和区别

4)总结有符号数转移指令JG,JL功能,叙述该指令是如何使用标志位判断有符号数的大小的?

 

软件实验三数据区移动实验

一、实验目的

了解交叉区域的数据移动方法,学习汇编指令。

二、实验内容

编写程序,将程序数据段内00-000fH的16个数据传送到从0008偏移地址开始的16个字节的区域中。

三、编程原理

在没有数据区重叠的情况下,可以用递增或递减的方式随意传送。

在有数据区重叠的情况只能使用其中一种。

因此作为通用的情况,可以先将源区域的首地址和目的区域的首地址进行比较,如果源区域首地址比目的区域首地址小,无论有没有重叠区域,一律采用递减方式传送(即先传送末地址,然后地址指针递减);否则如果源区域首地址比目的区域首地址大,无论有没有数据区重叠,一律用递增方式传送。

图18数据重叠情况数据传送原理示意图

四、实验步骤

1)按照本章第2节所述,建立源程序文件*.asm(*为自己输入的文件名)

2)用masm.exe工具队源程序进行编译,得到目标文件*.obj;

3)用link.exe工具对目标文件进行链接,得到可执行文件*.exe;

4)用debug调试环境的-U命令,查看数据段段地址,用-D命令查看运行前存储器内容,用-g运行程序后再用-d查看数据传送后的内容

图19运行前后数据区的变化

五、参考程序

datasegment

buf1db0,1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh;buf1为源区域首地址

org08H

buf2db8;buf2为目的区域首地址

org10H;由于偏移地址10H-1Fh区域可能被使用,所以建立足够的数据段缓冲区

db?

;当10H被db伪指令占用后,10h-1fH都会分配给数据段使用

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movcx,16

leasi,buf1;如需改变源区域和目的区域位置关系,只要将这里的buf1

leadi,buf2;和这里的buf2倒一下次序即可

cmpsi,di

jaL1

addsi,cx

decsi;源区域首地址+16-1即为源区域末地址

adddi,cx;

decdi;目的区域首地址+16-1即为目的区域末地址

std

L3:

moval,[si]L3:

repmovsb

mov[di],al;递减方式jmpL2

decsi

decdi

loopL3

jmpL2;初学者往往在这里容易遗漏

L1:

moval,[si]L1:

cld

mov[di],alrepmovsb

incsi;递增方式L2:

movah,4ch

incdiint21h

loopL1

L2:

movah,4ch

int21h

codeends

endstart

六、思考题

1)为什么要在数据段定义足够的缓冲深度?

2)用串传送指令实现该程序功能。

 

软件实验四冒泡法排序实验

一、实验目的

了解冒泡法原理,学习多重循环的编程方法。

二、实验内容

编写程序,用冒泡法实现将数据段内5,3,3,2,1按照由小到大的顺序重新排列。

三、编程原理

冒泡即将数据两两比较,确保大的数放到右边。

N个数经历N-1次冒泡后可以找到最大的气泡。

其中“两两比较”可以用内循环的结构实现。

经历第一次冒泡后剩下的N-1个数依然是无序的,可以重新重复冒泡过程,第二次只需经历n-2次两两比较即可以找到次大的气泡。

依次类推,第N-1次冒泡后恰好可以排好所有的数。

重复执行的N-1次的冒泡过程可以用外循环结构实现。

由图21可知,内循环次数只要每次和外循环次数相等即可

图20冒泡法原理示意图1

图21冒泡法原理示意图2

四、实验步骤

1)按照本章第2节所述,建立源程序文件*.asm(*为自己输入的文件名)

2)用masm.exe工具队源程序进行编译,得到目标文件*.obj;

3)用link.exe工具对目标文件进行链接,得到可执行文件*.exe;

4)用debug调试环境的-U命令,查看数据段段地址,用-D命令查看运行前存储器内容,用-g运行程序后再用-d查看转码后的内容

5)可以用-T命令单步执行,观察每条指令运行后的寄存器及存储器变化情况,观察冒泡法的原理

图22程序运行前后的冒泡法排序情况

五、参考程序

datasegment

buf1db5,4,3,2,1

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,4;dx中存放外循环次数

L3:

movcx,dx;cx中存放内循环次数,内循环次数等于外循环次数

leasi,buf1

L2:

moval,[si];取出第一个数

cmpal,[si+1];两个数比较

jbL1;如果第一个数比第二个数大,则两两交换

xchgal,[si+1]

mov[si],al

L1:

incsi

loopL2

decdx;外循环次数减1,没减到0则跳转至L3处,重新置

jnzL3;入内循环的计数初值

movah,4ch

int21h

codeends

endstart

六、思考题

1)n个数冒泡法排序共需要多少次循环?

2)循环嵌套时总循环次数和内外循环次数是哪种数学关系?

编写内外循环嵌套的双重循环程序,实现100次内循环,300次外循环。

 

软件实验五存储器校验实验

一、实验目的

了解存储器校验原理,学习汇编指令。

二、实验内容

编写程序,将数据段1000H开始的256个字节校验。

三、编程原理

为了测试存储器每个位是否正常,可以对存储单元的每一位分别写入0和1,再立刻读出来,如果读出依然是0和1,说明写0和写1都正常,否则,说明存储器相应单元已损坏。

对每一位写入时,通常采用分别写入55H和0AAH的方式。

四、实验步骤

1)按照本章第2节所述,建立源程序文件*.asm(*为自己输入的文件名)

2)用masm.exe工具队源程序进行编译,得到目标文件*.obj;

3)用link.exe工具对目标文件进行链接,得到可执行文件*.exe;

4)用debug调试环境的-U命令,查看数据段段地址,用-g运行程序后再用-d查看数据段的内容

五、思考题

若存储器段地址为1600H,首偏移地址为0000H,要求以8088为CPU,用全译码方式扩展一片6264存储器,画出扩展电路图

 

软件实验六实时时钟显示实验

一、实验目的

了解显示相关的中断调用方式,了解软件延时原理。

学习子程序的编程方法。

二、实验内容

编写程序,在显示器上显示00:

00格式走动的电子时钟,其中冒号前为模拟分针位,冒号后为模拟秒针位(不严格要求每一秒秒针位走动一次)

三、编程原理

在显示器上显示可以采用21H中断的2号子功能或者9号子功能,以2号子功能为例,DL中必须先存放要显示字符的ascii码,AH中写入2,再执行int21h即显示一位的信息。

注意秒针位和分针位的边界处理,秒针走到59后,秒针位需要清零,分针位加1,分针位走到59后分针位和秒针位都清0。

软件延时即循环执行N次构成循环体的若干指令,每次循环的时间为T,则延时NT。

四、实验步骤

1)按照本章第2节所述,建立源程序文件*.asm(*为自己输入的文件名)

2)用masm.exe工具队源程序进行编译,得到目标文件*.obj;

3)用link.exe工具对目标文件进行链接,得到可执行文件*.exe;

4)直接运行*.exe文件,观察屏幕上显示的电子时钟的走动状态是否正常。

五、参考程序

stacksegment

db128dup(?

topdw?

stackends

codesegment

assumecs:

code,ss:

stack

start:

movax,stack

movss,ax

leasp,top

movbh,0;BH中存放分针位

movbl,0;BL中存放秒针位

L1:

moval,bh;将分针位送入码制转换子程序

callxchg_code;将分针位的高四位和低四位转换为ascii码

movdl,al;显示分针的高4位

movah,2

int21h

movdl,dh;显示分针的低4位

movah,2

int21h

movdl,':

';显示分号

movah,2

int21h

moval,bl;将秒针位送入码制转换子程序

callxchg_code;将秒针位的高四位和低四位转换为ascii

movdl,al;显示秒针的高四位

movah,2

int21h

movdl,dh;显示秒针的低四位

movah,2

int21h

movdl,0dh;显示换行字符,(并未回车)

movah,2

int21h

calldelay;延时秒针跳动一步所需的时间

incbl;秒针位加一

cmpbl,60;比较是否秒针到60秒

jbL2

movbl,0

incbh

L2:

cmpbh,60;比较是否分针到60分

jbL3

movbl,0

movbh,0

L3:

jmpL1

xchg_code:

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

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

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

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