微机原理实验报告答案.docx

上传人:b****4 文档编号:4625667 上传时间:2022-12-07 格式:DOCX 页数:31 大小:152.45KB
下载 相关 举报
微机原理实验报告答案.docx_第1页
第1页 / 共31页
微机原理实验报告答案.docx_第2页
第2页 / 共31页
微机原理实验报告答案.docx_第3页
第3页 / 共31页
微机原理实验报告答案.docx_第4页
第4页 / 共31页
微机原理实验报告答案.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

微机原理实验报告答案.docx

《微机原理实验报告答案.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告答案.docx(31页珍藏版)》请在冰豆网上搜索。

微机原理实验报告答案.docx

微机原理实验报告答案

实验课程:

微机原理及接口技术

姓名:

学号:

班级:

实验日期:

年月日批阅老师:

实验名称:

拆字、拼字程序

一、实验预习内容                        

1、8086/8088有14个16位寄存器,按其用途可分为8个通用寄存器、2个控制寄存器和4个段寄存器。

                  

2、通用寄存器分别是AX、BX、CX、DX、SP、BP、SI、DI。

代码段寄存器是CS,数据段寄存器是DS,堆栈段寄存器是SS。

            

3、在数据寄存器中,被称为累加器的AX用于算术运算外,还用于输入/输出等操作。

被称为基址寄存器的BX它可作为存储器指针来使用。

被称为计数寄存器的CX在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数。

而数据寄存器DX在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

       

4、堆栈指针寄存器SP与SS配合使用,可指向目前的堆栈位置;基址指针寄存器BP可用作SS的一个相对基址位置;源变址寄存器SI可用来存放相对于DS段之源变址指针;目的变址寄存器DI可用来存放相对于ES段之目的变址指针。

指令指针寄存器IP用来存放代码段中的偏移地址。

       

5、在8088指令的寻址方式中,下列各指令中属于立即寻址的是A,属于寄存器寻址的是C,属于直接寻址的是B,属于寄存器间接寻址的是D,属于基址寻址的是F,属于基址加变址寻址的是E。

           

A、MOVAX,2000HB、MOVAX,[2000H]C、MOVAX,CX

D、MOVAX,[DI]E、MOVAX,[BX][SI]F、MOVAX,[BP]

6、在DEBUG下,反汇编命令是U,汇编命令是A,显示显示内存单元内容的命令是D,修改内存单元内容的命令E,检查和修改寄存器内容的命令是R,

逐步追踪执行命令是T,连续执行程序命令是G,退出命令是Q。

  

二、实验内容与过程

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的内容:

0300;寄存器寻址

MOVAX,0302HAX的内容:

0302;立即寻址

MOVAX,[DI]AX的内容:

0D0C;寄存器间接寻址

MOVAX,[BX]AX的内容:

0B0A;基址寻址

MOVAX,0001[BX]AX的内容:

0C0B;基址加变址寻址

MOVAX,[BX][SI]AX的内容:

0D0C;基址加变址寻址

MOVAX,0002[DI]AX的内容:

000E;变址寻址

HLT                         

(1)在汇编软件环境下,首先输入程序,并在建立的文件夹下进行保存;然后进行编译生成目标文件,发现问题进行编辑修改再进行编译;再进行链接生成可执行文件。

(2)用E命令加带数据段物理地址DS:

0300,将偏移地址300H~304H单元中连续按顺序装入0A、0B、0C、0D、0E、0F。

      

(4)用T命令单步跟踪执行程序,查看AX寄存器的内容,根据每条指令执行情况,记录其所存放的数据。

2、把4000H单元的内容拆开,高位送4001H单元,低位送4002H单元。

拆字程序清单如下,按要求在填空处完善注释。

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVBX,4000H;把地址单元4000H给BX寄存器

MOV[BX],5BH;把所要拆的字置为5BH

MOVAL,[BX];把4000H单元的内容给AL

MOVAH,AL;再把4000H单元的内容给AH

MOVCL,04;设置移位数为4

SHRAH,CL;AH的内容右移4位

ADDBX,01(或INCBX);地址单元加1

MOV[BX],AH;把高位字保存在4001H单元

ANDAL,0FH;屏蔽掉AL中的高四位

ADDBX,01(或INCBX);地址单元加1

MOV[BX],AL;把低位字保存在4002H单元

HLT

CODESENDS;程序结束

ENDSTART

查看4000H起始的三个单元内容的命令为DDS:

4000,从4000H起三个地址单元的保存的数据依次为:

5B、05、0B。

3、把2000H、2001H的单元的低4位拼成一个字,送入2002H单元(第一个字的低4位和第二个字的低4位拼成一个字)。

完善程序,并用DEBUG进行调试。

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVBX,2000H;把地址单元2000H给BX寄存器

MOV[BX],0F6H;把2000H单元所要拼的字置为F6H

MOV[BX+1],28H;把2001H单元所要拼的字置为28H

MOVAL,[BX];把2000H单元的内容给AL

MOVAH,[BX+1];把2001H单元的内容给AH

ANDAL,0FH;屏蔽掉AL中的高四位

MOVCL,04H;设置移位次数为4

SHLAH,CL;AH的内容左移4位

ORAL,AH;进行拼字

ADDBX,02H;地址单元到2002H

MOV[BX],AL;将拼好的字保存在2002H单元

HLT

CODESENDS;程序结束

ENDSTART

使用DDS:

2000命令查看存放在2000H单元起三个地址单元中的数据分别是:

F6、28、86。

三、实验总结

1、汇编程序的调试过程有关问题:

①输入源程序代码并进行存盘;②对文件进行编译和链接,若发现错误可根据错误信息进行修改,直到无错为止;③在DEBUG下,用相关命令进行查看、修改或执行汇编程序,常用的相关命令分别是U、A、D、E、R、T、G、Q;④在DEBUG下,程序运行的结果一般存放在相关寄存器中,或者存放在数据段偏移地址单元中。

⑤在显示结果中所看到的NV、UP、EI、PL、NZ、NA、PO、NC分别表示溢出、方向、中断、符号、零、辅助进位、奇偶、进位标志状态是复位状态。

2、其它相关问题:

①汇编程序保存的文件名(及文件夹)必须符合DOS命名要求,一般由26个英文字母和10个数字组成,文件名长度不准超过8个字符。

②输入程序代码指令其英文符号的大写或者小写输入都一样,而指令间该有的空格不能省略,其指令和标点符号必须是在英文状态下输入方可有效。

③程序代码和程序数据一般存放在不同的段地址下,若存在同一段地址下,其偏移地址可不同,且偏移地址间要有一定的相隔空间。

偏移地址从0000H开始,到最大FFFFH结束。

3、所有移位指令的目标操作数,只允许是8/16位通用寄存器戓存储器,指令中的计数值可以是常数1,即移位1次,如果移位多于1次,则必须将移位数N事先装入CL寄存器中,本指令最多可移位255位。

一般来说,当目标操作数为无符号数时采用逻辑移位指令;若目标操作数为有符号数时,则采用算术移位指令。

4、在逻辑运算指令中,仅NOT指令不影响标志位;其它指令AND、OR、XOR执行后,除AF状态不定外,总是使OF=CF=0,ZF、SF、PF则根据运算结果被置位或复位。

 

实验课程:

微机原理及接口技术

姓名:

学号:

班级:

实验日期:

年月日批阅老师:

实验名称:

数据区移动与分支程序

一、实验预习内容

1、8086/8088计算机指令一般由操作码和一个或多个操作数组成(无操作数指令除外)。

根据操作数存放位置的不同,可将操作数分为三种类型立即数、寄存器操作数和存储器操作数。

2、存储器操作数存放在内存的数据区,数据区的物理地址由段地址和偏移地址共同构成。

大部分操作数的段地址由数据段寄存器DS的内容来确定。

3、数据传送指令是计算机中最基本、最重要、最常用的一种指令,主要用来实现存储器与寄存器、寄存器与寄存器以及立即数到寄存器或存储器的字节或字的传送。

在数据传送指令中,需要注意的是源操作数和目的操作数的数据长度必须保持一致。

4、传送指令MOV在使用时应注意:

CS段寄存器和立即数不能作为目的操作数;立即数传送到存储器时一定要与存储器变量类型一致;源操作数和目的操作数不能同时为存储器操作数。

5、加法指令ADD和带进位加法指令ADC执行时会对标志位AF、CF、OF、PF、SF、ZF受影响。

6、简单分支程序根据条件是否满足将程序分为两个分支,按不同条件做出相应的处理。

这种程序往往是用比较或测试的方法,在标志寄存器中设置相应的标志位,然后再根据适当的条件转移指令实现不同情况的分支转移。

7、条件转移指令可分为三类,在下列指令中适用于无符号数的条件转移指令助记符中是JA、JB、JAE、JNBE;适用于有符号数的条件转移指令助记符是JG、JL、JGE、JNL;适用于标志位的条件转移指令助记符是JC、JE、JZ、JNE。

JA、JB、JC、JE、JG、JL、JZ、JAE、JGE、JLE、JNE、JNBE

8、在条件转移指令中,指令助词符JAE和JNB、JG和JNLE、JLE和JNG、JZ和JE执行的结果是一样的。

二、实验内容与过程

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;SI>DI跳转到L2处

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;源数据块地址增1

INCDI;目的数据块地址增1

LOOPL2;数据搬移16次后结束

HEND:

HLT

CODESENDS;程序结束

ENDSTART

连续执行该程序的命令是,查看存放在4100H地址单元的数据命令是,查看存放在4100H地址单元的数据命令是,检查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;建立数据表

YDB8DUP(?

);为存储结果建立缓冲区

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX;置数据段存放地址

XORAX,AX;对AX清零

MOVCX,08;设定循环控制数

LEASI,X;置数据表偏移量首址

LEADI,Y;置存储数据偏移量首址

BJ:

MOVAL,[SI];将第一个数给AL

CMPAL,0;AL内容与0进行比较

JGEDY;比较结果>=0则转移到DY处

XY0:

MOVBL,-1;小于0将-1给BL

MOV[DI],BL;将-1存储到地址单元

JMPXH;跳转到XH处

DY:

JEXD;若等于0转移到XD处

MOVBL,1

MOV[DI],BL;将1给BL且存储到地址单元

JMPXH;跳转到XH处

XD:

MOVBL,0;给BL赋值为0

MOV[DI],BL;将0存储到地址单元

XH:

INCSI;数据表偏移地址增1

INCDI;存放结果数据偏移地址增1

LOOPBJ;判断CX是否为0,是则结束,否则进行循环

HLT

CODESENDS;程序结束

ENDSTART

连续执行程序的命令是,查看存放在内存中的数据命令是

存放在数据段地址单元的结果是

三、实验总结

1、段定义伪指令用于将源程序划分为若干个段。

这些逻辑段按照用途可分为代码段、数据段、堆栈段和附加段。

需要说明的是,并不是所有程序都必须包含这四个逻辑段,可根据需要进行配置。

每个SEGMENT/ENDS指令可定义一个逻辑段。

段寄存器说明伪指令ASSUME向汇编程序指示当前各段所用的寄存器,并设定段寄存器与段的对应关系。

2、存储器由许多存储单元组成,每一个存储单元可以存放一个8位二进制数,即1字节,每一个存储单元都指定了一个惟一的编号,称之为存储单元的地址。

存放程序代码的起始地址由CS寄存器来指定,存放程序所用数据的起始地址由

DS寄存器来给定。

程序在执行过程中的偏移地址是由IP寄存器来给定。

3、DB伪操指令用来定义字节型变量,其中的每个操作数都占有一个字节存储单元,每个操作数的值不超过255。

DW伪操指令用来定义字型变量,其中的每个操作数都占有两个字节,字的低位字节存放在第一个字节地址单元中,字的高位字节存放在第二个字节地址单元中。

DD伪操指令用来定义双字型变量,其中的每个操作数都占有两个字(或4个字节),双字的最低位字节在第一个字节地址单元中,次低位字节在第二个字节地址单元中,次高位字节在第三个字节地址单元中,高位字节在第四个字节地址单元中。

4、以CMPA,B示例说明比较指令功能用法如下:

①判断两个数操作数是否相等,可根据ZF标志位来判断,若ZF=1说明

A=B;若ZF=0说明A≠B。

②判断两个无符号操作数的大小,可根据CF标志位来判断,若CF=1说明A<B;若CF=0说明A≥B。

实验课程:

微机原理及接口技术

姓名:

学号:

班级:

实验日期:

年月日批阅老师:

实验名称:

循环程序设计

一、实验预习内容

1、在设计循环程序中,一般结构由循环初始化部分、工作部分、控制部分和结束部分。

在循环开始前首先应建立地址指针、计数器和其它循环参数的起始值等。

控制循环是循环程序设计中最重要的一个环节,这部分用于控制重复执行的次数,包括修改变量和指针,为下一次循环做好准备,以及修改循环计数器,判断循环结束条件是否满足,若条件满足则退出循环,否则继续循环。

最常见控制循环的两种方式是计数法和条件控制法。

值得指出的是,循环程序的前后两部分只能执行一次,而循环主体部分不能出现转向建立循环参数起始值部分,否则会造成程序死循环,或者得不到预期结果。

2、设计多重循环程序时,可以从外层循环到内层循环一层一层的进行。

需要注意的是,多重循环可以嵌套,但不能交叉。

此外,转移指令可以从循环结构内向外转出,但不能从外循环直接跳进内循环。

3、常用计数循环控制指令LOOP目标号,首先得把循环计数值赋给CX寄存器,当执行到LOOP指令时,先做CX-1→CX,再进行判别,当CX≠0转移到目标号继续循环,直到CX=0退出循环。

二、实验内容与过程

以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

LEABX,GRADE;置学生成绩表首址

WXH:

MOVAL,[BX];将第一个学生成绩给AX

MOVDL,1;将学生名次先置为1

MOVCX,10;设置循内环计数值

MOVSI,OFFSETGRADE;取比较学生成绩的第一个数

NXH:

CMPAL,[SI];两个学生成绩相比较

JAENEXT;若高于等于则跳转到NEXT处

INCDL;否则学生名次增1

NEXT:

INCSI;取下一个相比较的学生成绩

LOOPNXH;判断CX是否为0

MOVRANK[DI],DL;将学生名次存入地址单元

INCBX;取下一个学生的成绩

INCDI;外循环控制次数增1

CMPDI,10;外循环次数是否到10

JBWXH;不到10进行循环,到10后结束

LEABX,RANK;设置显示名次缓冲区首址

MOVCX,10;设置显示控制循环次数为10

XS:

MOVAL,[BX];将显示的名次给AL

CMPAL,0AH;名次与0AH(10)比较

JAEDY;高于等于转移到DY

ADDAL,30H;转换成ASIIC码进行输出显示

MOVDL,AL

MOVAH,02

INT21H;显示名次

JMPKGF;跳转到显示空格处

DY:

ADDAL,37H;大于等于A的进行转换,并显示

MOVDL,AL

MOVAH,02

INT21H

KGF:

LEADX,KG;显示空格字符串

MOVAH,09

INT21H

INCBX

LOOPXS

HLT

CODESENDS;程序结束

ENDSTART

在本程序数据段中变量GRADE的偏移首址是0000,RANK的偏移首址是000A,KG的偏移首址是0014。

程序运行后RANK单元的内容为:

358A721964

三、实验总结

1、本实验程序中循环初始化部分的语句有XORAX,AX、MOVDI,0、LEABX,GRADE。

循环结束部分的语句有MOVRANK[DI],DL、INCBX、INCDI。

内循环控制方式是计数法,而外循环控制方式是条件控制法。

2、十六进制数0~F的ASCII码分别是30H、31H、32H、33H、34H、35H、36H、37H、38H、39H、41H、42H、43H、44H、45H、46H。

数0~9所对应的ASCII码与其数值之差(30-0、31-1、32-2、33-3、……39-9)均是30H,而数A~F对应的ASCII码与其数值之差(41-A、42-B、43-C、44-D、45-E、46-F)均是37H。

3、标号通常由字母数字组成,但第一个字符必须是字母,最多允许使用31个字符。

值得注意的是,编程员选用标号时,不能使用系统中已经定义过的符号名,如助记符、定义符、操作符、运算符、寄存器名等,否则将产生错误。

本实验程序中所使用的标号有STRAT、WXH、NXH、NEXT、XS、DY、KGF等。

4、谈一谈本次实验的心得体会。

 

实验课程:

微机原理及接口技术

姓名:

学号:

班级:

实验日期:

年月日批阅老师:

实验名称:

I/O扩展(244/273)实验

一、实验预习内容

1、本次实验是利用74LS244和74LS273的扩展电路来实现开关状态的输入和输出,用扭子开关做为输入信号,并用发光二极管LED来显示输出。

74LS244为3态8位缓冲器,一般用作总线驱动器。

74LS273是8位数据/地址锁存器,它是一种带清除功能的8D触发器。

2、74LS138是3/8线译码器,即用3个输入信号进行译码,得到8个输出状态。

A、B、C为译码信号输入端,Y0~Y7为译码输出端,低电平有效。

3、74LS273的D0~D7为8位数据输入端,接到数据总线上;Q0~Q7为8位数据输出端,接到LED显示上,当开关拨到低电平时LED发亮。

CLK为触发时钟输入端,由或门74LS32的两个输入端Y1、WR来选通。

当数据总线上的值撤销后,由于74LS273能锁存信号,所以74LS273的输出端保持不变,直到有新的数据被锁存。

二、实验内容与过程

实验内容1、用244/273做I/O扩展实验。

调试上机程序,并完善程序语句注释。

CODESEGMENT

ASSUMECS:

C

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

当前位置:首页 > 法律文书 > 判决书

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

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