- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
循环程序设计分析
淮海工学院计算机工程学院
实验报告书
课程名:《微机原理与接口技术》
题 目: 实验三 程序设计与调试之三:
循环程序
目的和要求
进一步了解重复控制指令、串操作指令及重复前缀的格式和功能,通过解决循环问题练习这些指令和重复前缀的选用。对于既可以用重复控制指令,又可以用串操作指令及重复前缀的场合,比较两者的优劣。
练习针对具体问题建立合适的循环结构,进一步了解计数控制、条件控制的循环结构的适用场合。
实验内容
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及NEGA存储单元,试编写程序。
(3)并且要求在搜索第一个零数据时分别采用重复控制指令和串操作指令。上机调试程序,检查程序正确性,并指出该程序使用了什么循环控制方法。
验证一:DSEG SEGMENT ; use16
BUF1 DB 34h,45h;(N个字节数)
BUF2 DB 35H,54h;(N个字节数)
COUNT EQU $-BUF2
org 100
FLAG DB 0
DSEG ENDS ;use16
SSEG SEGMENT STACK ; use16
D
文档评论(0)