北理(bit)微机原理上机软件实验报告_第1页
北理(bit)微机原理上机软件实验报告_第2页
北理(bit)微机原理上机软件实验报告_第3页
北理(bit)微机原理上机软件实验报告_第4页
北理(bit)微机原理上机软件实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理软件编程实验报告班级:学号:姓名:一、实验题目1、IDE86集成开发环境的学习和运用2、编写程序求出10个数中的最大值和最小值,并以单步形式观察如何求出最大值、最小值。3、求1到100的累加和,并用十进制形式将结果显示在屏幕上。要求实现数据显示,并返回DOS状态。4、将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来。(56H、0ffH、78H、82H、12H、0、95H、58H、0bcH、34H)二、实验目的1、学习并掌握IDE86集成开发环境的使用包括编辑、编译、链接、调试与运行等步骤编辑:源程序的输入、修改。编译:常见编译出现的语法错误的修改。 连接:形成可执行文件。运行:运行、断点设置、单步运行、单步跟踪;观察寄存器、标志寄存器值;观察数据存储器中的数据。2、完成所有题目,提高编程能力,加深对理论课的理解。三、实验内容1、文字叙述设计思路 1.1编写程序求出10个数中的最大值和最小值 由于一共有十个数,所以求其最大数或者最小数需要比较9次。从数据段的段首开取数,先取两个数进行比较,比较完后取其中的最大数或者最小数放入数据段的第二位中。再取第三位数与第二位数比较,如此循环,比较9次后在数据段最末位的就是我们需要的数。1.2求1到100的累加和,并用十进制形式将结果显示在屏幕上求和部分:1~100一共有100个数,所以需要做100次加法。做加法要有两个数,第一个数是第i位的数值,第二个数是i-1位以及之前所有数的和,所以这两个数必须分别存放在两个寄存器里,并且两个数相加之后的所得的值,必须放在存放“和”的寄存器中,另外一个寄存器每做完一次加法自加1。显示部分:我们所求得的最终数值在内存中是以16进制数存放的,但是由于结果只是一个数,我们可以把它的每一位所对应的ASCII码按照一定的顺序存放到一个数据段中,再以字符串形式直接输出。1.3将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来比较部分:题目一共给了我们10个数,如果要进行排序的话可以先把十个数中最大的数选出来,放到数据段的最后一个位置,接着再选出次大的数放到数据段的倒数第二位,如此循环到最后便可成功将所给的十个数排序好。显示部分:我们所求得的最终数值在内存中是以16进制数存放的,如果想要显示16进制数就必须要把所得数的每一位ASCII码求出来放入DL中。2、流程图2.1编写程序求出10个数中的最大值和最小值开始开始开始开始定义数据段代码段i定义数据段代码段i=1定义数据段代码段i=1取第i个数和第i+1个数进行比较取第取第i个数和第i+1个数进行比较取第i个数和第i+1个数进行比较N[i]N[i]<[i+1]?N[i]>[i+1]?YYYY[i+1]=[[i+1]=[i][i+1]=[i]i=i+1i=i+1i=i+1i=i+1比较了9比较了9次?比较了9次?NNNNYYYY最小数为[i+1]最大数为最小数为[i+1]最大数为[i+1]CX<10?结束结束结束结束2.2求1到100的累加和,并用十进制形式将结果显示在屏幕上开始开始加了100加了100次?定义数据段代码段AX=0,BX=0NNBX=AX+BXBX=AX+BXYYAX=AX+1AX=AX+1打印打印输出BX结束结束2.3将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来开始开始BH=BH-1BH=BH-1定义数据段代码段设定内循环外循环次数BH=9,定义数据段代码段设定内循环外循环次数BH=9,BL=9NBH=0?NBH=0?BL=BHBL=BHi=1i=1YY打印输出数据段的所有内容打印输出数据段的所有内容[[i]>[i+1]?NNYY结束结束[i+1][i+1]=[i]ii=i+1比较了比较了BL次?NNYY四、实验源程序1、编写程序求出10个数中的最大值和最小值DATASEGMENT;定义数据段DATA1DB12H,23H,34H,45H,56H,67H,78H,89H,9AH,0FDH;定义十个数MAXDB0MINDB0DATAENDS;数据段定义完毕CODESEGMENT;定义代码段ASSUMECS:CODE,DS:DATAEXP1PROCFAR;设定为子函数,可以远程调用START:MOVAX,DATAMOVDS,AX;初始化DSLEASI,DATA1;将SI指向DATA1LEADI,MAX;将DI指向MAXMOVAH,[SI]MOVAL,[SI+1];取出DATA1的前两个数CALLCASE1;调用子函数CASE1MOVAH,0MOV[DI],AX;将最大数存入MAX中LEADI,MIN;将DI指向MINCALLCASE2;调用子函数CASE2MOVAH,0MOV[DI],AX;将最小数存入MIN中MOVAH,4CHINT21H;返回DOSRET;远程调用返回CASE1PROC;子程序CASE1(查找最大数)MOVCX,10;设定比较次数GO1:MOVAH,[SI];取出SI所指定的数放入AHCMPAL,AH;比较AH与ALJAGO2;如果AL大于AH则跳转到GO2MOVAL,AH;若AL小于AH则将AH放到AL中INCSI;修改指针,将指针指向取DATA1中的下一个数LOOPGO1;循环比较10次JMPEND1;循环完成GO2:INCSI;修改指针,将指针指向取DATA1中的下一个数LOOPGO1;循环比较10次JMPEND1;循环完成END1:RET;循环完成,得到最大值并存在AL了中返回主程序CASE1ENDP;子程序CASE1结束CASE2PROC;子程序CASE1(查找最小数)MOVCX,10;设定比较次数XORAX,AX;将AX清零,以便存数比较LEASI,DATA1;SI指向DATA1MOVAL,[SI];取出第一个数GO3:MOVAH,[SI];取出第一个数CMPAL,AH;比较DATA1中的两个数JBGO4;小于则跳转MOVAL,AH;大于则把较小数放于ALINCSI;修改指针指向下一位LOOPGO3;循环比较JMPEND2;循环完成GO4:INCSI;修改指针指向下一位LOOPGO3;循环比较JMPEND2;循环完成END2:RET;循环完成,得到最小值并存在AL了中返回主程序CASE2ENDP;子程序CASE2结束EXP1ENDP;远程调用完成并返回CODEENDS;代码段结束ENDSTART;汇编结束2、求1到100的累加和,并用十进制形式将结果显示在屏幕上DATASEGMENT;定义数据段DATA1DW?;定义字形变量存放累加和结果RESULTDB4DUP(?),0DH,0AH,'$';定义数组以便输出DATAENDS;数据段定义完毕CODESEGMENT;定义代码段ASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AX;初始化DSLEASI,DATA1;将SI指向DATA1MOVCX,100;设置累加次数XORAX,AXXORBX,BX;清空两个寄存器以便用于计算GO1:INCAX;AX为第N个数ADDBX,AX;BX为N-1个数的累加和LOOPGO1;相加100次MOV[SI],BX;所得结果放入DATA1MOVCX,4;设定循环次数求结果每一位的ASCII码LEADI,RESULT;将DI指向RESULTXORDX,DXMOVAX,DATA1MOVBX,0AHAGAIN:DIVBXADDDL,30HMOV[DI+3],DLDECDIMOVDL,0LOOPAGAIN;取得结果每一位数的十进制ASCII码并存放于RESULT中LEADX,RESULTMOVAH,09HINT21H;结果以十进制显示MOVAH,4CHINT21;返回DOSCODEENDS;代码段结束ENDSTART;汇编结束3、将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来DATASEGMENT;数据段定义DATA1DB56H,0FFH,78H,82H,12H,0,95H,58H,0BCH,34H;定义要比较的数DATAENDS;数据段定义结束CODESEGMENT;代码段定义ASSUMECS:CODE,DS:DATAEXP1PROCFAR;远程调用定义START:MOVAX,DATAMOVDS,AX;初始化DSLEASI,DATA1MOVBH,9;设置外循环比较次数GO1:MOVDI,SI;重新开始从第一位开始比较MOVBL,BH;设置内循环比较次数GO2:MOVAH,[DI]MOVAL,[DI+1]CMPAH,AL;比较DATA1中某前后两位的大小JNLGO3;大于跳转JMPGO4;小于跳转GO3:MOV[DI+1],AHMOV[DI],AL;大于则改变两者位置JMPGO4;跳转GO4:INCDI;将指针指向下一位数DECBLJNZGO2;判断内循环是否完成DECBHJNZGO1;判断外循环是否完成MOVCX,10DISP1:MOVAL,[SI]ANDAL,0F0HRORAL,4ADDAL,30HCMPAL,'9';与‘9’判断JBEDISP2ADDAL,07H;大于则加07HDISP2:MOVDL,AL;小于直接显示MOVAH,2INT21H;显示某一位数高位16进制的ASCII码MOVAH,0MOVAL,[SI]MOVBL,16DIVBLADDAH,30HCMPAH,'9'JBEDISP3ADDAH,07HDISP3:MOVDL,AHMOVAH,2INT21H;显示某一位数低位16进制的ASCII码MOVDL,'H'MOVAH,2INT21H;显示‘H’MOVDL,''MOVAH,2INT21H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论