福建农林大学汇编实验三分支循环程序设计详解.docx
《福建农林大学汇编实验三分支循环程序设计详解.docx》由会员分享,可在线阅读,更多相关《福建农林大学汇编实验三分支循环程序设计详解.docx(10页珍藏版)》请在冰豆网上搜索。
福建农林大学汇编实验三分支循环程序设计详解
福建农林大学计算机与信息学院实验报告
系:
计算机专业:
计算机科学与技术年级:
2014
姓名学号:
实验室号__计算机号
实验时间:
2016-10-29指导教师签字:
刘庆连成绩:
实验三分支循环程序设计
1.实验目的
(1)学习调试程序,查找逻辑错误;
(2)学习分支语句的编程和调试;
(3)学习循环语句的编程和调试。
2.实验内容
1)有10个数,统计正数的个数,存放在变量M中中。
经过汇编后,形成EXE文件。
在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。
用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确?
(AL寄存器中存放正数的个数)
DSEGSEGMENT
MSGDB4,-2,-6,0,5,67,8,-3,5,6
MDB?
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVCX,10
MOVAL,0
LEASI,MSG
L1:
MOVBL,[SI]
CMPBL,0
JBENEXT
INCAL
NEXT:
INCSI
LOOPL1
MOVM,AL
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
2)数据段中是一组无符号数,将最小数存放在M单元中。
按上题方法查找一处逻辑错误。
DSEGSEGMENT
MSGDB13,15,7,25,24
MDB?
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVCX,4
MOVAL,MSG
MOVSI,OFFSETMSG+1
L1:
CMPAL,[SI]
JBNEXT
MOVAL,[SI]
NEXT:
LOOPL1
MOVM,AL
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
3)编程:
在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。
4)编程:
,Ai,Bi为字节型无符号数,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。
4.算法描述及实验步骤
实验一:
输入题目代码->保存->运行->调试->观察结果(在Masmforwindows在完成)
实验二:
根据代码实现功能从MSG中输入五个数,AL取第一个数,SI取第二个数,比较AL,SI所取到的数的大小,若ALSI,AL=[SI];将AL的内容输出,则得出输出五个数中的最小数,步骤同实验一
实验三:
依题可编写如下代码指令
实验四:
依题可编写如下代码指令
5.调试过程
无
6.实验结果
【实验一】
分步执行结果如下
分析:
当将第二个数-2放入放入BL的时候发现数值是FE,转化为十进制数是254,并非是-2的十六进制,原因是JBE命令是用于无符号数的,指令说明如下,要实现有符号数的比较要使用JLE指令
JBE指令说明JLE指令说明
【实验二】
分步执行结果如下
分析:
进入死循环,原因是两个数比较后,SI没有加1,一直停留在13和15的比较中,修改加入INCSI即可,如下图
【实验三】
执行结果如下
分析,BUL中4,-2,-6,0,5,67,8,-3,5,60的个数是1,实验结果与预期一致
【实验四】
结果如下图
分析:
Ai:
10,45和Bi:
8,2的
结果是10*8+45*2=170转化为16进制是AA,有上图可知实验结果和预期一致!
7.总结
通过此次实验,能够通过简单调试查找出错误,分步执行发现逻辑错误并改正,掌握并理解了分支语句的运用和循环语句的使用,纸上得来终觉浅,绝知此事要躬行,多多手动敲代码才能理解并掌握汇编的实质!
!
附录:
【实验三代码】
DSEGSEGMENT
BUFDB4,-2,-6,0,5,67,8,-3,5,6
RESULTDB?
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVCX,10
MOVAL,0
LEASI,BUF
L1:
MOVBL,[SI]
CMPBL,0
JNENEXT
INCAL
NEXT:
INCSI
LOOPL1
MOVRESULT,AL
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
【实验四代码】
DATASEGMENT
NUM1DB10,45
NUM2DB8,2
RESTDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,NUM1
LEADI,NUM2
MOVCX,10
MOVBX,0
L1:
MOVAL,[SI]
MULBYTEPTR[DI]
ADDBX,AX
INCSI
INCDI
LOOPL1
MOVREST,BX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART