微机原理实验报告.docx
《微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告.docx(36页珍藏版)》请在冰豆网上搜索。
微机原理实验报告
实验课程:
微机原理及接口技术
姓名:
学号:
班级:
实验日期:
年月日批阅老师:
实验名称:
拆字、拼字程序
一、实验预习内容
1、8086/8088有14个16位寄存器,按其用途可分为8个寄存器、2个寄存器和4个寄存器。
2、通用寄存器分别是。
代码段寄存器是,数据段寄存器是,堆栈段寄存器是。
3、在数据寄存器中,被称为累加器的用于算术运算外,还用于输入/输出等操作。
被称为基址寄存器的它可作为存储器指针来使用。
被称为计数寄存器的在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用来指明移位的位数。
而数据寄存器在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
4、堆栈指针寄存器与SS配合使用,可指向目前的堆栈位置;基址指针寄存器可用作SS的一个相对基址位置;源变址寄存器可用来存放相对于DS段之源变址指针;目的变址寄存器可用来存放相对于ES段之目的变址指针。
指令指针寄存器用来存放代码段中的偏移地址。
5、在8088指令的寻址方式中,下列各指令中属于立即寻址的是,属于寄存器寻址的是,属于直接寻址的是,属于寄存器间接寻址的是,属于基址寻址的是,属于基址加变址寻址的是。
A、MOVAX,2000HB、MOVAX,[2000H]C、MOVAX,CX
D、MOVAX,[DI]E、MOVAX,[BX][SI]F、MOVAX,[BP]
6、在DEBUG下,反汇编命令是,汇编命令是,显示显示内存单元内容的命令是,修改内存单元内容的命令,检查和修改寄存器内容的命令是,逐步追踪执行命令是,连续执行程序命令是,退出命令是。
二、实验内容与过程
1、设DS为当前段地址,BX=0300H,SI=0002H;请用DEBUG的命令在存储器偏移地址300H~304H单元中连续按顺序装入0AH,0BH,0CH,0DH,0EH。
在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么,并指出这条指令是什么寻址方式。
程序清单如下:
MOVAX,0000H
MOVBX,0300H
MOVSI,0002H
MOVDI,0302H
MOVAX,BXAX的内容:
;
MOVAX,0302HAX的内容:
;
MOVAX,[DI]AX的内容:
;
MOVAX,[BX]AX的内容:
;
MOVAX,0001[BX]AX的内容:
;
MOVAX,[BX][SI]AX的内容:
;
MOVAX,0002[DI]AX的内容:
;
HLT
(1)在汇编软件环境下,首先输入程序,并在建立的文件夹下进行保存;然后进行编译生成,发现问题进行编辑修改再进行编译;再进行链接生成。
(2)用E命令加带数据段物理地址,将偏移地址300H~304H单元中连续按顺序装入。
(4)用命令单步跟踪执行程序,查看寄存器的内容,根据每条指令执行情况,记录其所存放的数据。
2、把4000H单元的内容拆开,高位送4001H单元,低位送4002H单元。
拆字程序清单如下,按要求在填空处完善注释。
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVBX,4000H;把地址单元4000H给BX寄存器
MOV[BX],5BH;
MOVAL,[BX];把4000H单元的内容给AL
MOVAH,AL;再把4000H单元的内容给AH
MOVCL,04;
SHRAH,CL;
ADDBX,01(或INCBX);地址单元加1
MOV[BX],AH;
ANDAL,0FH;屏蔽掉AL中的高四位
ADDBX,01(或INCBX);地址单元加1
MOV[BX],AL;
HLT
CODESENDS;程序结束
ENDSTART
查看4000H起始的三个单元内容的命令为,从4000H起三个地址单元的保存的数据依次为:
。
3、把2000H、2001H的单元的低4位拼成一个字,送入2002H单元(第一个字的低4位和第二个字的低4位拼成一个字)。
完善程序,并用DEBUG进行调试。
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVBX,2000H;把地址单元2000H给BX寄存器
;把2000H单元所要拼的字置为F6H
;把2001H单元所要拼的字置为28H
MOVAL,[BX];把2000H单元的内容给AL
MOVAH,[BX+1];把2001H单元的内容给AH
;屏蔽掉AL中的高四位
MOVCL,04H;设置移位次数为4
;AH的内容左移4位
;进行拼字
ADDBX,02H;地址单元到2002H
;将拼好的字保存在2002H单元
HLT
CODESENDS;程序结束
ENDSTART
使用命令查看存放在2000H单元起三个地址单元中的数据分别是:
。
三、实验总结
1、汇编程序的调试过程有关问题:
①输入源程序代码并进行存盘;②对文件进行,若发现错误可根据错误信息进行修改,直到无错为止;③在DEBUG下,用相关命令进行查看、修改或执行汇编程序,常用的相关命令分别是;④在DEBUG下,程序运行的结果一般存放在相关中,或者存放在数据段偏移地址单元中。
⑤在显示结果中所看到的分别表示溢出、方向、中断、符号、零、辅助进位、奇偶、进位标志状态是复位状态。
2、其它相关问题:
①汇编程序保存的文件名(及文件夹)必须符合命名要求,一般由26个英文字母和10个数字组成,文件名长度不准超过个字符。
②输入程序代码指令其英文符号的或者输入都一样,而指令间该有的不能省略,其指令和标点符号必须是在状态下输入方可有效。
③程序代码和程序数据一般存放在不同的下,若存在同一段地址下,其偏移地址可不同,且偏移地址间要有一定的相隔空间。
偏移地址从开始,到最大结束。
3、所有移位指令的目标操作数,只允许是,指令中的计数值可以是常数1,即移位1次,如果移位多于1次,则必须将移位数N事先装入寄存器中,本指令最多可移位255位。
一般来说,当目标操作数为无符号数时采用指令;若目标操作数为有符号数时,则采用指令。
4、在逻辑运算指令中,仅指令不影响标志位;其它指令
执行后,除AF状态不定外,总是使OF=CF=0,ZF、SF、PF则根据运算结果被置位或复位。
实验课程:
微机原理及接口技术
姓名:
学号:
班级:
实验日期:
年月日批阅老师:
实验名称:
数据区移动与分支程序
一、实验预习内容
1、8086/8088计算机指令一般由和操作数组成(无操作数指令除外)。
根据操作数存放位置的不同,可将操作数分为三种类型。
2、存储器操作数存放在内存的数据区,数据区的物理地址由
共同构成。
大部分操作数的由数据段寄存器的内容来确定。
3、数据传送指令是计算机中最基本、最重要、最常用的一种指令,主要用来实现的字节或字的传送。
在数据传送指令中,需要注意的是
必须保持一致。
4、传送指令MOV在使用时应注意:
和不能作为目的操作数;立即数传送到时一定要与一致;源操作数和目的操作数不能同时为。
5、加法指令ADD和带进位加法指令ADC执行时会对标志位
受影响。
6、简单分支程序根据条件是否满足将程序分为分支,按不同条件做出相应的处理。
这种程序往往是用的方法,在中设置相应的标志位,然后再根据适当的实现不同情况的分支转移。
7、条件转移指令可分为三类,在下列指令中适用于无符号数的条件转移指令助记符中是;适用于有符号数的条件转移指令助记符是
;适用于标志位的条件转移指令助记符是。
JA、JB、JC、JE、JG、JL、JZ、JAE、JGE、JLE、JNE、JNBE
8、在条件转移指令中,指令助词符JAE和、JG和、JLE和
、JZ和执行的结果是一样的。
二、实验内容与过程
1、把4100H源RAM区首址起的16字节数据传送到4200H目标RAM区。
读懂程序,完善程序注释,用DEBUG调试并查看结果。
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVCX,010H;置搬移数据循环次数
MOVSI,4100H;
MOVDI,4200H;
MOVBX,SI;将源数据块首址给BX
MOVDL,01H
NUM:
MOV[BX],DL;将16个数据存放在源数据块区
INCBX
INCDL
LOOPNUM
MOVCX,010H;置搬移数据循环次数
CMPSI,DI;SI与DI相比较
JAL2;
ADDSI,CX;SI与CX相加
ADDDI,CX;DI与CX相加
L1:
DECSI;
DECDI;
MOVAL,[SI];
MOV[DI],AL
LOOPL1;循环16次结束
JMPHEND;跳转到结束
L2:
MOVAL,[SI];把源数据块存储单元的数据传送到目的数据块
MOV[DI],AL
INCSI;
INCDI;
LOOPL2;数据搬移16次后结束
HEND:
HLT
CODESENDS;程序结束
ENDSTART
连续执行该程序的命令是,查看存放在4100H地址单元的数据命令是,查看存放在4200H地址单元的数据命令是,检查4100H~4110H、4200H~4210H中存储的数据为
。
2、假设有一组数据为25,-4,0,3,100,-51,17,62。
请编程判断:
每个是数大于0,等于0,还是小于0,并输出Y的值。
即:
1当x>0
y=0当x=0
-1当x<0
根据要求在空白处完成编程或加注释:
DATASSEGMENT
XDB25,-4,0,3,100,-51,17,62;建立数据表
YDB;为存储结果建立缓冲区
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX;置数据段存放地址
XORAX,AX;对AX清零
;设定循环控制数
LEASI,X;置数据表偏移量首址
;置存储数据偏移量首址
BJ:
;将第一个数给AL
CMPAL,0;AL内容与0进行比较
;比较结果>=0则转移到DY处
XY0:
MOVBL,-1;小于0将-1给BL
MOV[DI],BL;将-1存储到地址单元
JMPXH;跳转到XH处
DY:
;若等于0转移到XD处
MOVBL,1
MOV[DI],BL;将1给BL且存储到地址单元
JMPXH;跳转到XH处
XD:
MOVBL,0;给BL赋值为0
MOV[DI],BL;将0存储到地址单元
XH:
;数据表偏移地址增1
;存放结果数据偏移地址增1
LOOPBJ;判断CX是否为0,是则结束,否则进行循环
HLT
CODESENDS;程序结束
ENDSTART
连续执行程序的命令是,查看存放在内存中的数据命令是
存放在数据段地址单元的结果是
三、实验总结
1、段定义伪指令用于将源程序划分为若干个段。
这些逻辑段按照用途可分为
和附加段。
需要说明的是,并不是所有程序都必须包含这四个逻辑段,可根据需要进行配置。
每个指令可定义一个逻辑段。
段寄存器说明伪指令向汇编程序指示当前各段所用的寄存器,并设定段寄存器与段的对应关系。
2、存储器由许多存储单元组成,每一个存储单元可以存放一个8位二进制数,即,每一个存储单元都指定了一个惟一的编号,称之为。
存放程序代码的起始地址由寄存器来指定,存放程序所用数据的起始地址由
寄存器来给定。
程序在执行过程中的偏移地址是由寄存器来给定。
3、DB伪操指令用来定义字节型变量,其中的每个操作数都占有存储单元,每个操作数的值不超过。
DW伪操指令用来定义字型变量,其中的每个操作数都占有,字的低位字节存放在第一个字节地址单元中,字的高位字节存放在第二个字节地址单元中。
DD伪操指令用来定义双字型变量,其中的每个操作数都占有,双字的最低位字节在第一个字节地址单元中,次低位字节在第二个字节地址单元中,次高位字节在第三个字节地址单元中,高位字节在第四个字节地址单元中。
4、以CMPA,B示例说明比较指令功能用法如下:
①判断两个数操作数是否相等,可根据标志位来判断,若说明
A=B;若说明A≠B。
②判断两个无符号操作数的大小,可根据标志位来判断,若说明A<B;若说明A≥B。
实验课程:
微机原理及接口技术
姓名:
学号:
班级:
实验日期:
年月日批阅老师:
实验名称:
循环程序设计
一、实验预习内容
1、在设计循环程序中,一般结构由循环部分、部分、部分和部分。
在循环开始前首先应建立和其它循环参数的起始值等。
控制循环是循环程序设计中最重要的一个环节,这部分用于控制重复执行的次数,包括修改和,为下一次循环做好准备,以及修改循环计数器,判断循环结束条件是否满足,若条件满足则退出循环,否则继续循环。
最常见控制循环的两种方式是和。
值得指出的是,循环程序的前后两部分只能执行一次,而循环主体部分不能出现转向建立循环参数起始值部分,否则会造成程序,或者得不到预期结果。
2、设计多重循环程序时,可以从循环到循环一层一层的进行。
需要注意的是,多重循环可以嵌套,但不能。
此外,转移指令可以从循环结构内向外转出,但不能从循环直接跳进循环。
3、常用计数循环控制指令LOOP目标号,首先得把循环计数值赋给寄存器,当执行到LOOP指令时,先做,再进行判别,当转移到目标号继续循环,直到退出循环。
二、实验内容与过程
以GRADE为首地址的10个字的数组中保存有学生成绩。
建立一个10个字的RNAK数组,并根据GRADE中的学生成绩将学生名次填入RANK数组中(提示:
一个学生的名次等于成绩高于该学生的人数之和再加1)。
寄存器分配情况说明如下:
AX——存放当前被测学生的成绩
BX——存放当前被测学生的相对地址指针
CX——内循环计数值
DX——存放当前被测学生的名次计数值
SI——内循环测试时的地址指针
DI——外循环计数值
按要求编程,计算学生排名,并输出排名结果:
DATASSEGMENT
GRADEDB95,84,72,58,76,90,100,
68,80,88
;建立学生成绩表
RANKDB10DUP(?
)
;建立学生成绩名次的缓冲区
KGDB‘’,‘$’
;显示两个空格
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX;分配数据段地址
XORAX,AX;对AX清零
MOVDI,0;对DI置0
;置学生成绩表首址
WXH:
MOVAL,[BX]
;将第一个学生成绩给AX
;将学生名次先置为1
;设置循内环计数值
MOVSI,OFFSETGRADE;取比较学生成绩的第一个数
NXH:
CMPAL,[SI];两个学生成绩相比较
JAENEXT;若高于等于则跳转到NEXT处
;否则学生名次增1
NEXT:
INCSI;取下一个相比较的学生成绩
;判断CX是否为0
;将学生名次存入地址单元
INCBX;取下一个学生的成绩
INCDI;外循环控制次数增1
;外循环次数是否到10
JBWXH;不到10进行循环,到10后结束
;设置显示名次缓冲区首址
MOVCX,10;设置显示控制循环次数为10
XS:
;将显示的名次给AL
CMPAL,0AH;名次与0AH(10)比较
JWEDY;高于等于转移到DY
ADDAL,30H;转换成ASIIC码进行输出显示
;显示名次
JMPKGF;跳转到显示空格处
DY:
;大于等于A的进行转换,并显示
MOVDL,AL
MOVAH,02
INT21H
KGF:
LEADX,KG;显示空格字符串
INT21H
LOOPXS
HLT
CODESENDS;程序结束
ENDSTART
在本程序数据段中变量GRADE的偏移首址是,RANK的偏移首址是
,KG的偏移首址是。
程序运行后RANK单元的内容为:
。
三、实验总结
1、本实验程序中循环初始化部分的语句有、、
。
循环结束部分的语句有。
内循环控制方式是,而外循环控制方式是。
2、十六进制数0~F的ASCII码分别是30H、31H、32H、33H、34H、35H、36H、37H、38H、39H、。
数0~9所对应的ASCII码与其数值之差(30-0、31-1、32-2、33-3、……39-9)均是,而数A~F对应的ASCII码与其数值之差(41-A、42-B、43-C、44-D、45-E、46-F)均是。
3、标号通常由字母数字组成,但第一个字符必须是字母,最多允许使用31个字符。
值得注意的是,编程员选用标号时,不能使用系统中已经定义过的符号名,如助记符、、寄存器名等,否则将产生错误。
本实验程序中所使用的标号有等。
4、谈一谈本次实验的心得体会(至少谈五点)。
实验课程:
微机原理及接口技术
姓名:
学号:
班级:
实验日期:
年月日批阅老师:
实验名称:
I/O扩展(244/273)实验
一、实验预习内容
1、本次实验是利用74LS244和74LS273的扩展电路来实现开关状态的输入和输出,用做为输入信号,并用来显示输出。
74LS244为3态8位,一般用作总线驱动器。
74LS273是8位数据/地址,它是一种带清除功能的8D触发器。
2、74LS138是3/8线译码器,即用3个输入信号进行译码,得到状态。
为译码信号输入端,为译码输出端,低电平有效。
3、74LS273的D0~D7为8位数据输入端,接到数据总线上;Q0~Q7为8位数据输出端,接到LED显示上,当开关拨到时LED发亮。
CLK为触发时钟输入端,由或门74LS32的两个输入端来选通。
当数据总线上的值撤销后,由于74LS273能锁存信号,所以74LS273的输出端,直到有新的数据被锁存。
二、实验内容与过程
实验内容1、用244/273做I/O扩展实验。
调试上机程序,并完善程序语句注释。
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE,ES:
CODE
ORG3380H;244/273扩展程序存放目标地址;
PIO1EQU0FFE0H;
PIO2EQU0FFE4H;
P1:
MOVDX,PIO1;
INAL,DX;等待输入信号
MOVDX,PIO2;
OUTDX,AL;输出信号
JMPP1;循环等待
CODEENDS
ENDP1
(1)74LS244的输入端PI0~PI7分别连接到逻辑电平开关单元的开关上,74LS273的输出端PO0~PO7分别连接到发光二极管显示单元的上。
(2)按电路图连接译码器74LS138的输入端A、B、C,其中A接到地址线上的,B连接到地址线上的,C连接到地址线上。
138控制输入端G接到地址线上对应的端。
(3)74LS32为4-2输入或门电路,输入端1接到138的上,2接到地址线区的IORD上,输出端3接到244芯片的G端口上;32门的输入端4接到138的
上,5接到地址线区的IOWR上,输出端6接到273芯片的CLK端口上。
(4)将244、273芯片旁的数据插座用。
(5)进入实验软件环境,输入程序源文件,并进行检查。
(6)接通实验箱电源开关,进行通电。
(7)运行程序。
(8)拨动K1~K8,。
实验内容2:
编制程序,利用273控制各种颜色LED的亮与灭。
拆掉244芯片的接线,保留273及138译码器的接线。
参照实验内容1编程实现L1~L8八路灯的同时亮与灭;编程实现L1~L8中所有黄灯、绿灯、红灯,按照黄灯亮(其它灯来)、绿灯亮(其它灯灭)、红灯亮(其它灯灭)的顺序依次循环。
L1~L8路灯同时亮、同时灭的程序如下:
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE,ES:
CODE
ORG3380H;程序存放目标地址;
PIO2EQU0FFE4H;273芯片字位控制字
P1:
;给AL赋值,使所有灯亮
;选通273芯片接口
;输出信号
;调延时子程序
;给AL赋值,使所有灯灭
;选通273芯片接口
;输出信号
;调延时子程序
JMPP1;循环
DELAY:
;延时子程序
YS:
NOP
LOOPYS
RET
CODEENDS
ENDP1
L1~L8中所有黄灯、绿灯、红灯,按照黄灯亮(其它灯灭)、绿灯亮(其它灯灭)、红灯亮(其它灯灭)的顺序依次循环程序如下:
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE,ES:
CODE
ORG3380H;程序存放目标地址;
PIO2EQU0FFE4H;273芯片字位控制字
P1:
;给AL赋值,使所有黄灯亮
;选通273芯片接口
;输出信号
;调延时子程序
;给AL赋值,使所有绿灯亮
;选通273芯片接口
;输出信号