实验二简单汇编语言程序设计与调试讲解Word文档下载推荐.docx
《实验二简单汇编语言程序设计与调试讲解Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验二简单汇编语言程序设计与调试讲解Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
![实验二简单汇编语言程序设计与调试讲解Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/20/0357ef10-e59c-469c-9a15-235d805773bb/0357ef10-e59c-469c-9a15-235d805773bb1.gif)
非组合
运算符
+、-、×
、÷
+、-
操作数
字节,字,多精度
字节(二位数字)
字节(一位数字)
2.1二进制双精度加法运算
2.1.1实验要求:
计算X+Y=Z,将结果Z存入某存储单元。
2.1.2实验原理:
本实验程序是双精度(2个16位,既32位)运算,利用累加器AX,先求低16位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。
由于低位和可能向高位有进位,因而高位字相加语句需要用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。
2.1.3参考程序清单:
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
DATASEGMENT
XLDW?
;
请在此处给X低位赋值
XHDW?
请在此处给X高位赋值
YLDW?
请在此处给Y低位赋值
YHDW?
请在此处给Y高位赋值
ZLDW?
ZHDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,XL;
X的值送AX
ADDAX,YL;
X低位加Y低位
MOVZL,AX;
存低位和
MOVAX,XH;
X高位送AX
ADCAX,YH;
X高位加Y高位
MOVZH,AX;
存高位和
CODEENDS
ENDSTART
2.2十进制数的BCD码减法运算
2.2.1实验要求:
计算X-Y=Z,其中X,Y,Z为BCD码。
00
04
02
01
2.2.2参考实验程序及流程图如下:
)
XDW?
请在此处给X赋值
YDW?
请在此处给Y赋值
ZDW?
DATAENDS
ASSUMECS:
DATA
MOVAX,DATA
MOVDS,AX
MOVAH,00H
SAHF
MOVCX,0002H
MOVSI,OFFSETX
MOVDI,OFFSETZ
A1:
MOVAL,[SI]
SBBAL,[SI+02H]
DAS
PUSHF
ANDAL,0FH
POPF
MOV[DI],AL
INCDI
INCSI
LOOPA1
A2:
JMPA2
ENDSTART
2.3乘法运算
2.3.1实验要求:
本实验实现十进制数的乘法,被乘数和乘数均以BCD码形式存放于内存中,
乘积在屏幕显示。
2.3.2参考程序清单:
STACKSEGMENTSTACK
DATA1DB5DUP(?
);
乘数
DATA2DB?
被乘数
RESULTDB6DUP(?
乘积
MOVAX,DATA
MOVDS,AX
CALLINIT
MOVSI,OFFSETDATA2
MOVBL,[SI]
ANDBL,0FH
CMPBL,09H
JNCERROR
MOVSI,OFFSETDATA1
MOVDI,OFFSETRESULT
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
MOVCX,06H
MOVSI,OFFSETRESULT
DISPLAY:
MOVAH,01H
MOVAL,[SI]
ADDAL,30H;
得到ASCII码
INT10H;
显示器显示
INCSI
LOOPDISPLAY
A2:
INIT:
MOVSI,OFFSETRESULT;
RESULT区清零
MOVCX,0003H
MOVAX,0000H
A3:
MOV[SI],AX
LOOPA3
RET
ERROR:
MOVAX,0145H;
显示“E”
INT10H
CODEENDS
ENDSTART
2.4设计性实验-----开平方运算(选作)
2.4.1设计要求:
设计一个用减奇数法的开平方运算程序
2.4.2设计提示:
8086/8088指令系统中有乘除法指令但没有开平方指令,因此,开平方运算是通过程序来实现的。
用减奇数法可求得近似平方根,获得平方根的整数部分。
我们知道,N个自然数中的奇数之和等于N²
,即:
1+3+5=9=3²
1+3+5+7=16=4²
1+3+5+7+9+11+13+15=64=8²
若要做S的开方运算,那么就可以从S中逐次减去自然中的奇数1,3,5,7。
。
,一直进行到相减数为0或不够减下一个自然数的奇数为止,然后统计减去自然数的奇数个数,它就是S的近似平方根。
(设开平方数为正整数,存放在3500H单元)
(5)D350A↙,显示结果为:
350A0400CC…。
(6)反复试几组数,考察程序的正确性。
三、实验步骤与过程
(1)输入程序并检查无误,经汇编、链接后装入系统。
(设:
CS:
0000H,IP:
2000H)
(2)打开寄存器窗口,观察各寄存器内容的变化。
(3)用U0000:
2000查看MOVAX,XXXX(DATA)语句,即得到数据段段地址CS:
XXXX用E命令EXXXX:
0000↙给XL,XH,YL,YH赋值存入二进制数AO651500和9EB72100.
(4)G=0000:
2000↙,运行以上程序。
(5)DXXXX:
0008↙,显示计算结果:
3E1D3700CC….
(6)重新赋值,用T(T=0000:
2000)↙命令逐步运行程序,观察寄存器内容的变化。
(7)反复试几组数,考察程序的正确性.
查看段地址CS:
用E命令赋值:
运行并查看显示计算结果:
单步运行过程:
(1)输入实验程序并检查无误,经汇编、链连接后装入系统,并打开寄存器窗口。
(设:
CS:
0000H,IP:
(2)用U0000:
2000查看MOVAX,XXXX(DATA)语句即得到数据段地址CS:
XXXX。
用E命令EXXXX:
0000↙给X,Y赋值存入40和12的BCD码:
00040201。
(3)G=0000:
2000↙,运行以上程序。
(4)DXXXX:
0004↙,显示计算结果
(5)重新赋值,用T命令单步运行程序,观察各寄寸器内容的变化。
程序注释:
用D命令查看显示结果:
(1)输入程序并检查无误,经汇编、链接后装入系统。
(2)打开寄存器窗口,观察寄存器内容的变化。
(3)用U2000↙命令查看MOVAX,XXXX语句,即得数据段段地址CS:
(4)用EXXXX:
0000↙命令在对应数据段填入乘数与被乘数。
(5)G=0000:
2000↙,运行程序,屏幕显示结果,用ESC可终止程序运行。
要求画出调试正确的程序的程序框图,并给程序加注释
四、实验结论或体会
指导教师批阅意见:
成绩评定:
指导教师签字:
年月日
备注:
注:
1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。