版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..微机原理软件实验报告学院:信息与通信工程学院班级:2012211123班内序号:学生__学号:实验二分支,循环程序设计一、实验目的1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS功能调用.二、实验任务及内容1.安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过9。2.编写一个程序统计数据区中正数,负数和零的个数。3.将统计结果在屏幕上显示。4.〔扩展题统计出正奇数、正偶数,负奇数、负偶数以及零的个数。NYNYN开始初始化判断是否大于等于零读入一个数ZERO+1是否等于零返回DOS系统结束MINUS+1PLUS+1NNNNCX=0YCX=0YYY四、给出源程序〔要求加注释datasegmentbuffdw1,2,0,0,-1;数据段,初始化数据countequ$-buffplusdb?;定义三种数的存储位置zerodb?minusdb?string1db'plusnumber:','$'string2db'zeronumber:','$'string3db'minusnumber:','$'dataendsstacksegmentstack'stack' db100dup<?>stackendscodesegment assumecs:code,ds:data,es:data,ss:stackbegin: movax,data movds,ax movcx,count shrcx,1 movdx,0 movah,0 leabx,buffagain: cmpwordptr[bx],0;首先和0比较 jgeplu incah;小于零MINUS+1 jmpnextplu: jzzer;判断是否等于零,等于零ZERO+1 incdl;不等于零PLUS+1 jmpnextzer: incdhnext: incbx;下一个数 incbx loopagain adddl,48 movplus,dl adddh,48 movzero,dh addah,48 movminus,ahshow: subdx,dx;显示模块 movdx,offsetstring1 movax,0900h;送显示指令 int21h movdl,[plus] movax,0200h int21hmovdl,0dhint21hmovdl,0ahint21h movdx,offsetstring2 movax,0900h int21h movdl,[zero] movax,0200h int21hmovdl,0dhint21hmovdl,0ahint21hmovdx,offsetstring3 movax,0900h int21h movax,0200h movdl,[minus] int21h movax,4c00h;结束程序 int21hcodeends endbegin五、给出程序运行结果〔运行结果抓屏保存datasegment中存入1,2,0,0,-1显示有2个0、2个大于0的数、1个小于0的数,结果正确六、预习题1.十进制数0--9所对应的ASCII码是什么?如何将十进制数0-9在屏幕上显示出来?答:对应的ASCII码是30H~39H,把0-9加上30H即可得到对应的ASCII,送给DL,再执行INT21H即可显示。2.如何检验一个数为正,为负或为零?你能举出多少种不同的方法?答:1先判断是否大于等于零,否则为负数,是则判断是否等于零,否则为整数。2.判断ZF标志位,为零则循环左移一直判断,为1为负,为0为正七、实验总结、建议要求、心得体会之前小学期中已经用汇编语言编写过比较大型的程序,但是是在编译器中运行,比较容易查错,而且显示、输入等功能都是调用硬件实现,因此很多经验不能照搬,遇到了很多问题,我发现汇编语言对程序内部存储器等的利用虽然比C语言麻烦,但是都是真正可以控制、可以调用显示的,可以直接DEBUG看到内存空间,非常直观。由于在程序中存在很多条件跳转语句,所以需要在最初设计时就考虑好各种分支情况,在画好程序流程图之后,程序的编写工作变得简单了很多,简化了编写代码过程中的思考过程。实验三代码转换程序设计一、实验目的1.掌握几种最基本的代码转换方法;2.运用子程序进行程序设计.二、实验任务及内容1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来.2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明.3.对输入要有检错措施,以防止非法字符输入,并有适当的提示.4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.与MIN比较,与MIN比较,刷新最小值YY显示YNY输入结束符.N输入空格开始初始化键盘输入两个字符,存储在连续空间检测输入是否正确ERROR!ERROR!四、给出源程序〔要求加注释注:本程序段中中断字符为空格结束字符为回车datasegment ;数据段初始化mindb'9','9'string0db0dh,0ah,'PLEASEINPUTSOMEINTEGERS.DEVIDEDwithSPACE.STOPwithENTER',0dh,0ah,'$'string1db0dh,0ah,'ERROR!PLEASEINPUTAGAIN!',0dh,0ah,'$'string2db0dh,0ah,'THEMINESTNUMBERIS:',0dh,0ah,'$'dataendsSTACKSEGMENTSTACK'STACK'DB100DUP<?>STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKINPUTPROCNEAR;输入子函数MOVAH,01H INT21H retinputendptest1 procnear;测试输入是否为数字子函数 cmpal,'0' jberror cmpal,'9' jaerror jmpexiterror: moval,0;输入不为数字返回0exit: rettest1 endpstart: movax,data movds,ax movdx,offsetstring0 movax,0900h int21hround:;循环主体 callinput;输入第一个数 calltest1 cmpal,00h jzwrong1;错误提示 movbh,al;存储callinput;输入第二个数 calltest1 cmpal,00h jzwrong1 movbl,al callinput cmpal,0dh;输入是否结束 jzshow;输入结束转移到显示 cmpal,'';输入分隔符,开始比较 jzcompare jmpwrong1wrong1: movdx,offsetstring1 movax,0900h int21h jmproundcompare:cmpbx,WORDPTRmin;比较并刷新MIN jbchange jmproundchange:movwordptrmin,bx jmproundshow: ;显示子函数 cmpbx,WORDPTRmin jbswapswap: movwordptrmin,bxoutt: movdx,offsetstring2 movax,0900h int21h movdl,min+1 movax,0200h int21h movdl,min int21h movax,4c00h int21hcodeends endstart五、给出程序运行结果〔运行结果抓屏保存结果讲解:第一次由于输入了三位数,所以报错;第二次由于输入字母,所以报错;第三次输出正常结果,运行成功。六、回答预习题如何将输入的两个字符<0~9>变为十进制或二进制数?答:减30H。如何将选出的最小值<二进制或十进制>变为ASCII码再进行显示?答:直接存储输入的ASCII,不需要转换。如要转换则加30H。你觉得采用二进制运算还是十进制运算更适合于这个实验?答:二进制运算,直接保存输入的数的二进制编码,直接比较,不需要区分十位个位。七、实验总结、建议要求、心得体会练习了调用子函数,发现子函数调用的PROCNEAR必须和子函数名同一行显示,不然程序会报错,还有不能把存储器操作数作为目的操作数,一定要通过寄存器转换。汇编语言有很多需要注意的语法细节,应该多多练习。实验四子程序设计实验目的1.进一步掌握子程序设计方法;2.进一步掌握基本的DOS功能调用.二、实验任务及内容1.从键盘上输入某班学生的某科目成绩.输入按学生的学号由小到大的顺序输入.2.统计检查每个学生的名次.3.将统计结果在屏幕上显示.4.为便于观察,输入学生数目不宜太多,以不超过一屏为宜.输出应便于阅读.尽可能考虑美观.5.输入要有检错手段.NYNY输入是否合理开始提示输入输入子函数单字符输入调用调用检验子函数YY输入输入回车结束调用排序子调用排序子函数调用调用显示子函数结束结束四、给出源程序〔要求加注释datasegment;数据段初始化buffdw20dup<0000h>;存放成绩buff1dw20dup<31h,32h,33h,34h,35h,36h,37h,38h,39h>;存放学号count1db0;存放输入了几个数count2db0string0db0dh,0ah,'PLEASEINPUTSCORES',0dh,0ah,'$'string1db0dh,0ah,'ERROR!PLEASEINPUTAGAIN!',0dh,0ah,'$'string2db0dh,0ah,'THERANK:','$'string3db0dh,0ah,'NUMBER:','$'dataendsSTACKSEGMENTSTACK'STACK'DB100DUP<?>STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKINPUTPROCNEAR;输入子函数MOVAH,01H INT21H retinputendp test1 procnear;测试输入是否为数字子函数 cmpal,'0' jberror cmpal,'9' jaerror jmpexiterror: moval,0exit: rettest1 endpsave1 procnear;存储输入的第一个数子函数,存在高位 leasi,buff movcx,0 movcl,count1 addsi,cx addsi,1 mov[si],al inccl ;40 movcount1,cl retsave1 endpsave2 procnear;存储输入的第二个数子函数,存在低位 leasi,buff movcx,0 movcl,count1 addsi,cx decsi mov[si],al inccl ;40 movcount1,cl retsave2 endpcompareprocnear;比较两个数大小并完成交换子函数 cmpax,bx jbchange jmpexit0change:movch,0 leasi,buff addsi,dx mov[si],bx addsi,2 mov[si],ax leasi,buff1 addsi,dx movax,[si];交换成绩同时交换学号 addsi,2 movbx,[si] mov[si],ax subsi,2 mov[si],bxexit0: retcompareendp start: movax,data;主程序入口 movds,ax movdx,offsetstring0 movax,0900h int21h movax,0round: callinput;输入第一个数 calltest1;测试 cmpal,00h jzwrong1;错误提示 callsave1 callinput;输入第二个数 calltest1 cmpal,00h jzwrong1 callsave2 callinput cmpal,0dh jelist;输入结束进入排序 cmpal,'' jeround jmpwrong1wrong1: movdx,offsetstring1 movah,09h int21h movcl,0 movcount1,cl jmproundlist: movcl,count1 shrcl,1 movcount2,cl deccl movcount1,cl jzshoworder: movcl,0;冒泡排序法外层循环order1: leasi,buff;冒泡排序法内层循环 movdh,0 movdl,cl shldl,1 addsi,dx ;100 movax,[si] addsi,2 movbx,[si] callcompare inccl cmpcl,count1 jeorder2 jmporder1order2: movcl,count1 deccl movcount1,cl jnzorder jmpshowshow: movdx,offsetstring4 ;显示名次 movah,09h int21hshow0: movah,02h leasi,buff2 movcl,count2show00: incsi movdl,[si] int21h decsi movdl,[si] int21h incsi incsi movdl,'' int21h deccl jnzshow00show1: movdl,0dh ;显示学号 int21h movdx,offsetstring3 movah,09h int21h movah,02h leasi,buff1 movcl,count2show2: incsi movdl,[si] int21h decsi movdl,[si] int21h incsi incsi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电池及电池系统维修保养师岗前保密意识考核试卷含答案
- 长期照护师班组考核知识考核试卷含答案
- 制材工安全技能考核试卷含答案
- 农作物种植技术员安全教育水平考核试卷含答案
- 甘油精制工班组协作模拟考核试卷含答案
- 甲壳类繁育工安全综合竞赛考核试卷含答案
- 烧结成品工岗前日常考核试卷含答案
- 制帽工操作技能竞赛考核试卷含答案
- 糖艺师岗前生产安全考核试卷含答案
- 坯布缝接工安全防护水平考核试卷含答案
- 【12篇】新部编版小学语文六年级上册【课内外阅读理解专项训练(完整版)】含答案
- 船艇涂装教学课件
- 招标绩效考核方案(3篇)
- 500万的咨询合同范本
- 2025年贷款房屋转赠协议书
- 2025天津市个人房屋租赁合同样本
- 中药热熨敷技术及操作流程图
- 鹤壁供热管理办法
- 01 华为采购管理架构(20P)
- 糖尿病逆转与综合管理案例分享
- 工行信息安全管理办法
评论
0/150
提交评论