微机原理实验报告答案Word文件下载.docx

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

微机原理实验报告答案Word文件下载.docx

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

微机原理实验报告答案Word文件下载.docx

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

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进行调试。

MOVAX,DATAS

MOVDS,AX

MOVBX,2000H;

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

MOV[BX],0F6H;

把2000H单元所要拼的字置为F6H

MOV[BX+1],28H;

把2001H单元所要拼的字置为28H

把2000H单元的内容给AL

MOVAH,[BX+1];

把2001H单元的内容给AH

ANDAL,0FH;

MOVCL,04H;

设置移位次数为4

SHLAH,CL;

AH的内容左移4位

ORAL,AH;

进行拼字

ADDBX,02H;

地址单元到2002H

MOV[BX],AL;

将拼好的字保存在2002H单元

HLT

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调试并查看结果。

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:

把源数据块存储单元的数据传送到目的数据块

MOV[DI],AL

INCSI;

源数据块地址增1

INCDI;

目的数据块地址增1

LOOPL2;

数据搬移16次后结束

HEND:

连续执行该程序的命令是,查看存放在4100H地址单元的数据命令是,查看存放在4100H地址单元的数据命令是,检查4100H~4110H、4200H~4210H中存储的数据为。

2、假设有一组数据为25,-4,0,3,100,-51,17,62。

请编程判断:

每个是数大于0,等于0,还是小于0,并输出Y的值。

即:

1当x>

y=0当x=0

-1当x<

根据要求在空白处完成编程或加注释:

DATASSEGMENT

XDB25,-4,0,3,100,-51,17,62;

建立数据表

YDB8DUP(?

);

为存储结果建立缓冲区

DATASENDS

DATAS

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

将1给BL且存储到地址单元

JMPXH;

XD:

MOVBL,0;

给BL赋值为0

将0存储到地址单元

XH:

INCSI;

数据表偏移地址增1

INCDI;

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

LOOPBJ;

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

CODESENDS;

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

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

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——外循环计数值

按要求编程,计算学生排名,并输出排名结果:

GRADEDB95,84,72,58,76,90,100,68,80,88;

建立学生成绩表

RANKDB10DUP(?

);

建立学生成绩名次的缓冲区

KGDB‘’,‘$’;

显示两个空格

ASSUMECS:

MOVAX,DATAS

MOVDS,AX;

分配数据段地址

XORAX,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:

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

LOOPNXH;

判断CX是否为0

MOVRANK[DI],DL;

将学生名次存入地址单元

INCBX;

取下一个学生的成绩

外循环控制次数增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;

跳转到显示空格处

ADDAL,37H;

大于等于A的进行转换,并显示

MOVDL,AL

MOVAH,02

INT21H

KGF:

LEADX,KG;

显示空格字符串

MOVAH,09

INCBX

LOOPXS

HLT

在本程序数据段中变量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

C

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

当前位置:首页 > 初中教育 > 语文

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

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