实验二:简单汇编语言程序设计与调试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
深圳大学实验报告
课程名称微型计算机技术
项目名称实验二:简单汇编语言程序设计与调试
学院
专业
指导教师
报告人学号
实验时间 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。。。,一