电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

微机原理试验循环程序结构和过程调用程序设计VIP免费

微机原理试验循环程序结构和过程调用程序设计_第1页
1/6
微机原理试验循环程序结构和过程调用程序设计_第2页
2/6
微机原理试验循环程序结构和过程调用程序设计_第3页
3/6
微机原理实验实验二循环程序结构和过程调用程序设计一、实验目的1.掌握简单循环程序和过程调用的设计和调试方法;2.熟练掌握存储器的分段概念和段超越方法;3.掌握堆栈的概念和操作过程;4.掌握单字节和双字节在存储器中存放方式;5.掌握负数在内存中的表示方法;6.掌握数组的编程处理方法以及“冒泡”法排序的编程方法。二、实验内容1.现有两个数组X和Y:X=32、-43、76、95、-1Y=-78、127、-128、-125、88用汇编语言编程计算两个数组之和,结果送至另一数组S中,即S(i)=X(i)+Y(i)。1)程序流程图:2)源程序:1DATASEGMENTXDB32,-43,76,95,-1YDB-78,127,-128,-125,88SDB5DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,0MOVCX,5Li:MOVAL,X[BX]ADDAL,Y[BX]MOVS[BX],ALINCBXLOOPLiMOVAH,4CHINT21HCODEENDSENDSTART3)运行结果(内存查看:DS)4)观察并总结①不同数制的机器数表示方法;最高位表示数的符号,其他位表示数值大小的二进制数,通常以补码表示,为了方便可转化为16进制形式。②负数在内存中的表示方法;负数是符号位为1,在内存中以补码的形式储存。例如本例中的-1,补码为11111111B,即FFH。③源程序的数据段和代码段在内存中存放的位置和大小。数据段存放于DS中,占用15个字节。代码段存放于CS中,占用30字节。22.现有X数组:X=32、-43、76、95、-1、-78、127、-128、-125、88,编程将该数组按递增顺序排序,并将排序后的数组复制到附加段(ES段)内;1)程序流程图:2)源程序:(第一种:仅采用主模块形式)DATASEGMENTXDB32,-43,76,95,-1,-78,127,-128,-125,88DATAENDSDATALSEGMENTYDB10DUP(0)DATALENDSCODE1SEGMENTASSUMECS:CODE1,DS:DATA,ES:DATALSTART:MOVAX,DATA3MOVDS,AX;初始化DSXORAX,AX;AX清零MOVAX,DATALMOVES,AX;初始化ES;排序部分MOVBX,0;BX为数组指针,从0开始MOVSI,0;SI为外循环次数,从0开始MOVCX,9;内循环次数,从9开始L:MOVBX,SIMOVAL,X[BX];将每次外循环的第一个数给ALLp:CMPAL,X[BX+1];把AL和它之后的每一个数进行比较JLELp2;如果AL≤那个数,跳转到Lp2XCHGAL,X[BX+1];如果AL>那个数,则AL和其数值交换MOVX[SI],AL;把AL中新的数值送回外循环的第一个数JMPLp2Lp2:INCBXLOOPLpINCSIMOVDI,SINEGDIADDDI,0AHMOVCX,DI;实现CX=10-SI,即重新定义内循环次数LOOPL;复制到ES部分MOVCX,10MOVBX,0Li:MOVAL,X[BX]MOVY[BX],ALINCBXLOOPLiMOVAH,4CHINT21HCODE1ENDSENDSTART(第二种:使用子程序调用,SORTSUB段内调用,COPYSUB段间调用)DATASEGMENTXDB32,-43,76,95,-1,-78,127,-128,-125,88DATAENDSDATALSEGMENTYDB10DUP(0)DATALENDSCODE1SEGMENT4ASSUMECS:CODE1,DS:DATA,ES:DATALSTART:MOVAX,DATAMOVDS,AXXORAX,AXMOVAX,DATALMOVES,AXMOVBX,0CALLSORTSUB;调用排序子程序CALLFARPTRCOPYSUB;调用复制子程序MOVAH,4CHINT21HSORTSUBPROC;排序子程序(段内)MOVSI,0MOVCX,9L:MOVBX,SIMOVAL,X[BX]Lp:CMPAL,X[BX+1]JLELp2XCHGAL,X[BX+1]MOVX[SI],ALJMPLp2Lp2:INCBXLOOPLpINCSIMOVDI,SINEGDIADDDI,0AHMOVCX,DILOOPLRETSORTSUBENDPCODE1ENDSCODE2SEGMENTASSUMECS:CODE2COPYSUBPROCFAR;复制子程序(段间)MOVCX,10MOVBX,0Li:MOVAL,X[BX]MOVY[BX],ALINCBX5LOOPLiRETCOPYSUBENDPCODE2ENDSENDSTART3)运行结果将断点设置到SORTSUB结束,连续执行,DS内存结果为将断点设置到COPYSUB结束,连续执行,ES内存结果为三、实验分析通过对这次实验的两个问题的分析和程序编写,我明白了负数在内存中是如何表示的,又复习了一遍冒泡法排序,还掌握了段内和段间子程序调用的方法。其实,在这个过程中,我也遇到了许多问题。比如:1.一开始没有想到使用数组指针,而是用寄存器相对寻址方法,也可以运行成功,但是相比而言较麻烦。2.内循环和外循环都用到了CX,不好控制,需要多次修改多次调试。3.程序编译成功设置好断点之后点击开始调试,断点就没了,而且它运行的每一条语句也不显示黄色。最后是将START:后的语句另起一行才解决,我猜测可能是调试系统没有检测到起点在哪。4.还会犯MOV前后两个变量长度不匹配的低级错误。5.想实现CX=10-SI这个功能,使用语句MOVCX,10-SI出现错误,后来使用笨办法,将其拆分为多个语句MOVDI,SINEGDIADDDI,0AHMOVCX,DI这不仅是一个训练思维的过程,更是一个锻炼能力的过程,每一行代码都是亲自敲出,一遍遍地改正错误,但最后正确结果出来的时候,我是真的开心。6

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

微机原理试验循环程序结构和过程调用程序设计

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部