实验二 运算类编程实验
一.实验目的
1. 掌握使用运算类指令编程及调试方法。
2. 掌握运算类指令对各状态标志位的影响及其测试方法。
二.实验设备
TDN86/88教学实验系统一台
三.实验容及步骤
8086/8088指令系统提供了实现加、减、乘、除运算的基本指令,可对二进制、BCD码数据类型进行算术运算。
1. 二进制双精度加法运算
计算X+Y=Z,将结果Z存入某存储单元。
本实验程序是双精度(2个16位,既32位)运算,利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。
实验步骤:
(1)输入程序并检查无误,经汇编、连接后装入系统。(设:CS:0000H,IP:2000H) (2)用U0000:2000查看MOV AX,XXXX(DATA)语句,得到数据段段地址CS:XXXX。用E命令EXXXX:0000↙给XL,XH,YL,YH赋值存入二进制数A0 65 15 00和9E B7 21 00。 (3)G=0000:2000↙,运行程序。
(4)DXXXX:0008↙,显示计算结果:3E 1D 37 00 CC …。 (5)反复试几组数,考察程序的正确性。
2. 十进制数的BCD码减法运算
计算X-Y=Z,其中,X、Y、Z为BCD码。
实验步骤:
(1)输入程序并检查无误,经汇编、连接后装入系统。(设:CS:0000H,IP:2000H) (2)用U0000:2000查看MOV AX,XXXX(DATA)语句,得到数据段段地址CS:XXXX。用E命令EXXXX:0000↙给X,Y赋值存入40和12的BCD码:00 04 02 01。 (3)G=0000:2000↙,运行程序。
(4)DXXXX:0004↙,显示计算结果:08 02 CC …。 (5)反复试几组数,考察程序的正确性。
3. 乘法运算
本实验实现十进制数的乘法,被乘数和乘数均以BCD码形式存放于存中,乘积在屏幕上显示。
实验步骤:
(1)输入程序并检查无误,经汇编、连接后装入系统。
(2)用U0000:2000↙查看MOV AX,XXXX(DATA)语句,得到数据段段地址CS:XXXX。用E命令EXXXX:0000↙给在对应数据段填入乘数与被乘数。
(3)G=0000:2000↙,运行程序,屏幕显示结果。用CTRL+BREAK可终止程序运行。 (4)反复试几组数,考察程序的正确性。
四.思考题
1. 编写有符号数A1B1+A2B2的程序,A1、A2、B1、B2均为符号数。 2. 编写两个数值长度不等的BCD码相加程序。
实验三 分支程序设计实验
一.实验目的
1. 掌握分支程序的结构。
2. 掌握分支程序的设计、调试方法。
二.实验设备
TDN86/88教学实验系统一台
三.实验容及步骤
1. 比较两个字符串STR1与STR2是否相同,若相同则在屏幕上显示MATCH,不同则显示
NOMATCH。
2. 设计一数据块间的搬移程序
设计思想:程序要求把存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。源数据块和目的数据块在存储中可能有三种情况,如图3-1所示。
图3-1
对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏,可以得出以上结论:
当源数据块首址>目的块首址时,从数据块首地址开始传送数据。 当源数据块首址<目的块首址时,从数据块末地址开始传送数据。
实验步骤:
(1)输入程序并检查无误,经汇编、连接后装入系统。 (2)用E命令在以SI为起址的单元中填入16个数。 (3)G=0000:2000↙,运行程序。
(4)用D命令查看DI为起址的单元中的数据是否与SI单元中的数据相同。 (5)试改变SI、DI的取值,观察在三种不同的数据块情况下程序的运行。
四.思考题
为什么当源数据块首址>目的块首址时,应从数据块首地址开始传送数据?而当源数据块首址<目的块首址时,应从数据块末地址开始传送数据?