北京邮电大学微机原理与接口技术软件件实验报告_第1页
北京邮电大学微机原理与接口技术软件件实验报告_第2页
北京邮电大学微机原理与接口技术软件件实验报告_第3页
北京邮电大学微机原理与接口技术软件件实验报告_第4页
北京邮电大学微机原理与接口技术软件件实验报告_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

1、9京勺$大季K MG WMTr O* 21tl AOTTUC8MUM3IOM微机原理软件实验报告北京邮电大学微机原理与接口 技术软件件实验报告处友4周大号信息与通信工程学院微机原理软件实验报告班级:学号:姓名:序号:时间:20151162015-11-29实验二分支,循环程序设计一、实验目的:1.开始独立进行汇编语言程序设计;多处友勺像大母it img whfHautroAto nirc o/wuMCAncs微机原理软件实验报告2,掌握基本分支,循环程序设计;3.掌握最简单的DOS功能调用.二、实验内容:1 .安排一个数据区(数据段),内存有 若干个正数,负数和零.每类数的个数都不 超过9o2

2、 .编写一个程序统计数据区中正数,负 数和零的个数。3 .将统计结果在屏幕上显示。4 .(选做)统计出正奇数,正偶数,负奇 数,负偶数以及零的个数。三、预习题:1、十进制数0-9所对应的ASCII码是什么?如何将十进制数0 9在屏幕上显示出 来?答:十进制数09对应的二进制数为30H39Ho要屏显0-9的数码,只需将AH置成02H (DOS功能调用),然后将要显示的数码的ASCII码存进DL里,然后执行INT 21H就可以打印字符。或者,若这些数码是以字符串的格 式存储,则可以将AH置成09H,(最后以$, 字符结束,)然后将串首地址传给DS,然后执 行INT 21H就可以打印字符串。2、如何

3、检验一个数为正,为负或为零?你能举出多少种不同的方法?答:可以将待检验数与0比较(使用CMP 指令后用JZ指令判断ZF是否为零),也可以将 待检验数与80H相与,判断ZF的值。二是和0 相比是否相等,然后用该数(假设为8位)和 10000000相与,取出符号位判断,可区分正负。本次试验中我使用的方法是与0比较,所有判决 方法的核心思想要么是直接和0相比,要么使用 逻辑或移位运算,取出符号进行判断。四、实验过程:流程图:定义数据段,将所需判别数据存入数据段,定义输出字符CX是 否为0结束多北京勺像大母IOMG f mitr or KMn Ato HireCMUMCAnM代码:;数据段DATA S

4、EGMENTBUFF DW 4, 0, 37, 99, -9, -2, -87, 0, 76,11, 0, -34, -11, 0, 22;待判断数据COUNT EQU $-BUFF 占的字节数POSTDB ?ZERO DB ?;负数NEGTDB?POSIEVENDB0POSIODDDB?NEGTEVENDB0NEGTODDDB?;COUNT的值为BUFF所;正数;0;正偶数;正奇数;负偶数;负奇数POSICHAR DB Positive: $;用于打印 提示的字符串定义NEGTCHAR DB Negtive: $ZEROCHAR DB Zero: $EVENCHAR DB Even: $9北

5、玄勺像大号3g维机原理软件实验报告ODDCHAR DB Odd: $CR DB ODH, 0AH, $;回车换行的ASCIIDATA ENDSSTACK SEGMENT STACK STACK,;堆栈段DB100 DUP (?)STACK ENDSCODE SEGMENT;代码段ASSUME CS: CODE, DS: DATA, ES: DATA, SS: STACKBEGIN:PUSH DSXOR AX, AXPUSH AX;返1DOSMOV AX, DATAMOV DS, AX;给DS真正赋值MOV CX, COUNTSHR CX, 1 ;相当于除2,正好为BUFF中的 数据个数MOV

6、DX, 0;设定初值:DH及DL分别为等于、大于零的个数设定初值:AH为小于零的个;把BUFF中的第一MOV AH,0 数LEA BX, BUFF 个数存到BXAGAIN: CMP WORD PTR BX, 0 ;BUFF 中的 第一个数与。进行比较JGE POSITIVE ;大于等于0时转 POSITIVEINC AH ;统计小于零的个数ADD WORD PTR BX, 1AND NEGTEVEN, BX;和 1 与之后的结果加到负偶数中JMP NEXTPOSITIVE:JZZERO ;等于 0 时转 ZEROINC DL;统计大于零的个数ADD WORD PTR BX, 1AND POSI

7、EVEN, BX;和1与之后的结果 加到正偶数中,北玄却像大号MCSMA皿维机原理软件实验报告JMP NEXTZERO: INC DH;统计等于零的个数NEXT INC BX ;修改地址指针INC BXLOOP AGAIN为0;循环判断ex不MOV 存结果,正数MOV ZERO, DHMOV NEGT,AHPOST, DL;保;0;负数MOV AH, 09HMOV AH, POST;计算正MOV AL, POSIEVENSUB AH, AL奇数个数MOV POSIODD, AHMOV AH, NEGTMOV AL, NEGTEVENSUB AH, ALMOV NEGTODD, AH;计算负奇数

8、个数PRINT:打印正数提示符和正数(奇偶)个数MOV AH, 09HMOV DX, OFFSET POSICHARINT 21HMOV AH, 02HMOV DL, POSTADD DL, 30HINT 21HMOV AH, 09HMOV DX, OFFSET EVENCHARINT 21HMOV AH, 02HMOV DL, POSIEVENADD DL, 30HINT 21H-5北玄却像大号-皿rSMAQMi维机原理软件实验报告MOV DX, OFFSET ODDCHARINT 21HMOV AH, 02HMOV DL, POSIODDADD DL, 30HINT 21HMOV DX,

9、OFFSET CRMOV AH, 09HINT 21H;打印负数提示符和负数(奇偶)个数MOV AH, 09HMOV DX, OFFSET NEGTCHARINT 21HMOV AH, 02HMOV DL, NEGTADD DL, 30HINT 21HMOV AH, 09H微机原理软件实验报告多火友却像大号ic img whf/rtstTr o Kan ATnrco/wuMCAnonsMOV DX, OFFSET EVENCHARINT 21HMOV AH, 02HMOV DL, NEGTEVENADD DL, 30HINT 21HMOV AH, 09HMOV DX, OFFSET ODDCH

10、ARINT 21HMOV AH, 02HMOV DL, NEGTODDADD DL, 30HINT 21HMOV DX, OFFSET CRMOV AH, 09HINT 21HMOV AH, 09HMOV DX, OFFSET ZEROCHAR,义友勺像大号浏孝 M1HG whfHaiirrO1 24tl AtOHUCO/WUMCAnMINT 21HMOV AH, 02HMOV DL, ZEROADD DL, 30HINT 21HCODE ENDSEND BEGIN;代码段结束结果分析:数据区待统计的数据为:4,0,37,99厂9,2,87,0,76,11,0,34厂11,0,22实验结果如下

11、图所示:e:weiyuanshiyan bb.exe Positiue: 6 Even : 3 Odd.: 3 Negtiue: 5 Euen : 3 Odd.: 2 Zepo: 4本实验意在练习基本的分支、循环结构。关键 的点在于和0比较,区分正负和零,然后在正数 和负数中判断奇偶,这里巧妙地使用了和1与之 后结果加和到偶数中,最后利用统计的数的个数 减去偶数得奇数的方法。使得程序更加流畅和简 洁,思路也更清晰。,义友勺像大号微机原理软件实验报告五、实验总结汇编程序同高级语言一样,在写代码前都要对实验做分析,设计好思路,这样写代码时思路 才比较清晰,代码也比较容易写和查找错误。此 次实验主要

12、是循环和分支,也是用汇编语言编写 的第一个程序,让我熟悉了汇编语言的基本写 法,对很多理论课学到的知识都有了更深的了 解。了解了怎样利用判别条件在不同的分支中跳 转,循环的判别及循环过程。总而言之,此次实 验收获还是很多的,不仅加深了对这两种结构的 了解,提升了自己设计程序的能力,并且也提升 了自己排除bug的能力,进一步熟悉了第一个实 验的整个流程。实验三代码转换程序设计一、实验目的:1 .掌握几种最基本的代码转换方法;2 .运用子程序进行程序设计.二、实验内容:1 .从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来.2 .两个十进制数之间的分隔符,输入结 束标志自定,但

13、要在报告中说明.3 .对输入要有检错措施,以防止非法字 符输入,并有适当的提示.4 .将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.三、预习题:1 .如何将输入的两个字符(0 9)变为十 进制或二进制数?答:两字符减去0的ASCH码(30H)后,高位数乘以十加上低位数,即变为十进制数。2 .如何将选出的最小值(二进制或十进制)变为ASCII码再进行显示?答:本次实验是直接读入并存储数字的ASCII码,比较其大小,然后直接输出ASCII码。3 .你觉得采用二进制运算还是十进制运算更适合于这个实验?多处友勺像大母微机原理软件实验报告答:相比二进制,采用十进制运算更简洁,但需

14、要和ASCII码进行转换。可直接使用数字对 应的ASCH比较,分别比较十位和个位,最后直 接输出字符即可。四、实验过程:模块层次图:流程图:代码:DATA SEGMENT;数据段INPUT DB 100 DUP(?);置最小值的MINTMP DB 9-30H,9-30H初始值为99COUNT DB 0DIFERROR DB 0D;用于判断调用输入子程序是否有错WELCOME DB Tlease inputnumbersf/S, ;提示信息字符串OUTTIP DB Minimum is,北玄却像大号MTSQnA3g维机原理软件实验报告CR DB ODH9OAH;$f;回车换行ERROR1 DB

15、fERROR:Character is not valid! y$;各种错误输入提示ERROR2 DB ERROR:Number must contains two digits! f/$fERROR3 DB RRORzNumber is empty!,,与,ERROR4 DB fERROR:Need separate char!7$*DATA ENDSSTACK SEGMENT STACK STACK 堆栈段DB 100 DUP(?)STACK ENDSCODE;代码段SEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATA,火友却俊大号-2351A3皿维机

16、原理软件实验报告多火友却像大号MiMG whf/iimrcc*/wuMCAnMBEGIN PROC FARPUSH DS;MIDOSXOR AX,AXPUSH AXMOV AX,DAT A ;真正给DS赋值MOV DS,AXMOV DXQFFSET WELCOME; 调用欢迎提示CALL PRINT;调用子程序MOV DXQFFSET CR;回车换行CALL PRINTCALL MAIN;获取用户输入CMP IFERROR,O;判断输入过程是否 有错JNZ BACK;错误贝!直接返回DOSMOV DXQFFSET CR;回车换行CALL PRINTCALL FINDMIN;查找最小数MOV D

17、XQFFSET OUTTIP;调用输出提示CALL PRINTMOV AH,02HMOV DL,MINTMP;输出最小值的十ADD DL,30HINT 21HMOV AH,02HMOV DL,MINTMP1;输出最小值的个位ADD DL,30HINT 21HBEGIN ENDP;获取输入,出口参数为IFERROR,表示是 否有错MAIN PROCPUSH AX;保存现场PUSH BX,义友勺像大号微机原理软件实验报告PUSH CXPUSH DXPUSH DIMOV DI,0;数组偏移地址MOV CX.O;标识数字的位数GETLOOP:MOV AH,01H;从键盘读取一个字符INT 21HCMP

18、AL,0DH;和回车比较JEEXIT1;是回车则结束输入CMPCXQ;数字位数为空JE CMPSPACE0CMP CX,1;数字位数为1JE CMPSPACE1CMP CX,2;数字位数为2JE CMPSPACE2CMPSPACEO: CMP AL,20HJE GETLOOP;数字位数为0且输入空格则忽略,继续输入JMP ASCBIN;不是空格就读取该字符CMPSPACE1: CMP AL,20HJEERR2;数字位数为1且输入空格则位数不是两位数出错JMP ASCBIN;否则读取该字符CMPSPACE2: CMP AL,20HJNE ERR4;数字位数为2后,不输入空格则分隔符错误XOR C

19、X.CX;输入空格则清零重新计数JMP GETLOOPASCBIN:SUB AL,30H;化为二进制数字JL ERR1;小于则无效字符CMP AL,9;和9比较JG ERR1;大于9则是无效字符MOV INPUTDI,AL;保存输入的数INC COUNT;统计输入的数字个数,为 判断是否输入为两位数INC DI;向后移动数组INC CX,北玄却像大号MTSQnA3g维机原理软件实验报告JMP GETLOOPERR1: MOV IFERROR4;输出错误 1MOV DXQFFSET ERROR1CALL PRINTJMP RETURNERR2: MOV IFERROR4;输出错误 2MOV DX

20、QFFSET ERROR2CALL PRINTJMP RETURNERR3: MOV IFERROR4;输出错误 3MOV DXQFFSET ERROR3CALL PRINTJMP RETURNERR4: MOV IFERROR4;输出错误 4MOV DXQFFSET ERROR4CALL PRINTJMP RETURNEXIT1: MOV BL,COUNT;判断输入数的 个数是否为零CMP BL,0JE ERR3;输入数目为0则输出错误并 退出AND BL.01H;判断数字是否为两位数CMP BLQJNE ERR2;输入数字个数为奇数则出 错RETURN: POP DI;恢复现场POP DX

21、POP CXPOP BXPOP AXRETMAIN ENDP;回车换行输出字符串,入口参数为DXPRINT PROCPUSH AXMOV AH,09HINT 21HPOP AXRETPRINT ENDP;查找最小的数子程序FINDMIN PROCPUSH DI;保护现场PUSH AXPUSH CXMOV DIr2;数组下标MOV CL,COUNT;把数组长度移入CXMOV AL,CLCBWMOV CX,AXLOP:ADD DI,2CMPCXQI;是否已经比较完毕JE EXIT2;如果比较完毕所有数则退 出MOVAH,INPUTDI;否则接着比较,移 入十位数,北玄却像大号MTSQnA3g维机原

22、理软件实验报告MOV ALJNPUTDI+1;移入个位数CMP AH,MINTMP;比较十位数, MINTMP低地址为十位JA LOP ;如果MINTMP小,则直接比较下一个数JE HIGHEQU;如果十位数相 等,比较个位数,再否则十位大就直接存储STOMIN: MOV MINTMP,AHMOV MINTMP1,ALJMP LOPHIGHEQU: CMP AL,MINTMP1;比较 个位数JNB LOP;个位数比MINTMP大则跳到 下一个数JMP STOMIN;否则将当前数写入为MINTMPEXIT2:POP CXPOP AX微机原理软件实验报告,义友勺像大号 K1MGKJ4W AMTnr

23、CC*/WUMCAnMPOP DIRETFINDMIN ENDPCODE ENDSEND BEGIN结果分析:e : we iyuanXstiiyanc c.exePlease input numbers:ERROR:Number is empty?e 二 XweiyuanXshiyan cc.exePlease input numbers:1 ERROR:Number must contains two digits?e : we iyuanshiyanc c.exePlease input numhers:$ ERROR : Chatac ter is not valid*e 二 Swe

24、iyuan Ss 1)iyancc .exePlease input numbers:123ERR0R=Need separate charte = v/e iyuan shisFanc c -exePlease input numbers:01 23 66 09 82 56Minimum is :01e : iue iyuanshipanc 实验以空格为分隔符,空格的个数不限制,以回车为输入结束标志符。对输入的数字进行了 位数和范围的严格限制,即必须是两位数字,如 果数字小于10,需要补齐零。第一次不输入数字,直接回车后,提示错误,输 入不能为空;,义友勺像大号微机原理软件实验报告第二输入数

25、据1,提示错误,要求输入必需为 2位数字;第三次输入字符$,提示错误,要求输入为数字; 第四次输入123,提示错误,所输入数据两位后 必需有空隔;正确输入待比较数据:01 23 66 09 82 56,找 到最小数为0L结果正确。五、实验总结这次实验主要是如何分析、如何调用子程序, 用子程序使得整个代码思路比较清晰,代码也不 容易出错,修改bug的时候比较好查找。在实验中,以数组方式进行存储数据,每两个BYTE存储一个输入的两位数,存储格式为字符ASCH码,比较数字大小时,采用分别比较高位ASCII码和低位ASCII码的方式,从而不用在输入时将字符存储为数字,输出时也不用再进行逆 转换,程序效

26、率大为提高。实验中遇到了很多问题,在同学的帮助下,解 决了很多问题,了解了主函数和子函数的调用,每次遇到bug时,要是直接看代码找不到问题所 在,就用debug查找,进一步熟悉了 debug的使用,也从DS、IP、CS、AX BX等寄存器的变化更好的理解了代码,更好的理解了汇编的过程, 都是不小的进步,对以后的实验也有帮助。实验四子程序设计一、实验目的:1 .进一步掌握子程序设计方法;2 .进一步掌握基本的DOS功能调用.二、实验内容:3 .统计检查每个学生的名次.4 .将统计结果在屏幕上显示.能考虑美观.5 .输入要有检错手段.三、预习题:,北玄却像大号MCSMA皿维机原理软件实验报告1 .

27、如何确定一个学生在这门科目中的名 次?答:有两种基本思路:一是抽取每个学生的成绩和其他所有学生的成绩进行比较,然后统 计比其分数高的学生,得出该学生的名次;二是把学生成绩存入连续内存区域,即数组方式,取得每个学生的成绩偏移量,即成绩偏移地址。然后比较偏移地址所指的成绩的大小,交换数据区的值的位置,完成排序。2 .你觉得输入结束后,采用什么方法进行 比较以得到学生的名次最为简单?答:采用冒泡排序法可获得较好的时间和空间性能。冒泡法平均时间性能0(用)。相比于直接比较,性能有所改善。但相对于快速排序、归并排序等优化的算法的时间复杂度0(N*log?N)还不够好。但后两者使用汇编实现代码的复杂度和编

28、程要求要高。考虑到学生人数比较少,使用冒泡法是比较简洁的,时间性能是可以接受的。3 .准备好模块层次图.答:如下图所示实验过程中的模块层次图4 .给出输出显示的形式。答:以列表显示输出,依次为排名、学号、成绩。四、实验过程:模块层次图:流程图:多处友勺像大母微机原理软件实验报告代码:DATA SEGMENT ;数据段ID DB 400 DUP(?);存储学号,每个16固定个BYTE,存储为字符串MARK DB 20 DUP(?);存储分数,每个 1BYTE,存储为二进制数RANK DB 20 DUP(?);存储排名,每个 1BYTE,存储为二进制数RANKTMP DB 20 DUP(?);排序

29、时指针临时 区MTMP DB?;记录成绩的临时区COUNTB DB ?;记录总的学生的个数,存为 8位COUNTW DW ?;记录总的学生个数,存为 16位CHEOK DB ?;输入检查标志位ERROR DB ?;记录错误号TMP DB 2 DUP(?);开辟两个内存临时存储 区,用作判断和计数CRDBODH,OAH,$;回车换行TAB DB 09H,09H,$;输出 TAB 键 ERRO DB * Input cannot be empty! ERR2 DB Character is invalid!,与 ERR4 DB Mark is invalid!,a ERR6 DB Input is

30、 invalid!,与 ERRLIST DW ERR0,ERR2,ERR4,ERR6 TIPO DB fPlease re-input:,北玄却像大号MTSQnA3g维机原理软件实验报告TIPI DB Tlease input number of students:$TIP2 DB Tlease input ID and MARK:,$PRTIPDBRESULTPRINFODB,nr,09H,09HMARK09H,09H;RANK$PRPRE1 DB ID : ?$PRPRE2 DB fMARK:BUFF DB 16;定义输入缓冲区,最长的字符 长度PRES DB ?;存储实际输入了多少个字符

31、CHAR DB 16 DUP(?);实际可存储有效字符 16个DATA ENDSCODE SEGMENT;代码段;打印提示字信息的宏,形参为PARAPRINTTIP MACRO PARAPUSH AXPUSH DXMOV AH,09HMOV DX,OFFSET PARAINT 21HPOP DXPOP AXENDM;打印单个字符的宏,形参为ACHARPRINTCHAR MACRO ACHARPUSH AXPUSH DXMOV AH,02HMOV DL,ACHARINT 21HPOP DXPOP AXENDMBEGIN PROC FAR色北衣勺像大号MTSQnA3g维机原理软件实验报告ASSUM

32、ECS:C ODE,DS: D AT A,ES :DATAMOV AX,DATAMOV DS,AXMOV ES,AXCALL GETNUMBER;获得学生的人数CALL GETINFO;获得学号分数的输入CALL SORT;执行排序活动名次CALL PRINT;把名次结果打印出来BACK: MOV AX,4C00H;返回 DOSINT 21HMAIN ENDP;获得将要输入的学生的人数信息的子程序 ;每班的学生定义不超过100人GETNUMBER PROC NEARPUSH AXPUSH BX HE:PRINTTIP TIPIGREP:CALL GETIN;获取一个输入缓冲微机原理软件实验报告

33、净北友却俊大号MOV CHEOK,OCALL CHECKCMP CHEOK,0JE GRETURNMOV ERROR*CALL PRINTERRPRINTTIP TIPOPRINTTIP CRJMP GREPERRHERE: PRINTTIP CRMOV ERROR,6CALL PRINTERRPRINTTIP TIPOJMP GREPGRETURN: CALL CHANGEMOV AL,MTMPCMP AL,0JE ERRHERE,北玄却像大号MTSQnA3g维机原理软件实验报告MOV COUNTB,AL;写入人数CBWMOV COUNTW,AXPRINTTIP CRPOP BXPOP AX

34、RETGETNUMBER ENDP;循环直到输入人数满时终止,获得输入的字符 串GETINFO PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIPRINTTIP TIP2MOV TMP,0;记录是学号还是分数XOR BX,BX;记录每个ID的偏移量XOR AX,AX;记录学生数目MORE:PRINTTIP CRCMP countbalJNZ HERE1JMPRETURN;计数器为0则返回父程序HERE!: CMP TMP,0JE PR1CMP TMP,1JE PR2PR1:PRINTTIP PRPRE1JMP HERE2PR2:PRINTT

35、IP PRPRE2HERE2:CALL GETIN;否则接受输入CALL CHECK;检查输入是否是数字且不 为空CMP CHEOK,0JNE CHEFAIL;不为零则不合法,需要重 新输入CMP TMP,0JE ISID;输入的是学号CMP TMP,1 ;JE ISMARK ;输入的是分数CHEFAIL:PRINTTIP TIPOPRINTTIP CRMOV CHEOKO;重新把返回判断位置零JMP MORE;写入学号,固定为16个字符ISID:MOV DL,PRES;抽取需要写入字符的个 数XOR DH.DHMOV CXQXMOV SI,CXINC CX,北玄却像大号MTSQnA3g维机原

36、理软件实验报告MOV CHARSI;$,;把最后一个字符之后 的位置填充为$;开始写入IDMOV TMP,1;表示下一个是分数CLDMOV SI,OFFSET CHARMOV DI,OFFSET IDADD DI.BXREP MOVSB ;写入 ID;写完则为接受下一个输入BUFF作准备ADD BX,16; ID的偏移地址向后挪动固定 的 16BYTEJMP MORE;跳回继续输入下一个BUFF ;是学号,检查、转换、写入保存ISMARK:CALL CHANGECMP CHEOK,0JE WRITEMARKMOV ERROR,4JMP CHEFAILWRITEMARK:PUSH BXMOV B

37、L,MTMPMOV DI,AXMOV MARKDI,BL;实际写入成绩POP BXMOV TMP,0;计数清理,表明下一个输 入为学号INC AX;已接受的学生个数加一JMP MORERETURN:POP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETGETINFO ENDP;获得一次BUFF输入子程序;入口参数为BUFF的偏移地址,出口参数为BUFF中的字符串GETIN PROC NEARPUSH AXPUSH DXPUSH DIMOV DX,OFFSET BUFFMOV AH,0AHINT 21HPOP DIPOP DXPOP AXRETGETIN ENDP;执行输

38、入字符是否是数字的合法性检查CHECK PROC NEARPUSH DI微机原理软件实验报告多火友却像大号PUSH CXPUSH AXXOR DI,DI;记录CHAR读取的偏移量MOV AL,PRES;读取输入的BUFF中的 字符数CBWMOV CX,AXCMPCXQ;判断是否输入BUFF为空JE ISEMPTY;为空则重新输入AGAIN: CMP CX,DIJE RETURNCHECKMOV AH,CHARDICMP AH,30H;JL INVALID;小于则无效字符CMP AH,39H;JG INVALID;大于则是无效字符INC DIJMP AGAIN,北玄却像大号MTSQnA3g维机原

39、理软件实验报告ISEMPTY: MOV ERROR,。;输入为空的处理代码PRINTTIP CRCALL PRINTERRPRINTTIP CRMOV CHEOK4JMP RETURNCHECKINVALID:MOV ERROR2;输入不合法的处理代码PRINTTIP CRCALL PRINTERRPRINTTIP CRMOV CHEOK.lRETURNCHECK:POP AXPOP CXPOP DIRETCHECK ENDP 攻b理成绩输入的子程序;检查输入成绩是否在o-ioo之间的子程序并转 化为二进制数CHANGE PROC NEAR;把3位数字转换为二进制数PUSH AXPUSH BX

40、PUSH CXMOV CL,PRESCMP CL,3JA MINVALID;四位数或以上,溢出JE THRDIG;三位数CMP CL,2JE TWODIG;两位数CMP CL,1JE ONEDIG; 一位数THRDIG:;判断是否是100,是则直接在临时成绩区写入100MOV BL,CHAR0;百位SUB BL,30HCMP BL,1JNE MINVALIDMOV BL,CHAR1;十位SUB BL,30HCMP BL,0JNE MINVALIDMOV BL,CHAR2;个位SUB BL,30HCMP BL,0JNE MINVALIDMOV MTMP400 ;写入 100JMP CRETURN

41、TWODIG:;当是两位数时判断十位是否是0,不是则进行 转换,然后写入临时成绩中MOV BL,CHAR0;十位SUB BL,30HCMP BL,0JE MINVALIDMOV AL,10MUL BL;成10取得十位数MOV BL,CHAR1;个位SUB BL,30HADD AL,BL;因为小于100所以有效数 在AL中,;可以直接加个位数得结果MOV MTMP,AL;写入转换后的数字JMP CRETURNONEDIG:;一位数时直接写入临时成绩区即可MOV BL,CHAR0;个位SUB BL,30HMOV MTMP,BLJMP CRETURNMINVALID:MOV ERROR,4微机原理软

42、件实验报告多火友却像大号CALL PRINTERRMOV CHEOK,1CRETURN:POP CXPOP BXPOP AXRETCHANGE ENDP;打印错误信息子程序PRINTERR PROC NEARPUSH AXPUSH DXPUSH BXMOV AL,ERRORCBWMOV BX,AXMOV AH,09HMOV DX,ERRLISTBXINT 21H,北玄却像大号MTSQnA3g维机原理软件实验报告POP BXPOP DXPOP AXRETPRINTERR ENDP;排序子程序SORT PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH

43、 DI;写入偏移量作为分数的指针MOV AL,COUNTB;读取学生数目XOR BX,BX; BX作为寻址计数器;顺序写入成绩偏移量SLOP: DEC ALMOV RANKTMPBX,AL微机原理软件实验报告多处友勺像大母it img whfHautro Ato nirc o/wuMCAncsINC BXCMP AL,0JNESLOP;排序名次,冒泡排序法MOV CX,COUNTW; CX 记录了总的学 生人数DEC CXJZ WRRAK;如果只有一个学生则直接写入名次,否则排序异常LOP1: XORDLDI;从第一个名次开始LOP2:MOV AL,RANKTMPDI;取出地址指 针,即成绩偏

44、移量XOR AH,AHMOV SI,AXMOV DL,MARKSI;取出成绩 1MOV AL,RANKTMPDI+1XOR AH,AHMOV SI,AX,北玄却像大号MTSQnA3g维机原理软件实验报告MOV DH,MARKSI;同理取出成绩2CMP DL,DHJGE NEXTCMPMOV AH,RANKTMPDI;交换分数指 针XCHG AH9RANKTMPDI+1MOV RANKTMPDI,AHNEXTCMP: INC DICMP DI,CXJNE LOP2LOOP LOP1;写入最后的名次WRRAK: XOR SI,SIMOV CX,COUNTWMOV BL,1;保存名次LOPSAVE:

45、 CMP SI,CXJE FINISHMOV AL,RANKTMPSI;提取该名次学 生的地址指针XOR AH,AHMOV DI,AXMOV RANKDI,BL;写入该学生的名次INC BLINC SIJMP LOPSAVEFINISH:POP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETSORT ENDP;打印输入成绩和名次子程序PRINT PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPRINTTIP CRPRINTTIP PRTIP;打印提示信息PRINTTIP CRPRINTTIP PRINFOPRINTTIP CRMOV CX,COUNTW; CX用于保存学生人 数XOR SI,SI; SI用于指明当前处理的学生的 序号XOR BX,BX; BX保存当前输入的学号偏移 量,每次增16NEXPRINT:MOV TMP1,O;对打印名次置标志位,表 明没有打印名次CMP SI.CXJNE PRINTIDJMPPRETPRINTID:;打印学号,直接字符串打印,因结尾写入 了$MOV AH,09HMOV DX,OFFSET IDADD DX,BXINT 21HPRINTTIP TABPRINTMARK:;打印分数,分为100、10-99、0-9三中情况 打印MOV

温馨提示

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

评论

0/150

提交评论