文档详情

循环程序设计教程.doc

发布:2017-04-26约5.03千字共9页下载文档
文本预览下载声明
淮海工学院计算机工程学院 实验报告书 课程名:《微机原理与接口技术》 题 目: 实验三 程序设计与调试之三: 循环程序设计 班 级: 学 号: 姓 名: 评语: 成绩: 指导教师: 批阅时间: 年 月 日 《微机原理与接口技术》实验报告 -  PAGE 5 - 目的和要求 进一步了解重复控制指令、串操作指令及重复前缀的格式和功能,通过解决循环问题练习这些指令和重复前缀的选用。对于既可以用重复控制指令,又可以用串操作指令及重复前缀的场合,比较两者的优劣。 练习针对具体问题建立合适的循环结构,进一步了解计数控制、条件控制的循环结构的适用场合。 实验内容 2.1 验证题 调???例1和例2给出的程序,验证两个程序的正确性。对于这两个程序在SI、DI初值设置上的区别作出分析,并对两个程序的优劣作比较。 【例1】 编写一程序,用以判断BUF1和BUF2两个等长度的数据区中数据是否相同。相同则使FLAG单元置0,否则置-1。 ;NAME CXAMPLE1 .486 DSEG SEGMENT use16 BUF1 DB (N个字节数) BUF2 DB (N个字节数) COUNT EQU $-BUF2 FLAG DB 0 DSEG ENDS use16 ; SSEG SEGMENT STACK use16 DB 80H DUP(0) SSEG ENDS ; CSEG SEGMENT use16 ASSUME DS:DSEG,SS:SSEG,CS:CSEG START:MOV AX,DSEG MOV DS,AX MOV SI,OFFSET BUF1-1 MOV DI,OFFSET BUF2-1 MOV CX,COUNT NEXT: INC SI INC DI MOV AL,[SI] CMP AL,[DI] LOOPZ NEXT JZ OK MOV FLAG,-1 OK:MOV AH,4CH INT 21H CSEG ENDS END START 若在此程序中将指令 MOV SI,OFFSET BUF1-1 MOV DI,OFFSET BUF2-1 改为 MOV SI,OFFSET BUF1 MOV DI,OFFSET BUF2 且将指令 INC SI INC DI 改放到CMP指令之后,这样修改是否正确,请读者思考。 【例2】 要求实现的程序功能与例1同。 分析:考虑到REPZ前缀结合CMPSB指令可以实现两个存储器操作数的比较,实现变址寄存器SI、DI的增(或减1),实现计数寄存器CX减1,并根据比较结果及(CX)是否为0来控制是否进行后续数据的比较。因此,可将其用于本例题的循环程序设计。值得注意的是,CMPSB指令所涉及的两个操作数分别用DS:[DI]和ES:[DI]给出,故应该使段寄存器DS和ES均存放DATA数据段的段地址;若在循环工作部分之前使SI指向BUF1数据区首址,使DI指向BUF2数据区首址,则应同时使用CLD指令,使DF置“0”,以便CMPSB指令使SI、DI作增1修改。程序如下: ;NAME EXAMPLE2 CSEG SEGMENT use16 ASSUME DS:DSEG,ES:DSEG,SS:SSEG,CS:CSEG START:MOV AX,DSEG MOV DS,AX MOV ES,AX ; MOV SI,OFFSET BUF1 MOV DI,OFFSET BUF2 MOV CX,COUNT CLD REPZ CMPSB JZ OK MOV FLAG,-1 OK: MOV AH,4CH INT 21H CSEG ENDS END START  设计题 (1)、编写程序,以统计BUF数据区中各有符号字节数的平均值。上机调试程序,检查程序正确性。 (2)、按照要求编程, 统计BUF字数据区第一个零数据后的各数据中正数及负数的个数,并分别送POSI及N
显示全部
相似文档