您的当前位置:首页正文

微机实验报告6

2022-03-20 来源:独旅网
南京工程学院

电力工程学院

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

因篇幅问题不能全部显示,请点此查看更多更全内容