实验三分支循环程序设计.docx
《实验三分支循环程序设计.docx》由会员分享,可在线阅读,更多相关《实验三分支循环程序设计.docx(13页珍藏版)》请在冰豆网上搜索。
实验三分支循环程序设计
福建农林大学金山学院实验报告
系:
机电工程专业:
电子信息工程年级:
09
姓名:
学号:
092230030实验课程:
汇编语言
实验室号:
_______实验设备号:
实验时间:
指导教师签字:
成绩:
实验三分支循环程序设计
1.实验目的和要求
1、学习调试程序,查找逻辑错误;
2、学习分支语句的编程和调试;
3、学习循环语句的编程和调试。
2.实验环境
实验的硬件环境是:
IBM—PC机及其兼容机
实验的软件环境是:
操作系统:
DOS2.0以上;调试程序:
DEBUG.COM;文本编程程序:
EDIT.EXE、WPS.EXE;宏汇编程序:
MASM.EXE(或ASM.EXE);连接装配程序:
LINK.EXE;交叉引用程序:
CREF.EXE(可有可无)。
3.实验内容及实验数据记录
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.算法描述及实验步骤
一、1、分析:
该程序是是将输入的十个数中输出大于0的数的个数,将之存入AL寄存器中,当[SI]的内容(即BL),大于0的时候,将AL加1,则可从AL中得到大于0的个数
2、
3、通过运行程序,发现AL=10,通过T命令可以发现,当BL<10时,程序仍在执行INCAL,故程序错误,因为JBE是无符号命令,所以将其改为JLE。
则程序变为:
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
JLENEXT
INCAL
NEXT:
INCSI
LOOPL1
MOVM,AL
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
三.1、该程序需要计数器CX,段寄存器DS,源变址寄存器SI,还要为BUF提供空间,定义result数据寄存器BX,AX,输入十个数据,由SI指向数据区,将里面的内容传给BL,当BL=0时,AL先清0,然后加一,输出的值为AL的值,结果放到result。
可使用分支程序的方法来实现。
2、
3、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
JNZNEXT
INCAL
NEXT:
INCSI
LOOPL1
MOVresult,AL
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
四、1.该程序需要变址寄存器SI,DI,寄存器AX,DX,计数器CX,建立NUM1NUM2数据空间,输出空间REST,用到循环语句
2、
3、3DSEGSEGMENT
NUM1DB1,2,3,4,5,6,7,8
NUM2DB1,2,3,4,5,6,7,8
RESTDW?
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVCX,8
MOVDX,0
LEASI,NUM1
LEADI,NUM2
L1:
MOVAL,[SI]
MULBYTEPTR[DI]
ADDDX,AX
INCSI
INCDI
LOOPL1
MOVREST,DX
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
5.调试过程
1
2
二、1从MSG中输入五个数,AL取第一个数,SI取第二个数,比较AL,SI所取到的数的大小,若ALSI,AL=[SI];
将AL的内容输出,则得出输出五个数中的最小数
2
3、运行程序,发现程序结果错误,用T命令查看,发现两个比较完成后,指针未下移,所以在循环体后加一步:
INCSI,即程序为:
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:
INCSI
LOOPL1
MOVM,AL
MOVAL,0
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
6.实验结果
1、
2、
3、
4、
7.总结
对上机实验结果进行分析、上机的心得体会及改进意见。
附录: