收藏 分享(赏)

2011211123班北邮微原软件实验报告.docx

上传人:HR专家 文档编号:4721943 上传时间:2019-01-08 格式:DOCX 页数:35 大小:495.24KB
下载 相关 举报
2011211123班北邮微原软件实验报告.docx_第1页
第1页 / 共35页
2011211123班北邮微原软件实验报告.docx_第2页
第2页 / 共35页
2011211123班北邮微原软件实验报告.docx_第3页
第3页 / 共35页
2011211123班北邮微原软件实验报告.docx_第4页
第4页 / 共35页
2011211123班北邮微原软件实验报告.docx_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、信息与通信工程学院微机原理软件实验报告班 级:2011211123姓 名:学 号:日 期:2013.11.28实验二分支、循环程序设计一、实验目的1. 开始独立进行汇编语言程序设计;2. 掌握基本分支,循环程序设计;3. 掌握最简单的 DOS 功能调用。二、实验内容1. 安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过 9。2. 编写一个程序统计数据区中正数,负数和零的个数。3. 将统计结果在屏幕上显示。4. (扩展题)统计出正奇数、正偶数,负奇数、负偶数以及零的个数。三、预习思考1. 十进制数 0 9 所对应的 ASCII 码是什么?如何将十进制数 0 9 在屏幕上显示出来?

2、答:09 分别对应 ASCII 码的 30H39H。将十进制数 09 显示在屏幕上,要用二进制数 09 分别加上 30H。2. 如何检验一个数为正,为负或为零?你能举出多少种不同的方法?答:和 0 相比是否相等,然后用该数和 10000000 相与,取出符号位判断,可区分正负。还可以直接用 CMP 命令和 0 比较,然后用 JZ 等命令进行判断。四、实验过程1、流程图定义各段并初始化计数器值大于数列长度是开始2、源代码DATA SEGMENTARRAY DB 8,0,0,5,8,-1,-2,-3, 0,1,4,3LENG EQU $-ARRAY ; 数组长度POSI DB ? ; 正数个数NE

3、GT DB ? ; 负数个数ZERO DB ? ; 零的个数POSIEVEN DB ? ;正偶数的个数POSIODD DB ? ; 正奇数的个数NEGTEVEN DB ? ; 负偶数的个数NEGTODD DB ? ; 负奇数的个数POSICHAR DB Pos: $NEGTCHAR DB Neg: $ZEROCHAR DB Zero: $EVENCHAR DB ou: $ODDCHAR DB ji: $CR DB 0DH,0AH,$ ; 回车换行DATA ENDS读取当前指针指向的数,指针+1该数和 0 比较负数个数+1和 1 与,结果加到正偶数 0 的个数+1显示结果=0否0和 1 与,结果

4、加到负偶数统计结果结束CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET ARRAY-1MOV CL,LENG ;数组长度MOV AL,0LOP: CMP CL,0 ; 循环控制条件JE CALC INC SIDEC CLMOV BL,SI ;基址加变址寻址CMP BL,AL ; 和零比较JG ISPOSI ; 是正数JE ISZERO ; 是零JL ISNEGT ; 是负数ISPOSI: INC POSI; 正数个数加一AND BX,1ADD POSIEVEN,BL ; 和 1 与之后的 结果加

5、到正偶数中JMP LOPISZERO: INC ZEROJMP LOPISNEGT: INC NEGT ; 负数个数 加一AND BX,1ADD NEGTEVEN,BL ; 和 1 与之后结果加到负偶数中JMP LOP CALC: MOV AH,POSIMOV AL,POSIEVENSUB AH,AL ; 计算正奇数个数MOV POSIODD,AHMOV AH,NEGTMOV AL,NEGTEVENSUB AH,AL ; 计算负奇数个数MOV NEGTODD,AHPRINT: ;打印MOV AH,09HMOV DX,OFFSET POSICHARINT 21HMOV AH,02HMOV DL,

6、POSIADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET EVENCHARINT 21HMOV AH,02HMOV DL,POSIEVENADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET ODDCHARINT 21HMOV AH,02HMOV DL,POSIODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09HINT 21HMOV AH,09HMOV DX,OFFSET NEGTCHARINT 21HMOV AH,02HMOV DL,NEGTADD DL,30HINT 21HMOV AH,09

7、HMOV DX,OFFSET EVENCHARINT 21HMOV AH,02HMOV DL,NEGTEVENADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET ODDCHARINT 21HMOV AH,02HMOV DL,NEGTODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09HINT 21HMOV AH,09HMOV DX,OFFSET ZEROCHARINT 21HMOV AH,02HMOV DL,ZEROADD DL,30HINT 21HEXT: MOV AX,4C00HINT 21HCODE ENDSEND ST

8、ART五、实验分析实验结果如下:六.预习题1.十进制数 0 - 9 所对应的 ASCII 码是什么? 如何将十进制数 0 - 9 在屏幕上显示出来?答:0-9 的 ascii 码为,30h,31h,32h,34h,35h,36h,37h,38h,39h,将要显示的数加上 30h,得到该数的 ascii 码,再利用 DOS 功能调用显示单个字符 2.如何检验一个数为正,为负或为零 ? 你能举出多少种不同的方法?答:利用 cmp 指令,利用 TEST 指令,将该数与 0 相减,观察标志位。检查最高位,为 0 是正数,为 1 时再检查其他位判断是负数或 0七、实验总结通过上课和实验编程初步掌握了基本

9、分支,循环程序的设计,数字的显示相关功能,即掌握了最简单的 DOS 功能调用。但是用这种方法预见如果显示一串在程序中得到的数字,将会是比较繁琐的过程。实验三代码转换程序设计一、实验目的1. 掌握几种最基本的代码转换方法;2. 运用子程序进行程序设计。二、实验内容1. 从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来。2. 两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明。3. 对输入要有检错措施,以防止非法字符输入,并有适当的提示。4. 将整个程序分解为若干模块,分别用子程序实现。在报告中要给出模块层次图。三、预习思考1. 如何将输入的两个字符(09)变为十进制

10、或二进制数?答:输入的字符 09 是 ASCII 码表示的,对应于 30H39H ,通过减去30H,可以转换为相应的计算机数。2. 如何将选出的最小值(二进制或十进制)变为 ASCII 码再进行显示?答:如果采用输入时把 ASCII 码转换为数字,然后比较数字的大小再输出,那么输出时还需要把数字再次转换为 ASCII 码。这是不明智的。可以直接读入并存储数字的 ASCII 码,容易比较其大小,然后直接输出ASCII 码即可。3. 你觉得采用二进制运算还是十进制运算更适合于这个实验?答:采用二进制或者十进制都需要进行 ASCII 码到数字的转换和其反向转换,换用新的思路可以大大简化编程负担。即直

11、接使用数字对应的ASCII 比较,分别比较十位和个位,最后直接输出字符即可。四、实验过程1、流程图开始读取输入的数据检查有错报错调用子程序找最小数输出最小数开始设最小数为 99比较 N 与最小数十位 ASCII 码比较 N 与最小数个位 ASCII 码N 为最小数N=N+1小于大于等于N 为最小数小于2、源代码DATA SEGMENT ;定义数据段BUFFER DB 100DB ?DB 100 DUP(?)RESULT DB ?STR1 DB please input number:$STR2 DB The minimum :$STR3 DB INPUT IS WRONG!$CK DB ?DA

12、TA ENDSSTACK SEGMENT STACK stackDB 100 DUP(s)个数到规定值是否输出最小数大于等于STACK ENDSCODE SEGMENT ;定义代码段ASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AX;输出信息AGAIN:LEA DX,STR1MOV AH,9INT 21HMOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HLEA DX,BUFFERMOV AH,10INT 21HMOV D

13、L,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HCALL CHECKCMP CK,0JZ AGAINCALL TRANSFORMCALL COMLEA DX,STR2MOV AH,9INT 21HCALL DISPYRETSTART ENDP;子程序 check 检查是否符合规范CHECK PROCLEA BX,BUFFER+2MOV CX,32HMOV CK,1NEXT1: MOV AL,BXCMP AL,39HJNS WARNINGCMP AL,30HJS WARNINGMOV AL,BX+1CMP AL,39HJNS WARNINGCMP AL,

14、30HJS WARNINGMOV AL,BX+2CMP AL,0DHJZ FINISHCMP AL,20HJZ NEXTJMP WARNINGNEXT: ADD BX,3DEC CXJNZ NEXT1WARNING:MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HLEA DX,STR3MOV AH,9INT 21HMOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV CK,0FINISH: RETCHECK ENDP;子程序 transform 进行排序算法TRANSFORM PROCLE

15、A BX,BUFFER+2NEXT3: MOV AH,BXAND AH,0FHSAL AH,1MOV DL,AHMOV CL,2SAL AH,CLADD AH,DLMOV AL,BX+1AND AL,0FHADD AL,AHMOV BX,ALMOV AL,BX+2ADD BX,3CMP AL,0DHJNZ NEXT3RETTRANSFORM ENDP;子程序 com 进行输出结果COM PROCLEA BX,BUFFER+2MOV AL,BXNEXT2: ADD BX,3CMP AL,BXJS NEXT4MOV AL,BXNEXT4: MOV DL,BX+2CMP DL,0DHJNZ NEXT

16、2MOV RESULT,ALRETCOM ENDP子程序 dispy 进行显示 DISPY PROCMOV BL,RESULTMOV BH,0NEXT6: CMP BL,0AHJS NEXT5INC BHSUB BL,0AHJMP NEXT6NEXT5: ADD BH,30HADD BL,30HMOV DL,BHMOV AH,2INT 21HMOV DL,BLMOV AH,2INT 21HRETDISPY ENDPCODE ENDSEND START 3、模块层次图五、输出结果主程序获取数字显示最小数查找最小数说明:对输入的数字进行了位数和范围的严格限制,即必须是两位数字,如果数字小于 10,

17、需要补齐零。空格分隔不同数字输入,回车结束。一位数后面空格为错误,回车后判断。六.预习题1 如何将输入的两个字符(0 - 9)变为十进制或二进制数?答:将输入的字符减去 30H,可得到十进制数2 如何将选出的最小值 (二进制或十进制)变为 ASCII 码再进行显示?答:先定义一个字节的数据,分为十位和低位,每次将输入的数十位和已存的十位相比较,若小于则将输入的字符和已存的交换,大于则不交换,等于时比较个位,若小于则交换,最后将十位和个位分别加上 30H 变为相应的 ascii 码输出3 你觉得采用二进制运算还是十进制运算更适合于这个实验?答:十进制七.实验心得与体会这次的实验相较于上次复杂了很

18、多,光编写代码的时间就用了 2 个小时,子程序设计的最重要的地方在于入口参数、出口参数的设计与主程序之间的关系。还有子程序功能之前应该保护现场。本实验主要将子程序设计在从键盘输入数字的功能,并设置标志,用于主程序确认输入是否正确。分隔符、结束符的确认较为简单,只需一个比较就可以了。数字的确认需要两个比较,即必须在 09 之间。输入错误时调用 09 号功能输出提示字符串。对于最小值的确认,初始应设为最大值 99,以方便接下来的刷新。得到最小值就将其赋给 MIN,最后再位、个位分别输出。总的来说,这次实验是第一次遇到比较多的挑战,但自己都慢慢的解决了,很有成就感。实验四子程序设计一、实验目的1.

19、进一步掌握子程序设计方法;2. 进一步掌握基本的 DOS 功能调用。二、实验内容1. 从键盘上输入某班学生的某科目成绩。输入按学生的学号由小到大的顺序输入。2. 统计检查每个学生的名次。3. 将统计结果在屏幕上显示。4. 为便于观察,输入学生数目不宜太多,以不超过一屏为宜。输出应便于阅读.尽可能考虑美观。5. 输入要有检错手段。三、预习思考1. 如何确定一个学生在这门科目中的名次?答:1.可以抽取每个学生的成绩和其他所有学生的成绩进行比较,然后统计比其分数高的学生,得出该学生的名次。2.可以把学生成绩存入连续内存区域,即数组方式,取得每个学生的成绩偏移量,即成绩指针。然后比较指针所指的成绩的大

20、小,根据比较结果移动指针完成排序。2. 输入结束后,采用什么方法进行比较以得到学生的名次最为简单?答:采用移动指针完成排序的方法在汇编语言下实现,复杂度较高。由于人数比较少,冒泡法还是比较简洁的。冒泡法的时间和空间性能都还不错,可以接受。3. 准备好模块层次图。4. 给出输出显示的形式。答:根据输入的每个学生的 ID,成绩,列出一个表,后面跟着排名次数。具体形式参见实验分析部分的输出截图。主程序计数器循环比较成绩 显示名次四、实验过程1、流程图2、源代码DATA SEGMENTID DB 400 DUP(?) ;存储学号MARK DB 20 DUP(?) ; 存储分数RANK DB 20 DU

21、P(?) ; 存储排名RANKTMP DB 20 DUP(?) ; 临时排序指针MTMP DB ? ; 临时记录成绩COUNTB DB ? ; 总的学生的个数COUNTW DW ? ; 总的学生个数CHEOK DB ? ; 输入检查标志位ERROR DB ? ; 记录错误号TMP DB 2 DUP(?) ;判断、 计数CR DB 0DH,0AH,$ ; 回车TAB DB 09H,09H,$ ;输出 TAB 键ERR0 DB Input cannot be empty!,$ERR2 DB Character is invalid!,$ERR4 DB Mark is invalid!,$ERR6

22、DB Input is invalid!,$ERRLIST DW ERR0,ERR2,ERR4,ERR6TIP0 DB Please re-input:,$开始获取人数获取 ID,分数排序显示排序结果结束输入错误TIP1 DB Please input number of students:,$TIP2 DB Please input ID and MARK:,$PRTIP DB -RESULT-,$PRINFO DB ID,09H,09H,MARK,09H,09H,RANK,$PRPRE1 DB ID : ,$PRPRE2 DB MARK: ,$BUFF DB 16 ;最长的字符长度PRES

23、 DB ? ; 存储实际输入字符数CHAR DB 16 DUP(?) ; 实际可存储有效字符 16 个DATA ENDSCODE SEGMENTPRINTTIP MACRO PARAPUSH AXPUSH DXMOV AH,09HMOV DX,OFFSET PARAINT 21HPOP DXPOP AXENDMPRINTCHAR MACRO ACHARPUSH AXPUSH DXMOV AH,02HMOV DL,ACHARINT 21HPOP DXPOP AXENDMMAIN PROC FARASSUME CS:CODE,DS:DATA,ES:DATAMOV AX,DATAMOV DS,AXM

24、OV ES,AXCALL GETNUMBER ; 人数CALL GETINFO ;分数CALL SORT ; 排序CALL PRINT ; 显示BACK: MOV AX,4C00H; 返回 DOSINT 21HMAIN ENDPGETNUMBER PROC NEARPUSH AXPUSH BXHE: PRINTTIP TIP1GREP: CALL GETINMOV CHEOK,0CALL CHECKCMP CHEOK,0JE GRETURNMOV ERROR,6CALL PRINTERRPRINTTIP TIP0 PRINTTIP CRJMP GREPERRHERE: PRINTTIP CRM

25、OV ERROR,6CALL PRINTERRPRINTTIP TIP0JMP GREP GRETURN: CALL CHANGEMOV AL,MTMPCMP AL,0JE ERRHEREMOV COUNTB,AL CBWMOV COUNTW,AXPRINTTIP CRPOP BXPOP AXRETGETNUMBER ENDPGETINFO PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIPRINTTIP TIP2MOV TMP,0 ; 学号还是分数XOR BX,BX ; ID 的偏移量XOR AX,AX ; 记录学生数目MORE:PRIN

26、TTIP CRCMP COUNTB,ALJNZ HERE1JMP RETURN ; 计数器为 0,返回父程序HERE1: CMP TMP,0JE PR1CMP TMP,1JE PR2PR1: PRINTTIP PRPRE1JMP HERE2PR2: PRINTTIP PRPRE2HERE2:CALL GETIN ; 否则接受输入CALL CHECK ; 检查是否是数字且不为空CMP CHEOK,0JNE CHEFAILCMP TMP,0JE ISID ; 输入学号CMP TMP,1 ; JE ISMARK ;输入分数CHEFAIL:PRINTTIP TIP0 PRINTTIP CRMOV CH

27、EOK,0 ; 返回判断位置零JMP MOREISID:MOV DL,PRES XOR DH,DHMOV CX,DXMOV SI,CXINC CXMOV CHARSI,$;开始写入 IDMOV TMP,1 ; 下一个是分数CLDMOV SI,OFFSET CHARMOV DI,OFFSET IDADD DI,BXREP MOVSB ;写入 IDADD BX,16 ; ID 的偏移地址向后挪动固定的 16BYTEJMP MORE ; 跳回继续输入下一个 BUFFISMARK:CALL CHANGECMP CHEOK,0JE WRITEMARKMOV ERROR,4JMP CHEFAILWRITE

28、MARK:PUSH BXMOV BL,MTMPMOV DI,AXMOV MARKDI,BL ; 实际写入成绩POP BXMOV TMP,0 ; 计数清理INC AX ; 已接受的学生数+1JMP MORERETURN:POP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETGETINFO ENDPGETIN PROC NEARPUSH AXPUSH DXPUSH DIMOV DX,OFFSET BUFFMOV AH,0AHINT 21HPOP DIPOP DXPOP AXRETGETIN ENDPCHECK PROC NEARPUSH DIPUSH CXPUSH AXXO

29、R DI,DI ; 记录 CHAR 读取的偏移量MOV AL,PRES ; 读取输入的 BUFF 中的字符数CBWMOV CX,AXCMP CX,0 ; 判断是否输入 BUFF 为空JE ISEMPTY ; 为空,重新输入AGAIN: CMP CX,DIJE RETURNCHECKMOV AH,CHARDICMP AH,30H; JL INVALID ; 小于,无效字符CMP AH,39H; JG INVALID ; 大于,无效字符INC DIJMP AGAINISEMPTY: MOV ERROR,0 ;输入为空的处理代码PRINTTIP CRCALL PRINTERRPRINTTIP CRM

30、OV CHEOK,1JMP RETURNCHECKINVALID: MOV ERROR,2 ; 输入不合法的处理代码PRINTTIP CRCALL PRINTERRPRINTTIP CRMOV CHEOK,1RETURNCHECK:POP AXPOP CXPOP DIRETCHECK ENDPCHANGE PROC NEARPUSH AXPUSH BXPUSH CXMOV CL,PRESCMP CL,3JA MINVALID ; 四位数或以上,溢出JE THRDIG ; 三位数CMP CL,2JE TWODIG ; 两位数CMP CL,1JE ONEDIG ; 一位数THRDIG:MOV BL

31、,CHAR0 ; 百位SUB BL,30HCMP BL,1JNE MINVALIDMOV BL,CHAR1 ; 十位SUB BL,30HCMP BL,0JNE MINVALIDMOV BL,CHAR2 ; 个位SUB BL,30HCMP BL,0JNE MINVALIDMOV MTMP,100 JMP CRETURNTWODIG:MOV BL,CHAR0 ; 十位SUB BL,30HCMP BL,0JE MINVALIDMOV AL,10MUL BL ; 乘以 10 取得十位数MOV BL,CHAR1 ; 个位SUB BL,30HADD AL,BLMOV MTMP,AL ; 写入转换后的数字J

32、MP CRETURNONEDIG:;一位数时直接写入临时成绩区MOV BL,CHAR0 ; 个位SUB BL,30HMOV MTMP,BLJMP CRETURNMINVALID:MOV ERROR,4CALL PRINTERRMOV CHEOK,1CRETURN:POP CXPOP BXPOP AXRETCHANGE ENDPPRINTERR PROC NEARPUSH AXPUSH DXPUSH BXMOV AL,ERRORCBWMOV BX,AXMOV AH,09HMOV DX,ERRLISTBXINT 21HPOP BXPOP DXPOP AXRETPRINTERR ENDPSORT P

33、ROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV AL,COUNTB ; 读取学生数目XOR BX,BX ; BX 作寻址计数器SLOP: DEC ALMOV RANKTMPBX,ALINC BXCMP AL,0JNE SLOP MOV CX,COUNTW ; CX 记录总学生人数DEC CXJZ WRRAKLOP1: XOR DI,DILOP2:MOV AL,RANKTMPDI ; 取出地址指针,即成绩偏移量XOR AH,AHMOV SI,AXMOV DL,MARKSI ; 取出成绩 1MOV AL,RANKTMPDI+1XOR AH

34、,AHMOV SI,AXMOV DH,MARKSI ;同理取出成绩 2CMP DL,DHJGE NEXTCMPMOV AH,RANKTMPDI ; 交换分数指针XCHG AH,RANKTMPDI+1MOV RANKTMPDI,AHNEXTCMP: INC DICMP DI,CXJNE LOP2LOOP LOP1WRRAK: XOR SI,SIMOV CX,COUNTWMOV BL,1 ; 保存名次LOPSAVE: CMP SI,CXJE FINISHMOV AL,RANKTMPSI ; 提取该名次学生的地址指针XOR AH,AHMOV DI,AXMOV RANKDI,BL ; 写入学生名次IN

35、C BLINC SIJMP LOPSAVEFINISH: POP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETSORT ENDPPRINT PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPRINTTIP CRPRINTTIP PRTIP PRINTTIP CRPRINTTIP PRINFOPRINTTIP CRMOV CX,COUNTW ; CX 保存学生数XOR SI,SI ; SI 指明当前处理的学生序号XOR BX,BX ; BX 保存当前输入学号偏移量NEXPRINT:MOV TMP1,0 ; 对打印名次置标志位CMP

36、 SI,CXJNE PRINTIDJMP PRETPRINTID:;打印学号,直接字符串打印MOV AH,09HMOV DX,OFFSET IDADD DX,BXINT 21HPRINTTIP TABPRINTMARK:MOV AL,MARKSIPRINTRANK:CMP AL,100JE PTTHRCMP AL,10JL PTONEJMP PTTWOPTTHR:PRINTCHAR 1PRINTCHAR 0PRINTCHAR 0JMP NEXTPTTWO:CBWPUSH BXMOV BL,10DIV BLMOV BX,AXADD BL,30HADD BH,30HPRINTCHAR BLPRIN

37、TCHAR BHPOP BXJMP NEXTPTONE:ADD AL,30HPRINTCHAR ALNEXT:PRINTTIP TABMOV AL,RANKSICMP TMP1,0JNE FINISHPMOV TMP1,1 JMP PRINTRANKFINISHP:PRINTTIP CR INC SIADD BX,16 JMP NEXPRINTPRET:POP SIPOP DXPOP CXPOP BXPOP AXRETPRINT ENDPCODE ENDSEND MAIN五、输出结果输出:1.如何确定一个学生在这门科目中的名次?答:有两种基本思路,一是抽取每个学生的成绩和其他所有学生的成绩进行

38、比较,然后统计比其分数高的学生,得出该学生的名次;二是把学生成绩存入连续内存区域,即数组方式,取得每个学生的成绩偏移量,即成绩指针。然后比较指针所指的成绩的大小,根据比较结果移动指针完成排序。具体排序时可以采用诸多的方式,比如冒泡法,快速排序法等等,均是可行的。本实验采用第二种方式,用冒泡法予以具体实现。2.你觉得输入结束后,采用什么方法进行比较以得到学生的名次最为简单?答:利用排序算法,将学生的成绩排序,同时学生的学号也随着成绩的排序而改变在内存中的位置,当排序结束后,学号的顺序也随之改变,最后学后的顺序即为名次七.实验心得与体会在这个实验中,我进一步掌握了子程序的设计方法,由于要完成从键盘

39、上输入某班学生的某科目成绩,所以设置了计数器用以记录成绩。而输入默认按学生的学号由小到大的顺序输入。这次实验同样花了一下午的时间在 debug 上,整个程序完成后感觉非常的累,但也觉得比较高兴,因为毕竟是自己亲手完成的实验。通过这次实验也深深的觉得自己的编程能力又提升了一个档次实验五中断程序设计一、实验目的1.初步掌握中断程序的设计方法;2.初步掌握修改 DOS 系统中断,以适应实际使用的方法。二、实验任务及内容1.编写一个 32 位二进制数除以 16 位二进制数的除法程序。观察当除数为 0,或超过相应寄存器范围时,程序执行的结果。2.修改零号中断服务程序,使它具有以下功能: (1)判断除数是

40、否为 0,当除数为 0 时, 显示相应的结果;(2)当除数不为 0 时,采用适当的方法完成商超过 16 位的二进制数的除法运算;3.注意必须保护原有中断服务程序的入口地址,并在程序完毕前加以恢复。选做题: 4.用二进制将结果在屏幕上显示. 5.从键盘输入二进制数。三.程序流程图是 否 是否开始修改 0 号中断向量表输出错误结束直接进行 32 位除法输出结果恢复 0 号中断向量表拓展得正确结果是否溢出除数为 0读取用户输入并转换四.源程序DATA SEGMENTmessage db 0AH,0DH,divisor equals 0.,0dh,0ah,$message1 DB 0AH,0DH, i

41、nput error,0DH,0AH,$message2 DB PLEASE INPUT THE DIVIDEND (32),0AH,0DH,$message3 DB 0AH,0DH,PLEASE INPUT THE DIVISOR (16),0AH,0DH,$message4 DB 0AH,0DH,THE QUOTIENT IS:,$message5 DB 0AH,0DH,THE REMAINDER IS:,$ DATA ENDSSTACK SEGMENT STACK STACK STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE, SS:STACK ,DS:DATAstart proc farpush dsmov ax,0push axmov ax,datamov ds,axsti ;TF 中断标志置 1mov al,0 ;保存原中断向量mov ah,35hint 21hpush espush bxpush dx ;写中断向量mov ax,seg int00mov ds,axmov dx,offset int00mov al,0

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 工作总结

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报