微机原理实验1.docx
《微机原理实验1.docx》由会员分享,可在线阅读,更多相关《微机原理实验1.docx(13页珍藏版)》请在冰豆网上搜索。
![微机原理实验1.docx](https://file1.bdocx.com/fileroot1/2022-12/18/7d4c0840-6f1f-4409-a364-ff70fd17d664/7d4c0840-6f1f-4409-a364-ff70fd17d6641.gif)
微机原理实验1
微机原理与接口技术实验安排
实验要求
一、总体要求
熟悉8086仿真工具软件。
二、学时安排
本次《微机原理与接口技术》共10个学时,其中软件6个学时,硬件4个学时。
软件学时共分3次,由各班和实验室老师直接联系安排学习时间,在本学期15~16周完成。
1、第一次课学生熟悉软件本身的功能。
2、第二次课,学生按照要求完成实验三、实验四的内容,并完成第三次课的编程内容。
3、第三次课,学生按照学号,完成《软件编程题目》中的实际测试内容。
实验一数据传送
三、实验目的
1.熟悉8086指令系统的数据传送指令及8086的寻址方式。
2.利用EMU调试工具来调试汇编语言程序。
四、实验预习要求
1.复习8086指令系统中的数据传送类指令和8086的寻址方式。
2.预习EMU的使用方法:
a)如何启动EMU;
b)如何在各窗口之间切换;
c)如何查看或修改寄存器、状态标志和存储单元的内容;
d)如何输入程序段;
3.按照题目要求预先编写好实验中的程序段。
五、实验任务
1.通过下述程序段的输入和执行来熟悉EMU的使用,并通过显示器屏幕观察程序的执行情况。
练习程序段如下:
MOVBL,08H
MOVCL,BL
MOVAX,03FFH
MOVBX,AX
MOVDS:
[0020H],BX
2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。
压栈程序段如下:
MOVAX,0102H
MOVBX,0304H
MOVCX,0506H
MOVDX,0708H
PUSHAX
PUSHBX
PUSHCX
PUSHDX
出栈程序段请自行编写(用不同的出栈顺序)。
3.指出下列指令的错误并加以改正,上机验证之。
(1)MOV[BX],[SI]不能在两个内存之间操作
(2)MOVAH,BX变量未定义,操作数不一致
(3)MOVAX,[SI][DI][SI]不能和[DI]相配
(4)MOVBYTEPTR[BX],2000H操作数不匹配
(5)MOVCS,AXCS不能直接修改
(6)MOVDS,2000H不能使用立即值,只能使用段寄存器
4.设置各寄存器及存储单元的内容如下:
(BX)=0010H,(SI)=0001H
(10010H)=12H,(10011H)=34H,(10012H)=56H,(10013H)=78H
(10120H)=0ABH,(10121H)=0CDH,(10122H)=0EFH
说明下列各条指令执行完后AX寄存器中的内容,并上机验证。
(1)MOVAX,1200H
(2)MOVAX,BX
(3)MOVAX,[0120H]
(4)MOVAX,[BX]
(5)MOVAX,0110H[BX]
(6)MOVAX,[BX][SI]
(7)MOVAX,0110H[BX][SI]
5.将DS:
1000H字节存储单元中的内容送到DS:
2020H单元中存放。
试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。
6.设AX寄存器中的内容为1111H,BX寄存器中的内容为2222H,DS:
0010H单元中的内容为3333H。
将AX寄存器中的内容与BX寄存器中的内容交换,然后再将BX寄存器中的内容与DS:
0010H单元中的内容进行交换。
试编写程序段,并上机验证结果。
7.设(DS)=1000H,(ES)=2000H,有关存储器的内容如图1.5所示。
要求将DS段的内容传送到AX寄存器,ES段的内容传送到BX寄存器,试编写程序段。
DS:
1000H
0FFH
0EEH
0DDH
0CCH
ES:
2000H
图1.5第7题图
六、实验报告要求
1.写明本次实验内容和实验步骤。
2.整理出运行正确的各题源程序段和运行结果。
3.写出第3题中改正后的正确指令。
4.小结EMU的使用方法
实验二算术逻辑运算及移位操作
一、实验目的
1.熟悉算术逻辑运算指令和移位指令的功能。
2.了解标志寄存器各标志位的意义和指令执行对它的影响。
二、实验预习要求
1.复习8086指令系统中的算术逻辑类指令和移位指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、实验任务
1.实验程序段及结果表格如表1.2:
表1.2
标志位
CF
ZF
SF
OF
PF
AF
程序段1:
MOVAX,1018H
MOVSI,230AH
ADDAX,SI
ADDAL,30H
MOVDX,3FFH
ADDAX,BX
MOV[20H],1000H
ADD[20H],AX
PUSHAX
POPBX
0
0
0
0
0
0
程序段2:
MOVAX,0A0AH
ADDAX,0FFFFH
MOVCX,0FF00H
ADCAX,CX
SUBAX,AX
INCAX
ORCX,0FFH
ANDCX,0F0FH
MOV[10H],CX
0
0
0
0
0
0
程序段3:
MOVBL,25H
MOVBYTEPTR[10H],4
MOVAL,[10H]
MULBL
0
0
0
0
0
0
程序段4:
MOVWORDPTR[10H],80H
MOVBL,4
MOVAX,[10H]
DIVBL
0
0
0
0
0
0
程序段5:
MOVAX,0
DECAX
ADDAX,3FFFH
ADDAX,AX
NOTAX
SUBAX,3
ORAX,0FBFDH
ANDAX,0AFCFH
SHLAX,1
RCLAX,1
0
0
0
0
0
0
2.用BX寄存器作为地址指针,从BX所指的内存单元(0010H)开始连续存入三个无符号数(10H、04H、30H),接着计算内存单元中的这三个数之和,和放在0013H单元中,再求出这三个数之积,积放0014单元中。
写出完成此功能的程序段并上机验证结果。
3.写出完成下述功能的程序段。
上机验证你写出的程序段,程序运行的最后结果(AX)=?
(1)传送15H到AL寄存器;
(2)再将AL的内容乘以2;
(3)接着传送15H到BL寄存器;
(4)最后把AL的内容乘以BL的内容。
4.写出完成下述功能的程序段。
上机验证你写出的程序段,程序运行后的商=?
(1)传送数据2058H到DS:
1000H单元中,数据12H到DS:
1002H单元中;
(2)把DS:
1000H单元中的数据传送到AX寄存器;
(3)把AX寄存器的内容算术右移二位;
(4)再把AX寄存器的内容除以DS:
1002H字节单元中的数;
(5)最后把商存入字节单元DS:
1003H中。
5.下面的程序段用来清除数据段中从偏移地址0010H开始的12个字存储单元的内容(即将零送到这些存储单元中去)。
(1)将第4条比较指令语句填写完整(划线处)。
MOVSI,0010H
NEXT:
MOVWORDPTR[SI],0
ADDSI,2
CMPSI,
JNENEXT
HLT
(2)假定要按高地址到低地址的顺序进行清除操作(高地址从0020H开始),则上述程序段应如何修改?
上机验证以上两个程序段并检查存储单元的内容是否按要求进行了改变。
6.输入并运行表1.3中的程序段,把结果填入表右边的空格中,并分析结果,说明本程序段的功能是什么。
表1.3
程序段
字单元(1A00H)=
字单元(1A02H)=
MOV[1A00H],0AA55H
MOV[1A02H],2AD5H
SHLWORDPTR[1A02H],1
CMP[1A00H],8000H
CMC
RCLWORDPTR[1A02H],1
RCLWORDPTR[1A00H],1
四、实验报告要求
1.整理出完整的实验程序段和运行结果。
2.回答题目中的问题。
3.简要说明ADD、SUB、AND、OR指令对标志位的影响。
4.简要说明一般移位指令与循环移位指令之间的主要区别。
实验三算术逻辑运算及移位操作
一、实验目的
1.熟悉串操作指令的功能。
2.了解串操作指令的使用方法。
二、实验预习要求
1.复习8086指令系统中的串操作类指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、实验任务
1.输入以下程序段并运行之,回答后面的问题。
CLD
MOVDI,1000H
MOVAX,55AAH
MOVCX,10H
REPSTOSW
上述程序段执行后:
(1)从DS:
1000H开始的16个字单元的内容是什么?
(2)(DI)=?
(CX)=?
,并解释其原因。
2.在上题的基础上,再输入以下程序段并运行之,回答后面的问题。
MOVSI,1000H
MOVDI,2000H
MOVCX,20H
REPMOVSB
程序段执行后:
(1)从DS:
2000H开始的16个字单元的内容是什么?
(2)(SI)=?
(DI)=?
(CX)=?
,并分析之。
3.在以上两题的基础上,再输入以下三个程序段并依次运行之。
程序段1:
MOVSI,1000H
MOVDI,2000H
MOVCX,10H
REPZCMPSW
程序段1执行后:
(1)ZF=?
根据ZF的状态,你认为两个串是否比较完了?
(2)(SI)=?
(DI)=?
(CX)=?
,并分析之。
程序段2:
MOV[2008H],4455H
MOVSI,1000H
MOVDI,2000H
MOVCX,10H
REPZCMPSW
程序段2执行后:
(1)ZF=?
根据ZF的状态,你认为两个串是否比较完了?
(2)(SI)=?
(DI)=?
(CX)=?
,并分析之。
程序段3:
MOVAX,4455H
MOVDI,2000H
MOVCX,10H
REPNZSCASW
程序段3执行后:
(1)ZF=?
根据ZF的状态,你认为在串中是否找到了数据4455H?
(2)(SI)=?
(DI)=?
(CX)=?
,并分析之。
4.从DS:
1000H开始存放有一个字符串”Thisisastring”,要求把这个字符串从后往前传送到DS:
2000H开始的内存区域中(即传送结束后,从DS:
2000H开始的内存单元的内容为”gnirtsasisihT”),试编写程序段并上机验证之。
四、实验报告要求
1.整理出完整的实验程序段和运行结果,对结果进行分析。
2.简要说明执行串操作指令之前应初始化哪些寄存器和标志位。
3.总结串操作指令的用途及使用方法。
实验四字符及字符串的输入和输出
一、实验目的
1.熟悉如何进行字符及字符串的输入输出。
2.掌握简单的DOS系统功能调用。
二、实验预习要求
1.复习系统功能调用的1、2、9、10号功能。
2.按照题目要求预先编写好实验中的程序段。
三、实验任务
1.输入以下程序段并用F8键单步运行,执行INT21H指令时,在键盘上按“5”键。
MOVAH,1
INT21H
(1)运行结束后,(AL)=?
它是哪一个键的ASCII码?
(2)重复运行以上程序段,并分别用“A”、“B”、“C”、“D”键代替“5”键,观察运行结果有何变化?
2.在DS:
1000H开始的内存区域设置如下键盘缓冲区:
DS:
1000H5,0,0,0,0,0,0
然后输入以下程序段并用F8键单步运行,执行INT21H指令时,在键盘上键入“5”、“4”、“3”、“2”、“1”、〈回车〉这六个键。
LEADX,[1000H]
MOVAH,0AH
INT21H
程序段运行完后,检查DS:
1000H开始的内存区域:
(1)DS:
1001H单元的内容是什么?
它表示了什么含义?
(2)从DS:
1002H开始的内存区域中的内容是什么?
其中是否有字符“1”的ASCII码?
为什么?
3.输入以下程序段并运行之。
MOVDL,‘A’
MOVAH,2
INT21H
(1)观察屏幕上的输出,是否显示了“A”字符?
(2)分别用“#”、“X”、“Y”、“$”、“?
”代替程序段中的“A”字符,观察屏幕上的输出有何变化。
(3)分别用0DH、0AH代替程序段中的“A”字符,观察屏幕上的输出有何变化。
(4)用07H代替程序段中的“A”字符,观察屏幕上有无输出?
计算机内的扬声器是否发出“哔”的声音?
4.要在屏幕上显示一个字符串“Hello,world”,写出该字符串变量的定义语句和显示这个字符串的程序段。
上机验证之。
5.按6行×16列的格式顺序显示ASCII码为20H到7FH之间的所有字符,即每16个字符为一行,共6行。
每行中相邻的两个字符之间用空格字符分隔开。
试编写程序段并上机运行验证。
提示:
程序段包括两层循环,内循环次数为16,每次内循环显示一个字符和一个空格字符;外循环次数为6,每个外循环显示一行字符并显示一个回车符(0DH)和一个换行符(0AH)。
四、实验报告要求
1.整理出运行完整的实验程序和运行结果。
2.回答题目中的问题。
3.说明系统功能调用的10号功能对键盘缓冲区格式上有何要求。
4.1、2、9、10号功能的输入输出参数有哪些?
分别放在什么寄存器中?
5.总结一下,如何实现字符及字符串的输入输出。
《微机原理与接口技术》软件编程题目
每位同学,取自己学号的末尾数字N,按照N%4后的序号选择对应的题目,如果答错题目,算没有完成本任务。
括号中的内容为对应题目在硬件平台实验中需完成的内容。
(0)、设MEM1中有一个任意字符串STRING,以ASCII码’$’结尾,假定MEM1中的字符串不会导致数据段的溢出,编写一个程序,在STRING中找到第一次出现“OK”这个字母序列的首地址,如果没有这个序列,则直接返回0,并在显示器(LED)上显示。
(1)用户从显示器(键盘)上输入一个1~9的数字,如果输入的不是数字或者输入的数字超过范围,则在显示器上提示用户重新输入,如果输入的数据为奇数,则对MEM1和MEM2中的多字节无符号数求和,如果输入的数据为偶数,则对MEM1和MEM2中的多字节无符号数求差(MEM1-MEM2,假定MEM1中的数据>MEM2中的数据),并将结果保存在MEM1中,将结果显示在显示器上(将最高的若干位显示在LED上)。
(2)、用户从显示器(键盘)上输入一个1~9的数字,如果输入的不是数字或者输入的数字超过范围,则在显示器上提示用户重新输入,如果输入的数据为奇数,则对MEM1和MEM2中的多字节压缩BCD码求和,如果输入的数据为偶数,则对MEM1和MEM2中的多字节压缩BC求差(MEM1-MEM2,假定MEM1中的数据>MEM2中的数据),并将结果保存在MEM1中,将结果显示在显示器上(将最高的若干位显示在LED上)。
(3)、设MEM1中有一个任意字符串STRING,以ASCII码’$’结尾,假定MEM1中的字符串不会导致数据段的溢出,编写一个程序,在STRING中找到第一次出现“v”这个字母首地址,将“v”之前的字符串保存到MEM2中,将“v”之后的字符串保存到MEM3中,在显示器上显示MEM2和MEM3的内容(在硬件实验中,根据用户输入1或2,显示MEM2和MEM3的前面几个字符)。