微机原理实验报告答案Word文件下载.docx
- 文档编号:17560581
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:31
- 大小:152.45KB
微机原理实验报告答案Word文件下载.docx
《微机原理实验报告答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告答案Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验 报告 答案