2013微机实验报告汇总(武汉大学物理学院).doc

上传人:灯火****19 文档编号:137165038 上传时间:2020-07-05 格式:DOC 页数:13 大小:54KB
返回 下载 相关 举报
2013微机实验报告汇总(武汉大学物理学院).doc_第1页
第1页 / 共13页
2013微机实验报告汇总(武汉大学物理学院).doc_第2页
第2页 / 共13页
2013微机实验报告汇总(武汉大学物理学院).doc_第3页
第3页 / 共13页
2013微机实验报告汇总(武汉大学物理学院).doc_第4页
第4页 / 共13页
2013微机实验报告汇总(武汉大学物理学院).doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《2013微机实验报告汇总(武汉大学物理学院).doc》由会员分享,可在线阅读,更多相关《2013微机实验报告汇总(武汉大学物理学院).doc(13页珍藏版)》请在金锄头文库上搜索。

1、实验报告一(循环程序的设计)专业:材料物理; 姓名:曾瑞; 学号:20113012300191, 实验内容编程计算:s=1+2+3+6+n<=100的最大项数n以及对应的和s。2, 实验要求 将最大项数与和数分别存入n和sum单元,用td调试,运行程序并检查结果; 将结果在屏幕上以16进制数显示。显示格式:max n=xxh sum =xxh。3,实验目的学习并掌握循环程序的设计方法。4,源程序;filename:zengrui.asm data segmentn db? ;开辟一个字节单元 mesg1 dbmax n=,30h,30h,h,$ sum db?mesg2 dbsum =,

2、30h,30h,h,$ data endscode segmentasume cs:code,ds:data ;段分配begin: mov ax,data ;段基址ds mov ds,axmov bl,0 ;给bl和al赋初始值0 mov al,0count: incbl add al,bl cmp al,100jbecount ;无符号数<=跳转subal,bl ;所得al大于100,故要减去bl decbl ;bl的前一位才是最大项 mov n,bl ;最大项数n单元 mov sum,al ;和数sum单元 mov bx,offset ncall n2_16 ;调用过程n2_16 m

3、ov bx,offset sumcall n2_16mov ah,9 ;9号功能调用,输出字符串mov dx,offset mesg1int 21hmov ah,02h;2号功能调用,输出两个空格mov dl,00hint 21hmov ah,02hmov dl,00hint 21hmov ah,9 ;9号功能调用,输出字符串mov dx,offset mesg2int21hmov ah,4ch;返回dos操作系统int21hn2_16 procnexti: cmp byte ptr bx,16;存储单元与16比较 jc next2 ;小于16转 sub byte ptr bx,16;否则,减

4、去16 inc byte ptr bx+7 ;高位加一 jmp next1next2: mov ah,byte ptr bxcmp ah,10 ;与10比较 jc next3 ;小于10转 mov ch,7 ;否则,加7 add ah,chnext3: add byte ptr bx+8,ah ;生成低位数 ret endpcode endsend begin5,实验结果及分析实验结果显示为:max n=0dh sum =5bh。经过验证,其结果是正确的。 需要说明的有以下几点: 本程序还可以进一步简化。比如,对于空格的输出,在本程序中两次调用了2号功能,当然,也可以直接在输出字符串时中直接输

5、出。例如,直接在datasegment 中mesg1 dbmax n=,30h,30h,h,$修改为mesg1 dbmax n=,30h,30h,h,00h,00h,$,就可以做到这点; 在设计源程序时,本人对结果输出稍微改变了一下。实验要求是max n=xxh sum =xxh,最终结果显示为:max n=0dh sum =5bh。可以看出,字符串sum后面多了一个空格。之所以这样做,是因为这样方便调用过程n2_16,其好处是简化了程序;由于实验要求sum<=100,因而在输出显示16进制数时,不用考虑其高位数大于10的情况。所以,在设计程序时,为了简化,只是对低位数的情况进行了一次比

6、较判断。至于为什么在低位数大于等于10时,需要加7?原因是这样的,即我们最终的结果都是用ascii码来显示的,16进制低位如a对应着ascii码41h,如果所得结果不加7,则ascii码为3ah,则对应的是:,其记过是错误的;对于2进制向16进制的转换,其方法不是唯一的,有很多种。本实验设计的源程序属于比较初级的一种,其思路是通过不断减16,来获取高位数。另外一个思路是:通过除法运算得商取余。当然,也可以利用2进制与16进制的特殊关系,通过与运算0f0h,结果右移四位,得到高四位;通过与0fh运算,得到低四位,最后存入相应的存储单元。其过程如下:n2_16 procmov al,byte pt

7、r bxmov ah,aland al,0f0h ;与运算,al低四位清0 mov cl,4 ;右移四位,得高四位数shr al,clcmp al,10jc next1add al,7next1: add byte ptr bx+7,aland ah,0fh ;与运算,ah高四位清0,得低cmp ah,10; 四位数jc next2add ah,7next2: add byte ptr bx+8,ahretendp注意:以上过程增加了对16进制高位数的判断实验报告二(分支程序的设计)专业:材料物理; 姓名:曾瑞; 学号:20113012300191,实验内容显示月份名direct;2,实验要求

8、试编写一程序,根据用户键入的月份数在屏上显示该月份的英文缩写名;提示:(1) 用跳跃表法实现多个分支转移。可建立一个月份缩写表:montabdb jan , feb , mar , apr , may , jun db jul , aug , sep , oct , nov , dec(2) 用户给定的月份数与其对应的英文缩写表格地址为:montab + (月份数-1) * 3注意:用户键入的月份数是ascii码,必须先转换为数字才能用以上公式计算;3,实验目的学习分支程序的结构,掌握具有分支结构程序的设计方法;4,源程序;filename zengrui.asmdata segmentmes

9、g1 db please input the number for month,0dh,0ah,$ mesg2 db error!,0dh,0ah,$num db 3 count db ? ;字符串的个数store db 2 dup(?);用于存放输入的字符串 montab db jan , feb , mar , apr , may , jun;月份表dbjul , aug , sep , oct , nov , decmonth db 3 dup(?),0dh,0ah,$ ;暂时存放待显示的月份data ends code segmentassume cs:code,ds:data sta

10、rt: mov ax,datamov ds,axmov es,ax ;使es与ds指向同一段 mov dx,offset mesg1 ;输出提示信息 mov ah,09h int 21hmov dx,offset num ;输入字符串 mov ah,0ah int 21hcmp count,0 ;输入字符个数与0比较 jzexit ;等于0跳转 cmp count,2 jznext mov xor mov jmp next: mov mov xor cmp jz cmp jnz sub add goon: cmp jz cmp jadec mov mul lea add lea mov cld

11、 rep disp: mov mov al,storeal,30h ah,0 goon ah,store al,store+1ax,3030hah,0goon ah,1last ah,ah al,10 al,0 last al,12 last al bl,3bl si,montabsi,ax di,month cx,3movsb dx,offset month ah,09h;将ascii码转换成十进制 ;ah置零 ; 将ascii码转换成十进制 ;ah为0跳转 ;若ah不为1,则跳转 ;将输入的ascii完全转化为 ;十进制数;若输入数为0,则跳转;若输入数大于12,则跳转 ;偏移值存放于al

12、中 ;得到源的偏移地址 ;控制位寄存器df清零 ;无条件重复传递字符串int 21h;显示出对应的月份 jmp start;返回到开始 last: mov dx,offset mesg2 ;提示出错error mov ah,09h int21h jmp startexit: mov ah,4ch;无输入,则返回 int21hcode ends end start5,实验结果及分析实验结果及分析主要有以下几点:按照以上的源程序,实验结果比较理想。用户可以通过输入一位或者两位字符来查询月份,而且比如:输入9与输入09的效果是一样的;对于输入的数等于0,大于12或者为其他字符,则在屏幕上显示erro

13、r,提示所输入内容是不合法。所以,本程序是正确的,功能符合要求,已经通过了实践的检验;需要说明的是,在本程序中对于输出相应的月份,是通过首先在数据段中定义一个变量,用于存放待显示的月份,这是一种间接的做法。其实,更为直接的做法为:在建立月份表时,可以直接在每个月份缩写后加0dh,0ah,$,即为jan , 0dh,0ah,$?,这样用户给定的月份数与其对应的英文缩写表格地址为:montab + (月份数-1) * 6。通过这种方法,可以不用通过字符串传递,就可实现月份的输出。但是,在定义中比较冗长,所以本程序没有采用这种方法;对于将ascii码转换成十进制数,本程序采用的是通过异或,成功实现转换,当然,也可以通过将源操作数减去30h得到相应的数,其效果是一样的。另外,在对于判断所输入数是否有效时,并没有从一开始就进行判断,而是在通过一系列操作,得到al中存放的数,比较其值与0和12的大小,对于超出其范围的,则是无效的数,立即跳转。由于程序设计得比较严谨,不会出现输入一个无效数而显示出月份的情况;从开头处可以看到,我使es与ds指向同一段,是因为在前面的定义中没有出现附加段的定义,后面的字符串的传递是在同一数据段中进行的。如果,字符串的传递不是在同一段中进行

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号