微机原理及接口技术实验08文天.docx

上传人:b****7 文档编号:9568534 上传时间:2023-02-05 格式:DOCX 页数:37 大小:182.77KB
下载 相关 举报
微机原理及接口技术实验08文天.docx_第1页
第1页 / 共37页
微机原理及接口技术实验08文天.docx_第2页
第2页 / 共37页
微机原理及接口技术实验08文天.docx_第3页
第3页 / 共37页
微机原理及接口技术实验08文天.docx_第4页
第4页 / 共37页
微机原理及接口技术实验08文天.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

微机原理及接口技术实验08文天.docx

《微机原理及接口技术实验08文天.docx》由会员分享,可在线阅读,更多相关《微机原理及接口技术实验08文天.docx(37页珍藏版)》请在冰豆网上搜索。

微机原理及接口技术实验08文天.docx

微机原理及接口技术实验08文天

微机原理与接口技术实验计算机08

2010年8月

软件试验部分

实验一初级程序的编写与调试实验

一、实验目的

1.熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

2.深入了解数据在存储器中的存取方法,及堆栈中数据的压入与弹出。

3.掌握各种寻址方法以及简单指令的的执行过程。

二、实验内容

1、设堆栈指针SP=2000H,AX=3000H,BX=5000H,请编一程序段将AX的内容和BX的内容进行交换。

请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行编写、汇编和调试。

2a、设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将0AH、0BH、0CH、0DH、0EH等数据顺序装入存储器偏移地址300H~304H单元。

2b、在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程?

当数据传送完毕时,AX中的内容是什么?

程序清单如下:

MOVAX,BX

MOVAX,0304

MOVAX,[0304]

MOVAX,[BX]

MOVAX,0001[BX]

MOVAX,[BX][SI]

MOVAX,0001[BX][SI]

3、设AX=0002H,编一个程序段将AX的内容乘以10,要求用移位的方法完成。

三、实验要求

1、实验前要作好充分准备,包括汇编程序清单、调试步骤、调试方法以及对程序结果的分析等。

2、本实验要求在PC机上进行。

3、本实验要求只能在DEBUG调试状态下进行,包括汇编程序、调试程序、执行程序。

4、三个实验做完后,有时间将实验二所附程序看一看,不懂得语句用DEBUG运行一下,以便下次弄懂程序。

四、编程提示

实验内容1

将两个寄存器的内容进行交换时,必须有一个中间寄存器才行。

如果用堆栈作为中间存储单元,必须遵循先进后出的原则。

同学们也可以试试不用堆栈而用一般寄存器,结果又如何?

实验内容2

(1其中数据段寄存器中的段地址为进入DEBUG状态后系统自动分配的段地址。

(2SI和BX的初值可在DEBUG状态下,用R命令装入,也可以在程序中用指令来完成。

(3用T或P命令执行程序,可进行单步跟踪执行,每执行一条指令就可以看到各寄存器的状态变化。

也可用R命令直接调出寄存器,来检验各寄存器内容是否正确。

(4在执行程序前,可用E命令将0AH~0EH送入偏移地址300H~304H。

实验内容3

(1用移位的方法完成某些乘法运算,是较为常见的方法,操作数左移一位为操作数乘2运算。

(2算式2×10的程序流程图如下:

开始

AX、BX装入操作数2

AX左移两位→AX

AX+BX→AX

AX左移一位→AX

结束

(3程序的的执行可用DEBUG的G命令,也可用T或P命令单步跟踪执行。

在程序送入后,最好将它存入磁盘,以免程序丢失时又需重新输入。

附:

DEBUG的主要命令

1、DEBUG命令的有关规定

(1DEBUG命令都是一个英文字母,后面跟着一个或多个有关参数。

多个操作参数之间用“,”或空格隔开。

(2DEBUG命令必须接着按ENTER键,命令才有效。

(3参数中不论是地址还是数据,均用十六进制数表示,但十六进制数后面不要用“H”。

(4可以用Ctrl和Break键来停止一个命令的执行,返回到DEBUG的提示符“-”下。

(5Ctrl-NumLook用来中止正在上卷的输出行,再通过按任意键继续输出信息。

2、DEBUG命令集

A汇编命令

D显示内存命令

E修改内存命令

F填充命令

M移动内存命令

C比较命令

S查找命令

R显示和修改寄存器内容命令

T跟踪命令

U反汇编命令

N命名命令

L读盘命令

W写盘命令

I输入命令

O输出命令

G运行命令

H十六进制运算命令

Q退出命令

P进程命令

现在开始将各个命令格式说明一下。

A汇编命令,A汇编命令有三种格式:

A

A偏移地址——A与偏移地址之间可以不空格

A段地址:

偏移地址

如果是第一次输入A后,将出现

xxxx:

0100提示符。

如果是输入A偏移地址后,将出现

xxxx:

偏移地址提示符。

如果是输入A段地址:

偏移地址后,将出现

段地址:

偏移地址提示符。

在xxxx:

xxxx提示符后就可以输入汇编程序,每输完一句按回车键又出现xxxx:

xxxx提示符。

这样一句一句输完,就可运行该程序。

注意:

在DEBUG中出现和使用的数字只有一种形式——十六进制,而且不用跟后缀H。

如果数字是十进制或二进制的请全部转换成十六进制。

否则易出错。

U反汇编命令,U反汇编命令有五种格式:

U

U偏移地址

U偏移地址1偏移地址2

U段地址:

偏移地址

U段地址:

偏移地址1段地址:

偏移地址2

U反汇编命令执行后,显示器将出现:

xxxx:

xxxx二进制机器码汇编语句

xxxx:

xxxx二进制机器码汇编语句

的形式。

U反汇编命令只是用来察看汇编程序的。

D显示内存命令,D显示内存命令有四种格式:

D——从偏移地址0100单元开始一次显示128个单元内容;

D偏移地址——从偏移地址开始一次显示128个单元内容;

D偏移地址L范围——从偏移地址开始一次显示范围内个单元内容;

D段地址:

偏移地址L范围——从段地址:

偏移地址开始一次显示范围内个单元内容;

E修改内存命令,E修改内存命令有两种格式:

E偏移地址

E段地址:

偏移地址

输入E修改内存命令后,显示相应单元的内容,等待用户修改其值,此时可用下述两种方法操作。

1.按空格键

按空格键完成一个字节的显示与修改(不修改可不输入数据,且显示下一个字节的地址和内容的等待修改。

若多个单元不修改,则可连续按空格键。

2.按“-”键

按“-”键完成一个字节的显示与修改(不修改可不输入数据,且显示前一个字节的地址和内容的等待修改。

若多个单元不修改,则可连续按“-”键。

若要结束修改,可按回车键终止E命令。

R显示和修改寄存器命令,其格式有两种:

R——显示寄存器命令;

R待修改的器存器,如RAX;RBX等;

N命名文件,其格式只有两种:

N文件名.后缀——无盘符默认为当前盘符;

N盘符:

文件名.后缀;

N命令需要和L读文件命令或W写文件命令在一起使用。

L读文件命

当N命名的文件后缀是COM时,只能用L或L100。

文件只能从偏移地址100H处开始存放。

当N命名的文件后缀是EXE时,只能用L。

文件只能从偏移地址0000H处开始存放。

当N命名的文件是其他方式时,可用L或L偏移地址(任意。

文件可以从任意偏移地址处开始存放。

读文件,其方式有两种,我们只用一种:

N盘符:

文件名.后缀;

L或L偏移地址。

W写文件命令

当N命名的文件后缀是COM时,只能用W或W100。

从偏移地址100H处开始的内容写入文件,文件长度由寄存器CX值决定。

当N命名的文件后缀是EXE时,用W则出错。

当N命名的文件是其他方式时,可用W偏移地址(任意。

写文件,其方式有两种,我们只用一种:

N盘符:

文件名.后缀;

W或W偏移地址;

RCX——将文件长度值送入CX。

F填充命令,其方式有两种:

F起始地址终止地址值表;

F起始地址L字节数值表。

例如:

FD68:

1001201,2,3,’ABCD’,’C’

FD33:

20L101,2,3,’A’,’V’

M移动内存命令,其方式有两种:

M起始地址终止地址目的地址;

M起始地址L字节数目的地址。

具有移动数据块的功能。

C比较命令,其方式有两种:

C起始地址终止地址目的地址;

C起始地址L字节数目的地址。

具有比较数据块的功能。

S检索或查找命令,其方式有两种:

S起始地址终止地址值表(为单个字符或数字,与F填充值表不同;

S起始地址L字节数值表。

在数据块中查找值表所在单元。

I输入命令,其方式为:

I外部端口地址

O输出命令,其方式为:

O外部端口地址字节数据

H十六进制数加减命令,其方式为:

H数1数2

G连续运行命令,其方式为两种:

G=起始地址;

G=起始地址断点地址

通常不用第二种方式,因为用T单步跟踪命令也有同样功能。

T单步跟踪命令,其方式为两种:

T=起始地址;

T=起始地址指令条数

P进程命令,与T单步跟踪命令用法一样。

其区别在于它遇子程序不追踪。

注意:

在DEBUG命令中,逗号可以用空格来代替。

但在A命令中写汇编程序时不行。

计划学时:

3课时

实验二加法程序的编写与调试实验

一.实验目的

1.熟练掌握编写汇编语言程序的基本方法和基本框架。

2.学会编写顺序结构、分支结构和循环结构的汇编程序,掌握宏定义与宏调用的方法。

3.掌握程序中数据的产生与输入输出的方法。

4.掌握源程序的汇编和连接方法。

二.实验要求

1.实验前准备

●要弄懂所提供的源程序中的每一指令,不懂的可查各种汇编语言书籍。

●对程序中结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。

2.本实验要求在PC机上用EDIT平台编写源程序,用MASM和LINK对其进行汇编和连接,然后在DOS下执行所生成的.exe文件,如果源程序不错,应能显示正确结果。

3.用DEBUG对已生成的可执行文件进行调试,分单步和连续两种方式,并查看各寄存器的变化和数据在内存中的情况。

4.修改源程序,将其变成一个可以进行5位数加法的程序。

编写一个1234+5678的固定4位数加法程序。

(注意:

编缉程序时,不能在中文模式下进行。

除非注释。

当程序编辑完保存时,文件名中不能有中文,而且文件名字符数不能超过8个。

三.编程提示

1.两个数据可用相反的顺序以ASCII码的形式存放在数据段的DATA1和DATA2中,相加时可从DATA1和DATA2的起始字节开始相加,即从数的个位数开始相加。

相加结果可存放在DATA2开始的存储单元中。

2.程序中的加法运算是ASCII码运算,采用带进位的加法运算指令ADC,后面应加一条ASCII码加法调整指令AAA,经AAA调整的加法指令,将ASCII码的数据高4位清“0”,然后将结果每位数高4位拼成3,变成ASCII码存放到DATA2中,则可方便地取出输出。

3.程序中应有输出程序段,采用MOVAH,02H,INT21H,将要输出字符的ASCII码送入DL中。

四.思考题

程序中的原始数据是以怎样的形式存放的数据区中?

请用DEBUG调试程序进行观察、分析。

五.实验报告

写出1234+5678的固定4位数加法程序,并注释。

画出程序流程框图。

附录1.汇编程序MASM和连接程序LINK简介:

当在EDIT平台上写好源程序,并以.asm的扩展名存盘后(注意存盘路径,用两个可执行文件masm.exe和link.exe,对源程序进行汇编和连接,生成.exe文件后执行该文件,如程序正确,必能显示正确结果;如不能显示,则要查找出原因改正,直到能正确显示为止。

在汇编过程中,如出现错误,要根据提示返回EDIT查找源程序中的相应行,找出错误并修改好,再进行汇编,直到没有错误为止。

附录2.DOS中断功能调用简介:

本实验两个题目的程序中,都要用到DOS软中断系统功能调用。

DOS中断功能有很多,这儿用到的只是其中一种,即“INT21H”,这是最常用的中断功能,包含了几十种子功能。

调用这个中断功能,必须预先输入中断功能调用号,即子功能号,调用号都送进AH中。

在提供的三段程序中,共用到三种:

1.01H号功能(输入一个字符

该功能将等待用户从标准输入设备(如键盘上输入一个字符,把它传送到DL中并在标推输出设备(如

屏幕上输出。

同时检查输入的字符是否为“Ctrl+Break”,若是,则终止程序运行。

入口参数:

AH=01H;出口参数:

AL中存放的从键盘输入的ASCII码。

如键盘输入字母A,该字母除了存入AL外,还将它显示在屏幕上。

2.02H号功能(输出一个字符

该功能将寄存器DL中一个字符的ASCII码输出到标准输出设备(如屏幕上。

同时,系统将检查输出的字符是否为“Ctrl+Break”,若是,则终止程序运行。

入口参数:

AH=02H;出口参数:

无。

3.09H号功能(字符串显示

这一功能可以在标准输出设备上显示某个字符串。

调用前应当先将待显示的字符串首地址送到DS:

DX中,即把字符串所在段的段地址送DS,位移量送DX,系统将按地址的先后顺序将待显示字符串依次输出。

入口参数:

AH=09H,DS:

DX指向存放字符串的地址;出口参数:

无。

有一点需要注意,用于显示的字符串都是ASCII码,以美元符号“$”为结尾,“$”也称为界定符,在半角输入(英文状态下为“$”,在全角输入(中文状态下为“¥”。

如果希望在输完一组数后自动换行,要在界定符前加上回车符(0DH和换行符(0AH。

附录3:

下面的程序就是可以通过键盘输入任意4位数据的加数和被加数,进行加法运算。

程序中SAV过程为接收键盘键入的数据,并保存到SI所指的数据区的偏移地址的单元中。

宏定义CFD为在通过键盘键入4位数据后回车换行,使执行结果比较清晰。

(2程序清单如下:

DATASEGMENT

DATAlDB4DUP(?

DATA2DB5DUP(?

DATA3DB0DH,0AH,'$'

DATAENDS

STACKSEGMENTPARASTACK'STACK'

DB64DUP(?

STACKENDS

CFDMACRO

MOVDX,OFFSETDATA3

MOVAH,09H;显示字符串

INT21H

ENDM;回车换行宏定义

CODESEGMENTPARA'CODE'

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

STARTPROCFAR

PUSHDS

MOVAX,00H

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVES,AX;程序初始化

MOVSI,OFFSETDATA1;将DATAl的偏移地址送SI

CALLSAV;调用将键盘键入数据保存过程

CFD;调用回车换行宏定义

MOVSI,OFFSETDATA2;将DATA2的偏移地址送SI

CALLSAV;调用将键盘键入数据保存过程

CFD;调用回车换行宏定义

STD;方向标志DF为“1”,为反向串

MOVSI,OFFSETDATA1+3;将加数最末位地址送SI

MOVDI,OFFSETDATA2+3;将被加数最末位地址送DI

MOVCX,04H;共4位数相加

MOVAH,00H;清AH

LOPl:

LODSDATA1+3;取串:

([SI]→AL,(SI一1→SI

SAHF;将AH中进位标志送标志寄存器

ADCAL,[DI];带进位加,结果送AL

AAA;ASCII码十进制加法调整

LAHF;将标志寄存器内容暂存在AH中

ORAL,30H;将计算值拼成ASCII码

INCDI;将计算值的ASCII码存入DATA2中STOSB;存串,AL→[DI],DI-1→DI

DECDI;调整被加数地址指针,指向下一位数LOOPLOP1;取下一位数转到LOP1

INCDI;4位加完,调整结果地址指针

ANDAH,01H;将最高位进位取出送AH

ORAH,30H;拼成ASCII码

MOV[Dl],AH;存到DATA2的最高位

MOVAH,02H;调用DOS的显示功能

MOVCX,05H;共显示5位数

LOP2:

MOVDL,[DI];将显示结果从最高位开始送入DL中INT2lH;调用21H号中断

INCDI;使结果地址指针指向下一位

LOOPLOP2;显示下一位转LOP2

RET;5位显示完毕

STARTENDP

SAVPROCNEAR;取键盘键入的数据,并存入数据段过程MOVCX,04;取4位数

LEP:

MOVAH,0lH;调用DOS读取键入数据功能

INT21H;调用21H中断

MOV[Sl],AL;将键入数据存入数据段

INCSI;移动地址指针

LOOPLEP;共键入4位并存入数据段

RET;4位键入完毕

SAVENDP

CODEENDS

ENDSTART

执行结果:

c:

>DATADD2↓

1234

5678

6912

可以通过DEBUG调试程序,观察数据段在程序执行前后,DATA1和DATA2中数据存放的情况。

1.进入DEBUG状态

C:

>DEBUGDATADD.EXE↓(如果程序是DATADD.EXE的话

2.用U命令得到源程序

注:

(1执行第一次U命令显示17行程序,再执行U命令显示后面余下的程序。

(2从U命令显示的内容,找到代码段地址(CS,代码段偏移地址(IP,数据段地址(DS,ES,数据段偏移地址(SI以及DATA1、DATA2的偏移地址。

(3执行程序

-G(起始地址(结束地址

6912

Programterminatednormally

即6912为1234+5678和。

(4在执行程序后,用D命令再观察DATA1和DATA2中数据的存放情况:

-D(DS:

(IP

„„„„

从中可以看到,程序执行后,相加结果是以ASCII码按相反的顺序存放在DATA2中,因此显示时,是从DATA2+4开始,从低地址到高地址取数的。

(6用P命令跟踪执行(单步执行

①先用R命令检查IP寄存器是否为0,不是0要改过来(程序的开始偏移地址为0000。

②用P命令逐行执行命令,注意观察各寄存器状态的变化。

***注意:

使用T命令在遇到有中断(如INT21H时,则要谨慎,千万不要执行这一条,否则程序会跑飞。

如果要单步执行此句,可用P命令代替。

计划学时:

3课时

硬件接口试验部分

使用微机实验装置须知

一、在计算机与实验装置都通电的情况下,不得插拔计算机与实验装置之间的连接线。

因为这样做容易烧坏计算机主板和实验装置。

不要带电在实验装置上连接。

二、编写程序时,由于实验装置的原因,不要像常规方法那样,分数据段、堆栈段、代码段。

直接用一个代码段就可以。

数据段可以写在代码段中,对其中数据的读写,与读写数据段一样。

具体编程结构方法如下:

数据段放在程序前:

CODESEGMENT

ASSUMECS:

CODE

ORG1000H

START:

JMPL

DATADB1,2,3

L:

汇编指令1

汇编指令2

·

汇编指令n

K:

JMPK

CODEENDS

ENDSTART

数据段放在程序后:

CODESEGMENT

ASSUMECS:

CODE

ORG1000H

START:

汇编指令1

汇编指令2

·

汇编指令n

K:

JMPK

DATADB1,2,3

CODEENDS

ENDSTART

三、文件名不能用中文名,文件名长度不能超过8个字符。

文件夹也不能用中文名,其长度也不能超过8个字符。

不要在中文格式下编写程序。

实验一8279A可编程键盘显示接口实验

因为对8259A只须简单了解,知道如何使用它。

如果对8259A不需要详细了解的同学可直接从预备知识第四项相关表格开始。

一、预备知识

8279A是一种通用的可编程键盘/显示器接口电路,可对64个开关矩阵组成的键盘进行自动扫描,接受键盘上的输入信息,存入内部的FIFO寄存器,并在有键输入时,CPU请求中断。

8279A内部还有一个16×8的显示缓冲器,能对8位或16位LED进行扫描,使显示缓冲器的内容在LED上显示出来。

(1、引脚功能

DB0—DB7:

双向数据总线。

CLK:

时钟输入线,以产生内部时钟。

RESET:

复位线,高电平有效。

复位后,8279A置为16位显示左边输入。

/CS:

片选,低电平有效。

A0:

地址输入线,用于区分数据线传送的是数据还是命令。

A0=0传送数据,A0=1传送命令。

/RD:

读信号线,低电平有效。

内部缓冲器信息送DB0-DB7。

/WR:

写信号线,低电平有效。

数据总线上的信息写入内部缓冲器。

IRQ:

中断请求输出线,高电平有效。

当FIFORAM中有键输入数据时,IRQ升为高电平,向CPU请求中断。

CPU读出FIFORAM时,IRQ变为低电平,若RAM中还有数据,IRQ又为高电平,直至RAM中为空,IRQ才保持低电平。

SL0-SL3:

输出扫描线

RL0-RL7:

键盘矩阵的行(列数据输入线。

其内部有拉高电阻,使之保持高电平。

SHIFT:

换挡输入线。

其内部有拉高电阻,使之保持高电平。

CNTL/STB:

控制/选通输入线。

其内部有拉高电阻,使之保持高电平。

OUTA0-OUTA3:

四位输出口。

OUTB0-OUTB3:

四位输出口。

这两个口是16×4显示器更新寄存器的输出端,输出的数据和SL0-SL3信号同步,用于多位显示器显示。

/BD:

显示消隐输出线。

低电平有效。

(2、8279A内部结构

①8279A内部具有时序控制逻辑,通过控制和时序寄存器存放键盘和显示器的工作方式和其它状态信息。

内部还包含有N分频器,分频系数为N,由2—31之间任意一数可编程确定,对CLK上时钟进行N分频以产生基本的100KHZ的内部计数信号。

②8279A内部的扫描计数器有两种工作方式:

一是编码方

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

当前位置:首页 > 工程科技 > 机械仪表

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

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