深圳大学实验报告
课程名称微型计算机技术
项目名称实验二:简单汇编语言程序设计与调试
学院
专业
指导教师
报告人学号
实验时间 2015-11-01 提交时间 2015-11-15
教务处制
一、实验目的与要求
1.1掌握使用运算类指令编程及调试方法。
1.2掌握运算类指令对各个状态标志位的影响及其测试方法。
二、实验内容与方法
8086/8088指令系统提供了实现加、减、乘、除运算的基本指令,可对表2-1所示的数据类型进行算术运算。
表2-1 数据类型算术运算表
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 参考程序清单:
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
XL DW ?;请在此处给X低位赋值
XH DW ?;请在此处给X高位赋值
YL DW ?;请在此处给Y低位赋值
YH DW ?;请在此处给Y高位赋值
ZL DW ?
ZH DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,XL ;X的值送AX
ADD AX,YL ;X低位加Y低位
MOV ZL,AX ;存低位和
MOV AX,XH ;X高位送AX
ADC AX,YH ;X高位加Y高位
MOV ZH,AX ;存高位和
CODE ENDS
END START
2.2十进制数的BCD码减法运算
2.2.1 实验要求:
计算X-Y=Z,其中X,Y,Z为BCD码。
2.2.2 参考实验程序及流程图如下:
STACK SEGMENT STACK
DW 64 DUP(?) STACK ENDS
DATA SEGMENT
X DW ? ;请在此处给X赋值
Y DW ? ;请在此处给Y赋值
Z DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AH,00H
SAHF
MOV CX,0002H
MOV SI,OFFSET X
MOV DI,OFFSET Z
A1: MOV AL,[SI]
SBB AL,[SI+02H]
DAS
PUSHF
AND AL,0FH
POPF
MOV [DI],AL
INC DI
INC SI
LOOP A1
A2: JMP A2
CODE ENDS
END START
2.3乘法运算
2.3.1实验要求:
本实验实现十进制数的乘法,被乘数和乘数均以BCD码形式存放于内存中,乘积在屏幕显示。
2.3.2 参考程序清单:
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DATA1 DB 5 DUP(?) ;乘数
DATA2 DB ? ;被乘数
RESULT DB 6 DUP(?) ;乘积
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
CALL INIT
MOV SI,OFFSET DATA2
MOV BL,[SI]
AND BL,0FH
CMP BL,09H
JNC ERROR
MOV SI,OFFSET DATA1
MOV DI,OFFSET RESULT
MOV CX,0005H
A1: MOV AL,[SI+04H]
AND AL,0FH
CMP AL,09H
JNC ERROR
DEC SI
MUL BL
AAM
ADD AL,[DI+05H]
AAA
MOV [DI+05H],AL
DEC DI
MOV [DI+05H],AH
MOV CX,06H
MOV SI,OFFSET RESULT
DISPLAY:MOV AH,01H
MOV AL,[SI]
ADD AL,30H ;得到ASCII码
INT 10H ;显示器显示
INC SI
LOOP DISPLAY
A2: JMP A2
INIT: MOV SI,OFFSET RESULT ;RESULT区清零
MOV CX,0003H
MOV AX,0000H
A3: MOV [SI],AX
INC SI
INC SI
LOOP A3
RET
ERROR: MOV AX,0145H ;显示“E”
INT 10H
JMP A2
CODE ENDS
END START
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↙,显示结果为:350A 04 00 CC…。
(6)反复试几组数,考察程序的正确性。
三、实验步骤与过程
2.1二进制双精度加法运算
(1)输入程序并检查无误,经汇编、链接后装入系统。
(设:CS:0000H,IP:2000H)
(2)打开寄存器窗口,观察各寄存器内容的变化。
(3)用U0000:2000查看MOV AX,XXXX(DATA)语句,即得到数据段段地址CS:XXXX用E命令EXXXX:0000↙给XL,XH,YL,YH赋值存入二进制数AO 65 15 00和9E B7 21 00.
(4) G=0000:2000↙,运行以上程序。
(5) DXXXX:0008↙,显示计算结果:3E 1D 37 00 CC….
(6)重新赋值,用T(T=0000:2000)↙命令逐步运行程序,观察寄存器内容的变化。
(7)反复试几组数,考察程序的正确性.
查看段地址CS:
用E命令赋值:
运行并查看显示计算结果:
单步运行过程:
2.2 十进制数的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↙,显示计算结果
(5) 重新赋值,用T 命令单步运行程序,观察各寄寸器内容的变化。
(6) 反复试几组数,考察程序的正确性。
程序注释:
查看段地址CS:
用E命令赋值:
用D命令查看显示结果:
单步运行过程:
2.3 乘法运算
(1) 输入程序并检查无误,经汇编、链接后装入系统。
(2) 打开寄存器窗口,观察寄存器内容的变化。
(3) 用U2000↙命令查看MOV AX ,XXXX 语句,即得数据段段地址CS :XXXX 。
(4) 用EXXXX :0000↙命令在对应数据段填入乘数与被乘数。
(5) G=0000:2000↙,运行程序,屏幕显示结果,用ESC 可终止程序运行。
(6) 反复试几组数,考察程序的正确性。
要求画出调试正确的程序的程序框图,并给程序加注释
程序注释:
四、实验结论或体会
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。