实验三 运算类编程实验
一、实验目的
1.掌握使用运算类指令编程及调试方法。
2.掌握运算类指令对各状态标志位的影响及其测试方法。 二、实验设备
TDN86/51教学实验系统一台
三、实验内容及步骤
086/8088指令系统提供了实现加、减、乘、除运算的基本指令,可对表3-1所示的数据类型进行算术运算。 表3-1 数据类型算术运算表
数 制 运算符 操作数 二进制 带符号 + - × ? 字节、字、多精度 无符号 BCD码 组合 + - 非组合 + - × ? 字节(二位数字) 字节(一位数字) 1. 二进制双精度加法运算 计算X+Y=Z,将结果Z存入某存储单元。实验程序参考如下。 本实验是双精度(2个16位,即32位)加法运算,编程时可利用累加器AX,先求低16位的和,并将运算结果存入低地址存储单元,然后求高16位的和,将结果存入高地址存储单元中。由于低16运算后可能向高位产生进位,因此高16位运算时使用ADC指令,这样在低16位相加运算有进位时,高位相加会加上CF中的1。
实验步骤
(1)编写程序并检查无误,经编译、链接无误后装入系统。(设:CS:000H IP:2000H)
(2)用U2000查看MOV AX,XXXX(DATA)语句,即得到数据段段地址CS:XXXX,用E命令E=XXXX:0000↙给XL,XH,YL,YH赋值存入二进制数A0 65 15 00和9E B7 21 00。
(3)G=0000:2000↙,运行以上程序。
(4)D=XXXX:0004↙,显示计算结果:3E 1D 37 00 CC (5)反复试几组数,考察程序的正确性。
2.十进制数的BCD码减法运算
计算下X-Y=Z,其中,X、Y、Z均为BCD码。 实验步骤
(1) 输入实验程序并检查无误,经汇编,连接后装入系统。(设CS:0000H,IP:2000H) (2) 用U2000查看MOV AX,XXXX(DATA)语句,即得到数据段段地址DS:XXXX。用
E命令E=XXXX:0000↙给X,Y赋值存入40和12的BCD码:00 04 02 01。 (3) G=0000:2000↙,运行以上程序。
(4) DXXXX:0004↙,显示计算结果:08 02 CC …。 (5) 反复试几组数,考察程序的正确性。
3. 乘法运算
实现十进制数的乘法运算,被乘数与乘数均以BCD码的形式存放在内存中,
乘积在屏幕上显示。乘数为1位,被乘数为5位,结果为6位。
实验步骤
(1)输入实验程序并检查无误,经汇编,连接后装入系统。 (2)用U2000查看MOV AX,XXXX(DATA)语句,即得到数据段段地址CS:XXXX。 (3)用E=XXXX:0000命令在对应数据段填入乘数与被乘数。 (4)G=0000:2000↙,运行程序,屏幕显示结果。。 (5)反复试几组数,验证程序的正确性。 4. 用减奇数开平方运算
8086/8088指令系统中有乘除法指令但没有开平方指令,因此,开平方运算是通过程序来实现的。用减奇数法可求得近似平方根,获得平方根的整数部分。我们知道,N个自然数中的奇数之和等于N2。
即: 1?3?5?9?32 ; 1?3?5?7?9?11?13?15?64?82
若要做S的开方运算,那么就可以从S中逐次减去自然数中的奇数:
1,3,5,7…,一直进行到相减数为0或不够减下一个自然数的奇数为止,然后统计减去自然数的奇数个数,他就是S的近似平方根。
实验步骤
(1)输入实验程序并检查无误,经汇编,连接后装入系统。
(2)在3500-3501H单元中存入呗开放术0010,即E3500↙,输入10 00 (3)G=0000:2000↙,运行程序。
(4)D350A↙,显示结果为:350A 04 00 CC…。 (5)反复试几组数,验证程序的正确性。