电力工程学院
2011/ 2012 学年 第 1 学期
实 验 报 告
课程名称 微机原理及应用 实验项目名称 子程序设计 实验学生班级 监控091 实验学生姓名
实验时间 2011.10.30 实验地点 电力工程基础实验室8-216
实验报告成绩: 评阅教师签字:
年 月 日
电力工程学院二OO七年制
说 明
1. 实验报告为实验的重要考核依据之一, 每个实验必须定一份实验报告. 本实验报告原则上要求手写。
2.本实验报告各项内容的具体格式、字数可由指导教师根据实验具体情况提出具体要求。各项内容可另附页,为便于归档,附页尺寸不得大于本实验报告尺寸,并注意粘牢于附页粘贴处。
3. 实验报告封面中的 “实验名称” 应为实验教学大纲上所列的规范名称, “实验地点”应写出实验室的具体名称。请确认无误后再填写。 4. 实验报告的建议格式为: 一、实验目的和要求; 二、主要实验仪器和设备; 三、本次实验内容
(一)实验项目名称(按本次实验各项目填写) 1、原理或接线图 2、实验步骤及注意事项
3、实验预习过程中所遇到问题„„
四、实验记录及数据处理(主要内容包括实验具体实施步骤、实验原始数据、 计算过程与结果、 数据曲线、 图表等。 具体格式按指导教师要求)
五、实验结论(主要内容包括本实验小结、 实验体会或疑问等。具体格式按指导教师要求)
5. 实验成绩由实验预习、实验表现、 实验报告三部分组成。其中前两项各占总成绩的30%。实验报告成绩依据报告的科学性、全面性、规范性及书写态度综合考核。 实验报告采用百分制, 占实验总成绩的40%, 教师请阅本报告后需签字并给出实验报告百分制成绩。
6. 实验报告需按要求时间以班级为单位交给指导教师,最长时间不得超过两周,实验报告如有明显抄袭者或不交者,实验总评成绩按 0 分记。
2
一、实验目的和要求
学习子程序的结构、特点以及子程序的设计和调试方法。 二、实验任务
学习使用汇编语言集成编译软件,验证及编写、调试实验内容。 三、主要实验备和软件
星研集成环境软件 四、实验内容
1、实验题目:编写求和的子程序,求数组ARRAY中所有元素之和并存于SUM单元之中。
2、程序清单:
SSEG SEGMENT STACK DB 100 DUP(?) SSEG ENDS
DATA SEGMENT ARRAY DB 10,20,30,40 COUNT EQU $-ARRAY SUM DW ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:SSEG START: MOV AX,DATA MOV DS,AX MOV AX,SSEG MOV SS,AX
LEA SI,ARRAY MOV CX,COUNT CALL SUM1
3
MOV SUM,AX MOV AH,4CH INT 21H SUM1 PROC NEAR CMP CX,0 JZ EXIT MOV AX,0 AGAIN: ADD AL,[SI] ADC AH,0 INC SI LOOP AGAIN EXIT: RET SUM1 ENDP CODE ENDS END START
(3)、运行结果
加和之前,SUM=0
加和之后,SUM=100,调试程序成功。
4
(4)、分析与思考:此实验以寄存器为传递参数来实现子程序的运行,其实就是锻炼PROC和CALL指令的运用。
2、编写程序:
(1)实验题目: 设计一个子程序,功能是将一个字节的BCD码转换成二进制数。 说明:名称:BCD2BIN。
功能:将一个字节的BCD码转成二进制数。 所用寄存器:CX。
入口参数:AL存放两位BCD码。 出口参数:AL存放二进制数。 (2)、程序清单:SSEG SEGMENT STACK
DB 100 DUP(?) SSEG ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:SSEG START : MOV AX,SSEG MOV SS,AX MOV AL,12H CALL BCD2BIN HLT
BCD2BIN PROC NEAR PUSH CX MOV CH,AL AND CH,0FH MOV CL,4 SHR AL,CL MOV CL,10
5
MUL CL ADD AL,CH POP CX RET BCD2BIN ENDP CODE ENDS
END START
(3)、运行结果:截屏 观察AL原来值为12H
观察得经过BCD2BIN子程序后,AL转换成二进制0CH,调试程序成功。
(4)、 分析与思考:此实验除了对子程序的运用,还着重运用了逻辑和运算
移位指令,程序本身很简单。
3、编写程序:
(1)实验题目: 题1是寄存器传递参数,试利用存储单元传递参数的方法改写程序。 (2)、程序清单:SSEG SEGMENT STACK
6
DB 100 DUP(?)
SSEG ENDS
DATA SEGMENT ARRAY DB 10,20,30,40 COUNT EQU $-ARRAY SUM DW ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:SSEG START: MOV AX,DATA MOV DS,AX MOV AX,SSEG
MOV SS,AX
CALL SUM1 MOV AH,4CH INT 21H
SUM1 PROC NEAR
PUSH SI PUSH CX PUSH AX LEA SI,ARRAY
MOV CX,COUNT
7
CMP CX,0 JZ EXIT MOV AX,0
AGAIN: ADD AL,[SI]
ADC AH,0 INC SI LOOP AGAIN MOV SUM,AX
POP SI POP CX POP AX EXIT: RET
SUM1 ENDP CODE ENDS END START
(3)、运行结果 截屏 加和之前
加和之后,查看结果为100,调试程序成功。
8
(4)、分析与思考:其实用存储器单元存储只要将源代码中几条程序移一下位置
即可,再者,对原先寄存器AX,SI,,CX的值用进栈出栈进行了保护。
五、思考题
试编写一个求字变量绝对值的子程序。 程序清单: SSEG SEGMENT STACK
DB 100 DUP(?)
SSEG ENDS
DATA SEGMENT
X DW -278 RESULT DW ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:SSEG START: MOV AX,DATA MOV DS,AX MOV AX,SSEG
MOV SS,AX MOV AX,X CALL TTESTT HLT
TTESTT PROC NEAR TEST AX,8000H JZ NEXT NEG AX NEXT: MOV RESULT,AX
RET TTESTT ENDP CODE ENDS
END START
运行结果 截屏(调试成功)
9
六、实验小结
此次子程序设计主要在于对CALL和PROC指令的运用,难度不大。但此次试验还有一个收获就是熟悉星研的操作环境,用星研进行软调,和emu8086有很多相似之处,很好上手。
10
因篇幅问题不能全部显示,请点此查看更多更全内容