




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理软件实验报告学院:信息与通信工程学院班级: 班内序号: 姓名: 学号: 实验二 分支,循环程序设计一.实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的 DOS 功能调用.二.实验内容: 1.安排一个数据区(数据段),内存有若干个正数,负数和零.每类数的个数都不超过 9. 2.编写一个程序统计数据区中正数,负数和零的个数. 3.将统计结果在屏幕上显示.三.预习题: 1.十进制数 0 - 9 所对应的 ASCII 码是什么? 如何将十进制数 0 - 9 在屏幕上显示出来? 答:09对应的ASCII 码是30H39H;在屏幕上显示09,需要将对应字符的ASCII 码赋给DL,并进行DOS的2号功能调用,09的ASCII 码正是其本身的数值加上30H。2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:用CMP命令和0比较,如果ZF为1,则该数为零;再用该数和8000H相与,取出符号位判断,可区分正负;用CMP命令和0比较,结果不小于0时用JGE命令进行跳转,否则为负数;用JGE命令跳转后,如果为0再用JZ命令跳转,否则为正数。四.选作题:统计出正奇数,正偶数,负奇数,负偶数以及零的个数.五.实验过程1.流程图2.源代码DATA SEGMENT NUM DW 0,0,1,2,3,4,5,101,-6,-7,-8,-8,-9 ;有2个0,6 个正数,5 个负数 N DW ($-NUM)/2 ;该组数据的个数 Z DB 0 ;0 的个数 P DB 0 ;正数的个数 PO DB 0 ;正奇数的个数 PE DB 0 ;正偶数的个数 M DB 0 ;负数的个数 MO DB 0 ;负奇数的个数 ME DB 0 ;负偶数的个数STR0 DB number of zeros : $ ;STR0-4为用于显示的字符串STR1 DB 0DH, 0AH, number of positive numbers : $ STR2 DB 0DH, 0AH, number of negative numbers : $STR3 DB 0DH, 0AH, odd : $STR4 DB even : $ DATA ENDSSTACK SEGMENT STACK DW 100 DUP(?) STACK ENDSCODE SEGMENT ASSUME DS:DATA, SS:STACK, CS:CODE START: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX ;初始化 DS、SS LEA BX, NUM ;将 NUM 中第一个数字的地址送入 BX MOV CX, N ;将数据个数送入 CX AGAIN: MOV AX, BX ;取出 NUM 中的第一个数字 CMP AX, 0 ;和0比较 JGE PLU ;大于等于0时转PLU INC M ;负数的个数加1 TEST AX, 1 ;检测该数据最低位是否为1,即是否为负奇数 JNZ MINODD ;ZF为0时转MINODD,该数为负奇数 INC ME ;负偶数个数加1 JMP NEXTMINODD: INC MO ;负奇数个数加1 JMP NEXT PLU: JZ ZER ;等于0时转ZER INC P ;正数个数加1 TEST AX, 1 ;检测该数据最低位是否为1,即是否为正奇数 JNZ PLUODD ;ZF为0时转PLUODD,该数为正奇数 INC PE ;正偶数个数加1 JMP NEXTPLUODD: INC PO ;正奇数个数加1 JMP NEXTZER: INC Z ;零的个数加1NEXT: ADD BX,2 ;偏移地址加2,指向下一数字 LOOP AGAIN ;CX自减,CX0时继续循环DISPLAY: ;在屏幕上显示统计结果MOV AH, 09H ;9号功能调用,显示字符串 MOV DX, OFFSET STR0 ;将字符串的首地址的偏移地址送到DX,DS已;是其段基址 INT 21H MOV AH, 02H ;2号功能调用,显示单个字符 MOV DL, Z ;将零的个数送到DL ADD DL, 30H ;09数字本身加上30H即为其ASCII 码 INT 21H MOV AH, 09H ;正数部分统计结果显示,原理同上 MOV DX, OFFSET STR1 INT 21H MOV AH, 02H MOV DL, P ADD DL, 30H INT 21H MOV AH, 09H MOV DX, OFFSET STR3 INT 21H MOV AH, 02H MOV DL, PO ADD DL, 30H INT 21H MOV AH, 09H MOV DX, OFFSET STR4 INT 21H MOV AH, 02H MOV DL, PE ADD DL, 30H INT 21H MOV AH, 09H ;负数部分统计结果显示,原理同上 MOV DX, OFFSET STR2 INT 21H MOV AH, 02H MOV DL, M ADD DL, 30H INT 21H MOV AH, 09H MOV DX, OFFSET STR3 INT 21H MOV AH, 02H MOV DL, MO ADD DL, 30H INT 21H MOV AH, 09H MOV DX, OFFSET STR4 INT 21H MOV AH, 02H MOV DL, ME ADD DL, 30H INT 21H MOV AX, 4C00H ;返回DOS INT 21H CODE ENDS END START 3.运行结果数据为:0,0,1,2,3,4,5,101,-6,-7,-8,-8,-9运行结果:zero表示零的个数,为2;positive number表示正数的个数,为6,其中奇数odd为4个,偶数even为2个;negative number表示负数的个数,为5,其中奇数odd为2个,偶数even为3个。与数据对比,可知输出结果正确。实验三 代码转换程序设计一.实验目的: 1.掌握几种最基本的代码转换方法; 2.运用子程序进行程序设计.二.实验内容: 1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来. 2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明. 3.对输入要有检错措施,以防止非法字符输入,并有适当的提示. 4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.三.预习题: 1.如何将输入的两个字符(0 - 9)变为十进制或二进制数? 答:输入的字符是ASCII码,将其ASCII码减去30H后即为其实际数值;若需将两个字符变为一个两位十进制或二进制数,可将第一个字符ASCII码减去30H后的数乘以10,再和第二个字符ASCII码减去30H后的数相加。 2.如何将选出的最小值(二进制或十进制)变为 ASCII 码再进行显示? 答:将最小值除以10,得到的商为其十位上的数字,余数为其个位上的数字,分别加上30H即为其对应的ASCII码,再进行DOS的2号功能调用进行显示。 3.你觉得采用二进制运算还是十进制运算更适合于这个实验? 答:二进制,因为机器语言就是二进制,使用起来会更方便。四.实验过程1.流程图2.模块划分3.源代码DATA SEGMENTBUFFER DB 100 DB 0 DB 100 DUP (0)MIN DB 99WARNING DB input error ,please input again,0DH,0AH,$ ;错误提示RESULT DB the minimum is $DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP (?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START:MOV AX,DATA MOV DS,AX CALL INPUT ;调用输入字符串子程序 CALL CHECK ;调用检错子程序 CMP AL,0 ;根据标志AL判断是否有非法输入 JZ ERROR ;有非法输入时跳转 CALL COMP ;调用比较子程序 CMP AL,0 JZ ERROR CALL OUTPUT ;调用显示子程序 MOV AX,4C00H INT 21HERROR:MOV DX,OFFSET WARNING ;错误提示 MOV AH,09H INT 21H JMP START;. INPUT PROC NEAR ;输入子程序 MOV DX,SEG BUFFER MOV DS,DX MOV DX,OFFSET BUFFER MOV AH,0AH INT 21H MOV AL,BUFFER+1 ;将输入字符数赋给AL ADD AL,2 ;加上BUFFER开头两个字节 MOV AH,0 MOV SI,AX MOV BUFFERSI,0DH ;为输入字符串的结尾加上0DH、0AH和$ MOV BUFFERSI+1,0AH MOV BUFFERSI+2,$ LEA DX,BUFFER+2 MOV AH,9 INT 21H RETINPUT ENDP;. CHECK PROC NEAR ;检错子程序,只检验是否输入09和分隔符之外的字符 MOV BX,OFFSET BUFFER MOV CL,BUFFER+1 ;实际输入字符数赋给CL MOV CH,0LOOP1:MOV AL,BX+2 ;判断第一个字符 CMP AL,30H ;不是0-9的字符时跳转到FG1 JB FG1 CMP AL,39H JA FG1NEXT1:ADD BX,1 LOOP LOOP1 ;循环CX次,CX即字符个数 RETFG1: CMP AL,20H ;再判断是否空格 JZ NEXT1 ;是空格跳转到NEXT1,BX加1进行LOOP1循环 MOV AL,0 ;也不是空格时置AL为0,返回 RET CHECK ENDP;.COMP PROC NEAR ;比较子程序,同时判断输入是否全部为两位数 MOV BX,OFFSET BUFFERLOOP2: MOV AL,BX+2 ;从第一个字符开始判断 CMP AL,20H ;判断是否为空格 JZ FG2 CMP AL,0DH ;判断是否为结束符 JZ END;.转换为二进制. SUB AL,30H ;ASCII码减去30H即为其实际数值 ADD AL,AL ;变为2倍 MOV CH,AL MOV CL,2 SHL AL,CL ;左移2位,即变为4倍 ADD AL,CH ;24+2倍,即为原来的10倍 MOV AH,BX+3 ;取个位数 CMP AH,20H ;判断输入是否是数字 JZ FG2 SUB AH,30H ADD AL,AH ;个位数与十位数的10倍相加,即转换为二进制;.比较. CMP AL,MIN ;MIN初值为99 JGE NEXT2 ;不小于最小值时跳转 MOV MIN,AL ;小于最小值时,替换掉最小值;.NEXT2: ADD BX,2 MOV AL,BX+2 ;判断是否有分隔符空格 CMP AL,20H JNZ FG2 INC BX JMP LOOP2 ;输入合法时进行循环 RETFG2: CMP AL,0DH JZ END MOV AL,0END: RETCOMP ENDP;.OUTPUT PROC NEAR ;输出显示子程序 MOV AH,09H MOV DX,SEG RESULT MOV DS,DX MOV DX,OFFSET RESULT INT 21H;.将二进制数变为ASCII码进行显示. MOV AL,MIN CBW MOV BL,10 DIV BL ;除以10得到十位的数字 MOV BH,AH ADD AL,30H ;加30H即为ASCII码 MOV AH,02H MOV DL,AL INT 21H MOV AL,BH ADD AL,30H MOV AH,02H MOV DL,AL INT 21H RETOUTPUT ENDPCODE ENDS END START 4.运行结果分隔符为空格键,结束符为回车键实验四 子程序设计一.实验目的: 1.进一步掌握子程序设计方法; 2.进一步掌握基本的 DOS 功能调用.二.实验内容: 1.从键盘上输入某班学生的某科目成绩.输入按学生的学号由小到大的顺序输入. 2.统计检查每个学生的名次. 3.将统计结果在屏幕上显示. 4.为便于观察,输入学生数目不宜太多,以不超过一屏为宜.输出应便于阅读.尽可 能考虑美观. 5.输入要有检错手段.三.预习题: 1.如何确定一个学生在这门科目中的名次? 答:可以将该同学的成绩与其他同学进行比较,统计比他成绩高的同学的人数,即可得其名次;也可将所有同学按成绩进行排序,从而确定其名次。 2.你觉得输入结束后,采用什么方法进行比较以得到学生的名次最为简单? 将所有学生按照成绩从高到低进行排序,然后可以得到学生的名次,排序算法有很多种,考虑到数据量较小等因素,本实验采用简单选择排序,即选择成绩最高的一位同学与第一位同学进行交换,然后从第二位同学开始,选择成绩最高的一位与第二位交换,依次类推进行排序。 3.准备好模块层次图. 4.给出输出显示的形式. ID SCORE RANK 5 :0 1 1 90 2 :0表示100,分数用空格隔开,回车表示结束四.实验过程1.流程图2.源代码DATA SEGMENTBUFFER DB 100 DB 0 DB 100 DUP (0)COUNT1 DB 1COUNT2 DB 1COUNT3 DB 1STRING1 DB ID SCORE RANK,0DH,0AH,$ ;用于显示的字符串STRING2 DB ,$TIPS DB Please input the scores of students:( use :0 instead of 100 ),0DH,0AH,$WARNING DB input error ,0DH,0AH,$RANK DB 100 DUP (?) ;排名SCORE DB 100 DUP (?) ;分数ID DB 100 DUP (?) ;学号DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP (?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: MOV AX,DATA MOV DS,AX MOV AH,09H ;输入提示 MOV DX,SEG TIPS MOV DS,DX MOV DX,OFFSET TIPS INT 21H CALL INPUT ;调用输入子程序 CALL DA ;调用用于换行的子程序 CALL CHECK ;调用检错子程序 CMP AL,0 ;判断是否有非法输入 JZ ERROR CALL TRANSF ;调用ASCII码转为二进制数的子程序 CMP AL,0 ;判断是否有非法输入 JZ ERROR CALL SORT ;调用排序子程序 CALL DA CALL DISP ;调用显示子程序 MOV AX,4C00H INT 21HERROR:MOV DX,OFFSET WARNING ;错误提示 MOV AH,09H INT 21H JMP START;. INPUT PROC ;输入子程序 MOV DX,SEG BUFFER MOV DS,DX MOV DX,OFFSET BUFFER MOV AH,0AH INT 21H RETINPUT ENDP ;. DA PROC ;用于换行的子程序 MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H RETDA ENDP;40;.CHECK PROC NEAR ;检错子程序,检测是否有09、:、空格、回车以外的;字符输入,:和0组合用来代替100 MOV BX,OFFSET BUFFER MOV CL,BUFFER+1 ;实际输入字符数赋给CL MOV CH,0LOOP1:MOV AL,BX+2 ;判断第一个字符 CMP AL,30H ;不是09及:的字符时跳转到FG1 JB FG1 CMP AL,40H JA FG1NEXT1:ADD BX,1 LOOP LOOP1 ;循环CX次,CX即字符个数 RETFG1: CMP AL,20H ;再判断是否空格 JZ NEXT1 ;是空格跳转到NEXT1,BX加1进行LOOP1循环 MOV AL,0 ;也不是空格时置AL为0,返回 RET CHECK ENDP;.TRANSF PROC ;用于ASCII码转换为二进制数的子程序,同时判断输入;是否规范 MOV BX,OFFSET BUFFER MOV DI,OFFSET SCORE MOV SI,OFFSET ID MOV CH,0A1: MOV AL,BX+2 CMP AL,20H ;判断是否为分隔符 JZ FG2 ;60 CMP AL,0DH ;判断是否为结束符 JZ E1;. ASCII码变为二进制 SUB AL,30H ;原理同实验三 ADD AL,AL MOV DH,AL MOV CL,2 SHL AL,CL ADD AL,DH MOV AH,BX+3 SUB AH,30H ADD AL,AH;. MOV DI,AL ;将得到的二进制数保存到SCORE中 INC CH MOV SI,CH ;添加学号到ID中 ADD BX,2 MOV AL,BX+2 ;判断是否有分隔符空格 CMP AL,20H JNZ FG2 INC BX INC DI INC SI JMP A1 ;输入合法时进行循环 RETFG2: CMP AL,0DH ;判断是否结束 JZ E1 MOV AL,0 ;输出错误标志E1: RETTRANSF ENDP;.SORT PROC ;排序子程序;.显示学生人数. MOV AL,CH ADD AL,30H MOV AH,02H MOV DL,AL INT 21H;.简单选择排序. LEA SI,SCORE LEA DI,SCORE LEA BP,ID LEA BX,SCORE+1;100 SUB BP,SI B: MOV AL,COUNT2 MOV COUNT1,ALS: MOV AL,SI ;SI应指向最大的数,初始化为第一个数,比较时有数大于它要;进行改变 MOV AH,BX CMP AH,AL JBE C ;小于等于进行跳转,不改变SI,继续比较 MOV SI,BX ;大于时要更新SI INC BX INC COUNT1 ;用于计数,判断是否比较结束 CMP COUNT1,CH JZ JIAOHUAN ;一轮筛选结束后要交换最大值和乱序区最前面的数 JNZ SC: INC BX INC COUNT1 CMP COUNT1,CH JZ JIAOHUAN JMP S JIAOHUAN: MOV AL,SI ;SI指向最大的数,DI指向乱序区的第一个数,进行交换 MOV AH,DI MOV DI,AL MOV SI,AH MOV AL,DS:BP+SI ;学号同步进行交换 MOV AH,DS:BP+DI MOV DS:BP+DI,AL MOV DS:BP+SI,AH INC DI ;有序区数目加1 INC COUNT2 ;计数,用于判断N-1轮比较是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数据分析师高级面试题集
- 桡尺骨骨折课件
- 2025年图书馆特色资源建设方案策划师招聘面试题解
- 2025年双语数学教学职位应聘面试攻略模拟题及答案解析民办学校
- 2025年区域经济与可持续发展考试试题及答案
- 2025年电力行业安全监理员招聘安全知识预测试题集
- 2026届湖南省邵阳市邵阳县第一中学化学高三上期末教学质量检测试题含解析
- 2026届河南省扶沟高中化学高二第一学期期末考试模拟试题含答案
- 2025年法律行业人工智能应用考察试卷及解析答案
- 2025年注册验船师资格考试(A级船舶检验专业综合能力)综合试题及答案一
- 家政服务协议书范本
- 中小学生研学旅行投标方案(技术方案)
- 成人手术后疼痛评估与护理-中华护理学会团体标准2023 2
- NB-T 10435-2020 电动汽车快速更换电池箱锁止机构通.用技术要求
- 学历认证授权委托书样本
- 中医医疗技术手册2013普及版汇编
- (高清版)JTGT 3360-01-2018 公路桥梁抗风设计规范
- gcp机构办公室工作计划
- 旅游学概论(郭胜 第五版) 课件 第1、2章 旅游学概述、旅游的产生与发展
- 1.1.3茶云纹叶枯病识别与防治
- MT-T 1199-2023 煤矿用防爆柴油机无轨胶轮运输车辆安全技术条件
评论
0/150
提交评论