运算类编程实验.docx
《运算类编程实验.docx》由会员分享,可在线阅读,更多相关《运算类编程实验.docx(11页珍藏版)》请在冰豆网上搜索。
运算类编程实验
深圳大学实验报告
课程名称:
微型计算机基本原理
实验项目名称:
运算类编程实验
学院:
信息工程学院
专业:
电子信息工程
指导教师;
周建华
报告人:
学号』级:
实验时间:
2015年4月23日
实验报告提交时间:
2015年4月30日
教务处制
实验目的与要求:
1.掌握使用运算类指令编程及调试方法。
2.掌握运算类指令对各状态标志位的影响及其测试方法。
3.学习使用软件监视变量的方法。
实验设备
方法、步骤:
80X86指令系统提供了实现加、减、乘、除运算的基本指令,可对表2.2
二进制双精度加法运算
计算X+丫=Z,将结果Z存入某存储单元。
实验程序参考如下。
本实验是双精度(2个16位,即32位)加法运算,编程时可利用累加器先求低16位的和,并将运算结果存入低地址存储单元,然后求高16位的
将结果存入高地址存储单元中。
由于低16运算后可能向高位产生进位,
所示的数据类型进行算术运算。
数制
二进制
BCD码
带符号1无符号
组合
非组合
运算符
+、一、x、*
+、一
+、一、x、*
操作数
字节、字、多精度
字节(二位数字)
字节(一位数字)
实验过程及内容:
1.
表2.2数据类型算术运算表
AX
和,
因此高16位运算时使用ADC指令,这样在低16位相加运算有进位时,高位相加会加上CF中的1。
A3-1.ASM)
实验程序清单(例程文件名为:
SSTACKSEGMENTSTACK
DW64DUP⑺
;设置全局变量
SSTACKENDS
PUBLICXH,XL,YH,YL,ZH,ZL
DATA
ENDS
SEGMENT
ASSUMECS:
CODE,DS:
DATASTART:
MOVAX,DATA
MOVDS,AX
MOVAX,XL
;X低位加Y低位
;低位和存到Z的低位
;高位带进位加
-存高位结果
'-在此行亍设置断点,以观察变量值
ADDAX,YLMOVZL,AXMOVAX,XH
ADCAX,YHMOVZH,AXJMPSTART
CODEENDS
ENDSTART
实验步骤
(1)编写程序,经编译、链接无误后装入系统。
(2)程序装载完成后,点击’变量区’标签将观察窗切换到变量监视窗口。
(3)点击处,将变量XHXL,YHYL,ZHZL添加到变量监视窗中,然后修改XHXL,YHYL的值,如图2.13所示,修改XH为0015,XL为65A0,YH为0021,YL为B79E
(4)在JMPSTAR语句行设置断点,然后运行程序。
(5)
图2.13变量监视窗口
当程序遇到断点后停止运行,查看变量监视窗口,计算结果ZH为0037,ZL为1D3E
(6)修改XHXL,YH和YL的值,再次运行程序,观察实验结果,反复测试几组数据,验证程序的功能。
2.乘法运算
START:
MOVAX,DATA
MOVDS,AX
CALLINIT;初始化目标地址单元为0
MOVSIQFFSETDATA2
;得到乘数
MOVBL,[SI]
ANDBL,0FH
CMPBL,09H
JNCERROR
MOVSI,OFFSETDATA1
MOVDI,OFFSETRESULT
A1:
MOVCX,0005H
MOVAL,[SI+04H]
ANDAL,0FH
CMPAL,09H
JNCERROR
DECSI
MULBL
AAM;乘法调整指令
ADDAL,[DI+05H]
AAA
MOV[DI+05H],AL
DECDI
MOV[DI+05H],AH
A2:
LOOPA1
MOVAX,4C00H
INT21H;程序终止
;===将RESULT所指内存单元清零===
INIT:
MOVSI,OFFSETRESULT
MOVCX,0003H
MOVAX,0000H
A3:
MOV[SI],AX
INCSI
INCSI
LOOPA3
RET
.===错误处理===
Error:
movsi,offsetresul若输入数据不符合要求则results指向内存单元全部写入E
MOVCX,0003H
MOVAX,0EEEEH
A4:
MOV[SI],AX
INCSI
INCSI
LOOPA4
JMPA2
CODEENDS
ENDSTART
实验步骤
(1)编写程序,编译、链接无误后装入系统。
(2)查看寄存器窗口获得CS的值,使用U命令可得到数据段段地址DS然后通过E命令为被乘数及乘数赋值,如被乘数:
0102030405,乘数:
01,方法同实验内容1。
(3)运行程序,待程序运行停止。
(4)通过D命令查看计算结果,应为:
000102030405;当在
为被乘数和乘数赋值时,如果一个数的低4位大于9,则查看计算结果将全部显示为E。
(5)反复测试几组数据,验证程序的正确性。
数据处理分析:
实验一:
二进制双精度加法运算
EH)画
实验结果分析:
由程序中的这几条指令:
MOVAX,XL
ADDAX,YL
MOVZL,AX
知:
XL+YL=ZL即65A0+B79E=1D3ECF=178AD+0053=7900CF=0合乎预期;
由程序中的这几条指令:
MOVAX,XH
ADCAX,YH
MOVZH,AX
知:
XH+YH+CF=ZHI卩0015+0021+1=0037;5656+63CB+0=BA21合乎预期。
实验二:
乘法运算
DEC31
140V[LI+05KJ
LOOP
n忙附况冲CODM'
Itrr7iH呈.弓
-——怜卜上4匚「痔扌言内存也元洁專——
IMIT:
MCIVSX,OF1^EET艮£0ULH
MOVrx,□□□3H
MIVixniinriH
>020B:
aOOO05070201O旧030l□?
>U:
^Utj:
JUUUU1U/U1U4UUUUUUUU
实验结果分析:
计算过程:
(1)被乘数是01,02,03,04,05;乘数是01,先取最后一
位即05,其乘以01还是05,没有进位,所以在输出的最后一位是05;然后是上一位04,其乘以01还是04,没进位,由因为下一位没进位,所以其输出为04;03,02
以此类推;至y01时,其乘以01还是01,没进位,所以
其输出为01,而上一个储存空间为00。
这样所以输出为
00,01,02,03,04,05
(2)被乘数是05,07,02,03,08;乘数是03,先取最后一位
即08,其乘以03是0204,所以进位02,输出的最后一位是04;然后是上一位03,其乘以03加上下一位进位的02是0101,所以进位01,其输出为01;02,07以此
类推;到05时,其乘以03加上下一位的进位结果是
0107,所以进位进位01,所以其输出为07,而上一个储
存空间为01。
这样所以输出为01,07,01,07,01,04
实验结论:
通过这两个实验,对使用运算指令类编程有了更深刻的认识;
掌握了运算类指令对个状态标志位的影响极其测试方法;对编程过程中如何达到预期的结果有了更深刻的了解;提高了对程序的分析理解能力。
指导教师批阅意见:
成绩评定:
指导教师签字:
年月日
备注:
注:
1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
10日内。
2、教师批改学生实验报告时间应在学生提交实验报告时间后