资源描述
微机原理实验指导书
2
2020年4月19日
文档仅供参考
实验一数据传送
实验目的 :
1. 熟悉 8086 指令系统的数据传送指令及 8086 的寻址方式。
2. 利用 Turbo Debugger 调试工具来调试汇编语言程序。
实验任务 :
1.经过下述程序段的输入和执行来熟悉 Turbo Debugger 的使用,并经过显示器屏幕观察程序的执行情况。练习程序段如下:
MOV BL , 08H
MOV CL , BL
MOV AX , 03FFH
MOV BX , AX
MOV DS : [0020H] , BX
2.用以下程序段将一组数据压入( PUSH )堆栈区,然后经过不同的出栈顺序出栈,观察出栈后数据的变化情况。压栈程序段如下:
MOV AX , 0102H
MOV BX , 0304H
MOV CX , 0506H
MOV DX , 0708H
PUSH AX
PUSH BX
PUSH CX
PUSH DX
出栈程序段请自行编写(用不同的出栈顺序)。
3. 指出下列指令的错误并加以改正,上机验证之。
(1) MOV [BX] , [SI]
(2) MOV AH , BX
(3) MOV AX , [SI][DI]
(4) MOV BYTE PTR[BX] , H
(5) MOV CS , AX
(6) MOV DS , H
4. 设置各寄存器及存储单元的内容如下:
(BX) = 0010H , (SI) = 0001H
(10010H) = 12H , (10011H) = 34H , (10012H) = 56H , (10013H) = 78H
(10120H) = 0ABH , (10121H) = 0CDH , (10122H) = 0EFH
说明下列各条指令执行完后 AX 寄存器中的内容,并上机验证。
(1) MOV AX , 1200H
(2) MOV AX , BX
(3) MOV AX , [0120H]
(4) MOV AX , [BX]
(5) MOV AX , 0110H[BX]
(6) MOV AX , [BX][SI]
(7) MOV AX , 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) = H ,有关存储器的内容如图 1.5 所示。要求将 DS 段的内容传送到 AX 寄存器, ES 段的内容传送到 BX 寄存器,试编写程序段。
DS : 1000H
...
0FFH
0EEH
...
ES : H
0DDH
0CCH
...
图 1 第 7 题图
实验报告要求 :
1. 写明本次实验内容和实验步骤。
2. 整理出运行正确的各题源程序段和运行结果。
3. 写出第 3 题中改正后的正确指令。
4. 小结 Turbo Debugger 的使用方法。
实验二 算术逻辑运算及移位操作
实验目的 :
1.熟悉算术逻辑运算指令和移位指令的功能。
2.了解标志寄存器各标志位的意义和指令执行对它的影响。
实验预习要求:
1.复习 8086 指令系统中的算术逻辑类指令和移位指令。
2.按照题目要求在实验前编写好实验中的程序段。
实验任务:
1. 实验程序段及结果表格如表 2 :
表 2
标志位
CF
ZF
SF
OF
PF
AF
程序段 1 :
MOV AX, 1018H
MOV SI, 230AH
ADD AX, SI
ADD AL, 30H
MOV DX, 3FFH
ADD AX , BX
MOV [20H], 1000H
ADD [20H], AX
PUSH AX
POP BX
0
0
0
0
0
0
程序段 2 :
MOV AX, 0A 0AH
ADD AX, 0FFFFH
MOV CX, 0FF00H
ADC AX, CX
SUB AX, AX
INC AX
OR CX, 0FFH
AND CX, 0F 0FH
MOV [10H], CX
0
0
0
0
0
0
程序段 3 :
MOV BL, 25H
MOV BYTE PTR[10H], 4
MOV AL, [10H]
MUL BL
0
0
0
0
0
0
程序段 4 :
MOV WORD PTR[10H],80H
MOV BL, 4
MOV AX, [10H]
DIV BL
0
0
0
0
0
0
程序段 5 :
MOV AX, 0
DEC AX
ADD AX, 3FFFH
ADD AX, AX
NOT AX
SUB AX, 3
OR AX, 0FBFDH
AND AX, 0AFCFH
SHL AX , 1
RCL AX , 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 :1 003H 中。
5.下面的程序段用来清除数据段中从偏移地址 0010H 开始的 12 个字存储单元的内容(即将零送到这些存储单元中去)。
(1) 将第 4 条比较指令语句填写完整(划线处)。
MOV SI , 0010H
NEXT : MOV WORD PTR[SI] , 0
ADD SI , 2
CMP SI ,
JNE NEXT
HLT
(2) 假定要按高地址到低地址的顺序进行清除操作(高地址从 0020H 开始),则上述程序段应如何修改?
上机验证以上两个程序段并检查存储单元的内容是否按要求进行了改变。
6. 输入并运行表 3 中的程序段,把结果填入表右边的空格中,并分析结果,说明本程序段的功能是什么。
表 3
程序段
字单元 ( 1A 00H)=
字单元 ( 1A 02H)=
MOV [ 1A 00H], 0AA55H
MOV [ 1A 02H], 2AD5H
SHL WORD PTR[ 1A 02H],1
CMP [ 1A 00H], 8000H
CMC
RCL WORD PTR[ 1A 02H],1
RCL WORD PTR[ 1A 00H],1
实验报告要求
1.整理出完整的实验程序段和运行结果。
2.回答题目中的问题。
3. 简要说明 ADD 、 SUB 、 AND 、 OR 指令对标志位的影响。
4. 简要说明一般移位指令与循环移位指令之间的主要区别。
实验三串操作
实验目的:
1.熟悉串操作指令的功能。
2.了解串操作指令的使用方法。
实验预习要求;
1.复习 8086 指令系统中的串操作类指令。
2.按照题目要求在实验前编写好实验中的程序段。
实验任务 :
1. 输入以下程序段并运行之,回答后面的问题。
CLD
MOV DI , 1000H
MOV AX , 55AAH
MOV CX , 10H
REP STOSW
上述程序段执行后:
(1) 从 DS : 1000H 开始的 16 个字单元的内容是什么?
(2) ( DI ) = ?( CX ) = ?,并解释其原因。
2.在上题的基础上,再输入以下程序段并运行之,回答后面的问题。
MOV SI , 1000H
MOV DI , H
MOV CX , 20H
REP MOVSB
程序段执行后:
(1) 从 DS : H 开始的 16 个字单元的内容是什么?
(2) ( SI ) = ?( DI ) = ?( CX ) = ?,并分析之。
3.在以上两题的基础上,再输入以下三个程序段并依次运行之。
程序段 1 :
MOV SI , 1000H
MOV DI , H
MOV CX , 10H
REPZ CMPSW
程序段 1 执行后:
(1) ZF= ? 根据 ZF 的状态,你认为两个串是否比较完了?
(2) ( SI ) = ?( DI ) = ?( CX ) = ?,并分析之。
程序段 2 :
MOV [ H] , 4455H
MOV SI , 1000H
MOV DI , H
MOV CX , 10H
REPZ CMPSW
程序段 2 执行后:
(1) ZF= ? 根据 ZF 的状态,你认为两个串是否比较完了?
(2) ( SI ) = ?( DI ) = ?( CX ) = ?,并分析之。
程序段 3 :
MOV AX , 4455H
MOV DI , H
MOV CX , 10H
REPNZ SCASW
程序段 3 执行后:
(1) ZF= ? 根据 ZF 的状态,你认为在串中是否找到了数据 4455H ?
(2) ( SI ) = ?( DI ) = ?( CX ) = ?,并分析之。
4. 从 DS : 1000H 开始存放有一个字符串 ”This is a string” ,要求把这个字符串从后往前传送到 DS : H 开始的内存区域中(即传送结束后,从 DS : H 开始的内存单元的内容为 ”gnirts a si sihT” ),试编写程序段并上机验证之。
实验报告要求 :
1.整理出完整的实验程序段和运行结果,对结果进行分析。
2.简要说明执行串操作指令之前应初始化哪些寄存器和标志位。
3.总结串操作指令的用途及使用方法。
实验四字符及字符串的输入和输出
实验目的 :
1.熟悉如何进行字符及字符串的输入输出。
2.掌握简单的 DOS 系统功能调用。
实验预习要求 :
1.复习系统功能调用的 1 、 2 、 9 、 10 号功能。
2.按照题目要求预先编写好实验中的程序段。
实验任务 :
1. 输入以下程序段并用 F8 键单步运行,执行 INT 21H 指令时,在键盘上按“ 5 ”键。
MOV AH , 1
INT 21H
(1) 运行结束后,( AL ) = ?它是哪一个键的 ASCII 码?
(2) 重复运行以上程序段,并分别用“ A ”、“ B ”、“ C ”、“ D ”键代替“ 5 ” 键,观察运行结果有何变化?
2. 在 DS : 1000H 开始的内存区域设置如下键盘缓冲区:
DS : 1000H 5 , 0 , 0 , 0 , 0 , 0 , 0
然后输入以下程序段并用 F8 键单步运行,执行 INT 21H 指令时,在键盘上键入“ 5 ”、“ 4 ”、“ 3 ”、“ 2 ”、“ 1 ”、〈回车〉这六个键。
LEA DX , [1000H]
MOV AH , 0AH
INT 21H
程序段运行完后,检查 DS : 1000H 开始的内存区域:
(1) DS : 1001H 单元的内容是什么?它表示了什么含义?
(2) 从 DS : 1002H 开始的内存区域中的内容是什么?其中是否有字符“ 1 ” 的 ASCII 码?为什么?
3. 输入以下程序段并运行之。
MOV DL ,‘ A '
MOV AH , 2
INT 21H
(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. 总结一下,如何实现字符及字符串的输入输出。
实验五分支及循环程序设计
实验目的 :
1. 学习提示信息的显示及键盘输入字符的方法。
2. 掌握分支程序和循环程序的设计方法。
实验预习要求 :
1. 复习比较指令、转移指令、循环指令的用法。
2. 根据编程提示,编出汇编语言源程序。
3. 有兴趣的同学请编写出实验习题中的程序。
分支程序和循环程序简介 :
1. 分支程序是根据不同条件执行不同处理过程的程序。分支程序的结构有两种:—种是二分支,—种是多分支。它们的共同特点是在满足某一条件时,将执行多个分支中的某—分支。
2. 循环程序
实验内容 :
在屏幕上显示提示信息“ Please input 10 numbers: ”,提示用户输入 10 个数(数的范围在 0 ~ 99 之间),然后从键盘上读入这 10 个数。接着对这 10 个数从小到大进行排序,并统计 0 ~ 59 、 60 ~ 79 、 80 ~ 99 的数各有多少。最后在屏幕上显示排序后的数(每个数之间用逗号分隔)并显示统计的结果。显示格式如下:
Sorted numbers: xx,xx,xx,xx,xx,xx,xx,xx,xx,xx
0-59: xx
60-79: xx
80-99: xx
实验习题 :
1. 从键盘输入任意一个字符串,统计其中不同字符出现的次数(不分大小写),并把结果显示在屏幕上。
2. 从键盘分别输入两个字符串,若第二个字符串包含在第一个字符串中则显示‘ MATCH ',否则显示‘ NO MATCH '。
实验报告要求 :
1. 整理出完整的实验程序。
2. 总结一下编制分支程序和循环程序的要点。
3. (选做)在实验习题 1 和实验习题 2 中任选一个,编写程序并上机验证。
实验六 交通灯实验
一. 实验要求
编写程序,以8255作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟十字路口交通灯管理。
二. 实验目的
1. 学习在PC机系统中扩展简单I/O接口的方法。
2. 进一步学习编制数据输出程序的设计方法。
3. 学习模拟交通灯控制的方法。
4. 学习双色灯的使用。
三. 实验电路及连线
PC0—PC3连DR1—DR4,PC4—PC7连DG1—DG4。CS55连218H—21FH孔。
四. 实验说明
1.因为本实验是模拟交通灯控制实验,因此要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西、南北均为红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西依然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北依然红灯。最后循环至状态1。
2.双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。当红色正端加高电平,绿色正端加低电平时,红灯亮;当红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮.
五. 实验程序框图
由于各PC机速度不一样,可适当调节伪指令D1,D2的值,使实验效果更佳。初始化
设置8255各口为输出
清LED
四灯全红,延时
南北绿灯,东西红灯,延时
绿灯闪三次
南北黄灯,延时
南北红灯,东西绿灯,延时
绿灯闪三次
东西黄灯,延时
返回DOS
N
有键按下
Y
六.思考题
编写程序,使所有黄灯闪烁(每秒闪烁一次,闪三次)。
实验七、D/A转换实验
一. 实验要求
用键盘输入来控制D/A输出的波形,程序应能输出锯齿波、三角波、方波和正弦波。
二. 实验目的
1. 掌握DAC0832芯片的4性能、使用方法及对应的硬件电路。
2. 了解D/A转换的基本原理。
三. 实验电路及连线
四.实验说明
D/A转换是把数字量转换成模拟量的变换,从本书D/A电路输出的是模拟电压信号.要实现实验要求,比较简单的方法是产生四个波形的表格,然后经过查表来实现波形显示.
产生方波只需控制输出高低电平的时间,产生锯齿波和三角波的表格需由数字量的增减来控制,同时要注意三角波要分两段来产生.
要产生正弦波,能够造一张正弦数字量表.即查函数表得到的值转换成十六进制数填表.D/A转换取值范围为一个周期,采样点越多,精度越高些.本例采用的采样点为64点/周期.
五.实验程序框图
Y
Y
Y
Y
返回DOS
N
N
N
N
有键按下
有键按下
有键按下
有键按下
产生正弦波
产生方波
产生三角波
产生锯齿波
Y
Y
Y
Y
Y
Y
N
N
N
N
N
无效按键,信息提示
键是5
键是4
键是3
键是1
键是2
显示提示信息
等待有键按下
初始化
六思考题
编写一个程序根据输入产生响应频率锯齿波
实验八汇编语言综合程序设计
【实验目的】
1. 汇编语言综合程序设计;
2. 学会编写实用性的汇编程序;
3. 熟练使用和掌握DOS、BIOS功能调用。
【实验内容】
1.权限管理程序。经过键盘输入六位数字,要求屏幕上显示的全都是“*”号,只有知道密码的人才能看到刚刚输入的六个数字。(提示:该程序实现的功能类似银行里的存折密码管理系统)
题目要求:
(1)当从键盘上输入的不是数字时,提示出错
(2)有权限的人才能让刚刚输入的数字显示出来(即银行里一般的职员看不到储户输入的密码,只有高级职员才能看到储户的密码)
(3)储户以后输入密码时,若与第一次的密码相同应提示“Password is Right”,否则,提示“Password is Wrong”
2.编写程序,利用循环语句计算1+2+3+4+5.。。。+N,并把结果显示出来,其中N由键盘输入。
【实验要求】
1.写出程序清单,并进行详尽的注释
2.程序编写过程遇到那些困难?你是如何解决的?
思考:
你认为这个程序还有哪些地方能够更完善的?请给出意见,并实现!
展开阅读全文