8086微机原理及接口技术实验教程chu副本Word格式.docx
- 文档编号:4946882
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:41
- 大小:139.89KB
8086微机原理及接口技术实验教程chu副本Word格式.docx
《8086微机原理及接口技术实验教程chu副本Word格式.docx》由会员分享,可在线阅读,更多相关《8086微机原理及接口技术实验教程chu副本Word格式.docx(41页珍藏版)》请在冰点文库上搜索。
0100
34H
19H
66H
5
0101
35H
12H
6DH
6
0110
36H
02H
7DH
7
0111
37H
78H
07H
8
1000
38H
00H
7FH
9
1001
39H
18H
67H
A
1010
41H
08H
77H
B
1011
42H
03H
7CH
C
1100
43H
46H
D
1101
44H
21H
5EH
E
1110
45H
F
1111
0EH
71H
程序流程图如图1.12所示。
实验参考程序如下。
实验程序清单(例程文件名:
A2-1.ASM)
SSTACKSEGMENTSTACK
DW64DUP(?
)
SSTACKENDS
DATASEGMENT
SADDDB30H,30H,32H,35H,36H;
十进制数:
00256
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,OFFSETSADD
MOVSI,AX
MOVBX,000AH
MOVCX,0004H
MOVAH,00H
MOVAL,[SI]
SUBAL,30H
A1:
IMULBX
MOVDX,[SI+01]
ANDDX,00FFH
ADCAX,DX
SBBAX,30H
INCSI
LOOPA1
A2:
JMPA2
CODEENDS
ENDSTART
实验步骤
(1)绘制程序流程图,编写实验程序,经编译、链接无误后装入系统。
(2)待转换数据存放于数据段,根据自己要求输入,默认为30H,30H,32H,35H,36H。
(3)运行程序,然后停止程序。
(4)查看AX寄存器,即为转换结果,应为:
0100。
(5)反复试几组数据,验证程序的正确性。
2.将十进制数的ASCII码转换为BCD码
从键盘输入五位十进制数的ASCII码,存放于3500H起始的内存单元中,将其转换为BCD码后,再按位分别存入350AH起始的内存单元内。
若输入的不是十进制的ASCII码,则对应存放结果的单元内容为“FF”。
由表1.1可知,一字节ASCII码取其低四位即变为BCD码。
A2-2.ASM)
SSTACKSEGMENTSTACK
DW64DUP(?
)
SSTACKENDS图1.12转换程序流程图
CODE
MOVCX,0005H;
转换位数
MOVDI,3500H;
ASCII码首地址
MOVBL,0FFH;
将错误标志存入BL
MOVAL,[DI]
CMPAL,3AH
JNBA2;
不低于3AH则转A2
JBA2;
低于30H则转A2
MOVBL,AL
MOVAL,BL;
结果或错误标志送入AL
MOV[DI+0AH],AL;
结果存入目标地址
INCDI
MOVAX,4C00H
INT21H;
程序终止
(1)自己绘制程序流程图,然后编写程序,编译、链接无误后装入系统。
(2)在3500H~3504H单元中存放五位十进制数的ASCII码,即:
键入E3500后,输入31,32,33,34,35。
(3)运行程序,待程序运行停止。
(4)在调试窗口键入D350A,显示运行结果,应为:
0000:
350A0102030405CC…
(5)反复测试几组数据,验证程序功能。
3.将十六位二进制数转换为ASCII码表示的十进制数
十六位二进制数的值域为0~65535,最大可转换为五位十进制数。
五位十进制数可表示为:
Di:
表示十进制数0~9
将十六位二进制数转换为五位ASCII码表示的十进制数,就是求D1~D4,并将它们转换为ASCII码。
自行绘制程序流程图,编写程序可参考例程。
例程中源数存放于3500H、3501H中,转换结果存放于3510H~3514H单元中。
A2-3.ASM)
MOVSI,3500H;
源数据地址
MOVDX,[SI]
MOVSI,3515H;
目标数据地址
DECSI
MOVAX,DX
MOVDX,0000H
MOVCX,000AH;
除数10
DIVCX;
得商送AX,得余数送DX
XCHGAX,DX
ADDAL,30H;
得Di的ASCII码
MOV[SI],AL;
存入目标地址
CMPDX,0000H
JNEA1;
判断转换结束否,未结束则转A1
CMPSI,3510H;
与目标地址得首地址比较
JZA3;
等于首地址则转A3,否则将剩余地址中填30H
MOVAL,30H
MOV[SI],AL
A3:
INT21H;
CODEENDS
(1)编写程序,经编译、链接无误后,装入系统。
(2)在3500H、3501H中存入0C00。
(4)检查运行结果,键入D3510,结果应为:
3030303132。
(5)可反复测试几组数据,验证程序的正确性。
4.十六进制数转换为ASCII码
由表1.1中十六进制数与ASCII码的对应关系可知:
将十六进制数0H~09H加上30H后得到相应的ASCII码,AH~FH加上37H可得到相应的ASCII码。
将四位十六进制数存放于起始地址为3500H的内存单元中,把它们转换为ASCII码后存入起始地址为350AH的内存单元中。
自行绘制流程图。
实验程序清单(例程文件名为A2-4.ASM)
MOVCX,0004H
MOVDI,3500H;
十六进制数源地址
MOVDX,[DI]
ANDAX,000FH;
取低4位
CMPAL,0AH
JBA2;
小于0AH则转A2
ADDAL,07H;
在A~FH之间,需多加上7H
转换为相应ASCII码
MOV[DI+0DH],AL;
DECDI
PUSHCX
MOVCL,04H
SHRDX,CL;
将十六进制数右移4位
POPCX
(1)编写程序,经编译、链接无误后装入系统。
(2)在3500H、3501H中存入四位十六进制数203B,即键入E3500,然后输入3B20。
(3)先运行程序,待程序运行停止。
(4)键入D350A,显示结果为:
0000:
350A32303342CC…。
(5)反复输入几组数据,验证程序功能。
5.BCD码转换为二进制数
将四个二位十进制数的BCD码存放于3500H起始的内存单元中,将转换的二进制数存入3510H起始的内存单元中,自行绘制流程图并编写程序。
实验程序清单(例程文件名为:
A2-5.ASM)
XORAX,AX
MOVSI,3500H
MOVDI,3510H
ADDAL,AL
ADDAL,BL
ADDAL,[SI]
MOV[DI],AL
(2)将四个二位十进制数的BCD码存入3500H~3507H中,即:
先键入E3500,然后输入0102030405060708。
(4)键入D3510显示转换结果,应为:
0C22384E。
1.2.4思考题
1.实验内容1中将一个五位十进制数转换为二进制数(十六位)时,这个十进制数最小可为多少,最大可为多少?
为什么?
2.将一个十六位二进制数转换为ASCII码十进制数时,如何确定Di的值?
3.在十六进制转换为ASCII码时,存转换结果后,为什么要把DX向右移四次?
4.自编ASCII码转换十六进制、十六进制小数转换二进制、二进制转换BCD码的程序,并调试运行。
1.3运算类编程实验
1.3.1实验目的
1.掌握使用运算类指令编程及调试方法。
2.掌握运算类指令对各状态标志位的影响及其测试方法。
3.学习使用软件监视变量的方法。
1.3.2实验设备
1.3.3实验内容及步骤
80X86指令系统提供了实现加、减、乘、除运算的基本指令,可对表1.2所示的数据类型进行算术运算。
表1.2数据类型算术运算表
数制
带符号
无符号
组合
非组合
运算符
+、-、×
、÷
+、-
操作数
字节、字、多精度
字节(二位数字)
字节(一位数字)
1.二进制双精度加法运算
计算X+Y=Z,将结果Z存入某存储单元。
实验程序参考如下。
本实验是双精度(2个16位,即32位)加法运算,编程时可利用累加器AX,先求低16位的和,并将运算结果存入低地址存储单元,然后求高16位的和,将结果存入高地址存储单元中。
由于低16运算后可能向高位产生进位,因此高16位运算时使用ADC指令,这样在低16位相加运算有进位时,高位相加会加上CF中的1。
A3-1.ASM)
PUBLICXH,XL,YH,YL,ZH,ZL;
设置全局变量
XLDW?
;
X低位
XHDW?
X高位
YLDW?
Y低位
YHDW?
Y高位
ZLDW?
Z低位
ZHDW?
Z高位
MOVAX,XL
ADDAX,YL;
X低位加Y低位
MOVZL,AX;
低位和存到Z的低位
MOVAX,XH
ADCAX,YH;
高位带进位加
MOVZH,AX;
存高位结果
JMPSTART;
在此行设置断点,以观察变量值
(2)程序装载完成后,点击‘变量区’标签将观察窗切换到变量监视窗口。
(3)点击
,将变量XH,XL,YH,YL,ZH,ZL添加到变量监视窗中,然后修改XH,XL,YH,YL的值,如图2.13所示,修改XH为0015,XL为65A0,YH为0021,YL为B79E。
(4)在JMPSTART语句行设置断点,然后运行程序。
(5)当程序遇到断点后停止运行,查看变量监视窗口,计算结果ZH为0037,ZL为1D3E。
(6)修改XH,XL,YH和YL的值,再次运行程序,观察实验结果,反复测试几组数据,验证程序的功能。
图1.13变量监视窗口
思考题:
1.求累加和程序设计,在偏移地址为1000H开始依顺序填入16个字(16个16位数),利用程序求和,存放在偏移地址2000H;
2.多字节加法程序设计,参考原程序,编写个两个64位数的减法程序,结果保存到具体内存单元,调试并记录。
2.十进制的BCD码减法运算
计算X-Y=Z,其中X、Y、Z为BCD码。
实验程序参考例程。
实验程序清单(例程文件名为A3-2.ASM)
PUBLICX,Y,Z;
定义全局变量
XDW?
YDW?
ZDW?
SAHF
MOVCX,0002H
MOVSI,OFFSETX
MOVDI,OFFSETZ
SBBAL,[SI+02H]
DAS
PUSHF
ANDAL,0FH
POPF
JMPSTART;
设置断点,以方便观察变量。
(1)输入程序,编译、链接无误后装入系统。
(2)点击
将变量X,Y,Z添加到变量监视窗中,并为X,Y赋值,假定存入40与12的BCD码,即X为0400,Y为0102。
(3)在JMPSTART语句行设置断点,然后运行程序。
(4)程序遇到断点后停止运行,观察变量监视窗,Z应为0208。
(5)重新修改X与Y的值,运行程序,观察结果,反复测试几次,验证程序正确性。
3.乘法运算
实现十进制数的乘法运算,被乘数与乘数均以BCD码的形式存放在内存中,乘数为1位,被乘数为5位,结果为6位。
实验程序清单(例程文件名为A3-3.ASM)
DATA1DB5DUP(?
);
被乘数
DATA2DB?
;
乘数
RESULTDB6DUP(?
计算结果
DATAENDS
CODE,DS:
MOVAX,DATA
MOVDS,AX
CALLINIT;
初始化目标地址单元为0
MOVSI,OFFSETDATA2
MOVBL,[SI]
ANDBL,0FH;
得到乘数
CMPBL,09H
JNCERROR
MOVSI,OFFSETDATA1
MOVDI,OFFSETRESULT
MOVCX,0005H
MOVAL,[SI+04H]
ANDAL,0FH
CMPAL,09H
MULBL
AAM;
乘法调整指令
ADDAL,[DI+05H]
AAA
MOV[DI+05H],AL
MOV[DI+05H],AH
;
===将RESULT所指内存单元清零===
INIT:
MOVSI,OFFSETRESULT
MOVCX,0003H
MOVAX,0000H
MOV[SI],AX
LOOPA3
RET
===错误处理===
ERROR:
MOVSI,OFFSETRESULT;
若输入数据不符合要求则RESULT所指向内存单元全部写入E
MOVAX,0EEEEH
A4:
LOOPA4
(1)编写程序,编译、链接无误后装入系统。
(2)查看寄存器窗口获得CS的值,使用U命令可得到数据段段地址DS,然后通过E命令为被乘数及乘数赋值,如被乘数:
0102030405,乘数:
01,方法同实验内容1。
(4)通过D命令查看计算结果,应为:
000102030405;
当在为被乘数和乘数赋值时,如果一个数的低4位大于9,则查看计算结果将全部显示为E。
(5)反复测试几组数据,验证程序的正确性。
1.4分支程序设计实验
1.4.1实验目的
1.掌握分支程序的结构。
2.掌握分支程序的设计、调试方法。
1.4.2实验设备
1.4.3实验内容
设计一数据块间的搬移程序。
设计思想:
程序要求把内存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。
源数据块和目的数据块在存储中可能有三种情况,如图1.14所示。
(a)(b)(c)
图1.14源数据块与目的数据块在存储中的位置情况
对于两个数据块分离的情况,如图1.14(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。
但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:
当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图1.14(b)所示。
当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图1.14(c)所示。
实验程序流程图如图1.15所示。
图1.15程序流程图
A4-1.ASM)
MOVCX,0010H
MOVSI,3100H
MOVDI,3200H
CMPSI,DI
JAA2
ADDSI,CX
ADDDI,CX
DECCX
JNEA1
JMPA3
JNEA2
1.4.4实验步骤
1.按流程图编写实验程序,经编译、链接无误后装入系统。
2.用E命令在以SI为起始地址的单元中填入16个数。
3.运行程序,待程序运行停止。
4.通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同。
5.通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
1、将源数据首址改为3100H,目的数据地址改为310A,再加以验证(注意单步调试);
2、将源数据首址改为310AH,目的数据地址改为3100,再加以验证(注意单步调试)。
1.5循环程序设计实验
1.5.1实验目的
1.加深对循环结构的理解。
2.掌握循环结构程序设计的方法以及调试方法。
1.5.2实验设备
1.5.3实验内容及步骤
1.计算S=1+2×
3+3×
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086微机原理及接口技术实验教程chu 副本 8086 微机 原理 接口 技术 实验 教程 chu