汇编有序表的插入删除排序_第1页
汇编有序表的插入删除排序_第2页
汇编有序表的插入删除排序_第3页
汇编有序表的插入删除排序_第4页
汇编有序表的插入删除排序_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、华 北 科 技 学 院课程设计说明书课程名称: 汇编语言 班级: 计算机B08-2 姓名:_王胤_ _学号:_ 200807024214 _设计题目:_ 有序表的插入、删除、查询 _设计时间: 2010-12-13 至 2010-12-24 指导教师:_ 陈振国 _ _评 语:_评阅成绩: 评阅教师:一、课程设计目的进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。二、课程设计要求1要求编写并调试通过一个小型软件,实现对软件或硬件的操作。2遵循

2、模块化、结构化的程序设计方法。3. 要求程序必须正确。4. 程序简明易懂,多运用输入输出提示,出错信息及必要的注释。5. 要求程序结构合理,语句使用得当。6. 适当追求编程技巧和程序运行效率。三、课程设计题目: 有序表的插入、删除、查询四、课题分析有序表的插入、删除、查询可使之提供以下功能:1、数据输入实现对数组长度和数组元素的初始化。2、排序 实现对数组元素从小到大排序。3、查询 实现对指定数的查询,若查找到则输出该数位置;若没查找到则给出该数不存在的提示。4、插入 实现对指定数的插入,插入同时序列长度加1。5、删除 实现对指定数的删除,若查找到则删除,且序列长度减1;若没找到则给出该数不存

3、在的提示。6、退出系统 输入指定字符退出系统或者撤销。 五、流程图:系统功能结构图 菜单 输入子程序查询子程序排序子程序 插入子程序删除和退出流程图略六、程序源代码:DATAS SEGMENTBUF DW 50 DUP(?) DATA DB 8,7 dup(?) N DW ? SRC DW 10MESG0 DB * menu *$ MESG1 DB 1.input$ MESG2 DB 2.arrange$ MESG3 DB 3.find$ MESG4 DB 4.insert$ MESG5 DB 5.delete$ MESG6 DB 6.exit$ MESG7 DB *$ MESG8 DB Pl

4、ease input menu number:$;MAIN MESG9 DB Inputing error!Input again:$;CHECK MESG10 DB How many number will you input?(250)$;INPUT MESG11 DB Input the numbers(032767):$;INPUT MESG12 DB The new sequence is: $;ARRANGE MESG13 DB Iuput the number you want to find:$;FIND MESG14 DB The number has been found!

5、$;FIND MESG15 DB The number has not been found!$;FIND MESG16 DB The position of the number is: $;FIND MESG17 DB Iuput the number you want to insert:$;INSERT MESG18 DB The number has been inserted!$;INSERT MESG19 DB The new length of the sequence is: $;INSERTDELETE MESG20 DB Input the number you want

6、 to delete:$;DELETE MESG21 DB The number has been delete!$;DELETE MESG22 DB The number is not exit!$;DELETE MESG23 DB Do you really want to exit?$;EIXT MESG24 DB Press Y/N:$;EXIT MESG25 DB Press ANY BUTTON to return menu:$ ;EACH MESG26 DB 0AH,0DH, $;EACH DATAS ENDS ;*XS MACRO X;显示宏 MOV AH,09H LEA DX

7、,X INT 21H ENDM;*SR MACRO Z;输入宏 MOV AH,10 LEA DX,Z INT 21H ENDM;*BIJ MACRO M,N;比较宏 CMP AL,M JE N ENDM ;*CODES SEGMENT ASSUME CS:CODES,DS:DATAS,ES:DATAS START: MOV AX,DATAS MOV DS,AX MOV ES,AXMAIN: CALL CLEAR_SCREEN;调用清屏子程序 CALL MENU;调用显示菜单子程序 MOV AH,1 INT 21H SUB AL,30H CALL CHECK;调用差错检验子程序 BIJ 1,SH

8、URU;调用宏 BIJ 2,PAIXU BIJ 3,CHAZHAO BIJ 4,CHARU BIJ 5,SHANCHU JMP TUICHUSHURU: CALL CLEAR_SCREEN CALL INPUT;调用输入子程序 JMP MAIN PAIXU: CALL CLEAR_SCREEN CALL ARRANGE;调用排序子程序 JMP MAIN CHAZHAO: CALL CLEAR_SCREEN CALL FIND;调用查找子程序 JMP MAIN CHARU: CALL CLEAR_SCREEN CALL INSERT;调用插入子程序 JMP MAINSHANCHU: CALL C

9、LEAR_SCREEN CALL DELETE;调用删除子程序 JMP MAINTUICHU: CALL CLEAR_SCREEN AG: XS MESG26 XS MESG23 XS MESG26 XS MESG24 MOV AH,1 INT 21H CMP AL,N JZ MAIN CMP AL,Y JZ DONE XS MESG26 XS MESG9 JMP AG DONE: MOV AH,4CH INT 21H;* CLEAR_SCREEN PROC ;清屏子程序 PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,6 MOV AL,0 MOV BH,7 MO

10、V CX,0 MOV DH,24 MOV DL,79 INT 10H MOV DX,0 MOV BH,0 MOV AH,2 INT 10H POP DX POP CX POP BX POP AX RET CLEAR_SCREEN ENDP ;* MENU PROC ;显示菜单子程序 XS MESG26 XS MESG0;调用宏 XS MESG26 XS MESG1 XS MESG26 XS MESG2 XS MESG26 XS MESG3 XS MESG26 XS MESG4 XS MESG26 XS MESG5 XS MESG26 XS MESG6 XS MESG26 XS MESG7 XS

11、 MESG26 XS MESG8 RETMENU ENDP;*CHECK PROC ;差错检验子程序CM: CMP AL,1 JL ERRO ;6退出 JMP RERRO:XS MESG26 XS MESG9 MOV AH,1 ;重新输入 INT 21H SUB AL,30H JMP CMR: RETCHECK ENDP ;*INPUT PROC ;输入子程序 MOV CX,50;清空BUF存储单元,以便重复利用 MOV DI,0LL: MOV BUFDI,0 ADD DI,2 LOOP LL XS MESG26 XS MESG10 CALL CHANGE;调用字符向数字转化子程序,得到序列长

12、度放在DI中 MOV CX,DI MOV N,DI;保存序列长度 XS MESG26 XS MESG11 XS MESG26 MOV SI,0L1: PUSH CX;保护外循环的CX CALL CHANGE ;调用字符向数字转化程序,得到输入数的值存入DI XS MESG26 MOV BUFSI,DI;将转化后的值存进BUF ADD SI,2 POP CX ;弹出外循环CX LOOP L1 CALL ASK RETINPUT ENDP;*CHANGE PROC ;字符向数字转化子程序(结果放在DI)AGAIN: SR DATA MOV BX,1 MOV DI,0 ;DI保留高位结果 MOV C

13、L,DATABX;得到要转化数的位数 MOV CH,0 MOV BX,2L2: MOV AL,DATABX SUB AL,30H JL ERROR ;9 错误 CBW PUSH AX MOV AX,DI ;高位乘10加低位 MUL SRC MOV DI,AX POP AX ADD DI,AX INC BX LOOP L2 JMP NEXTERROR: XS MESG26 XS MESG9 XS MESG26 JMP AGAINNEXT: RET CHANGE ENDP;*ASK PROC ;询问回菜单子程序 XS MESG26 XS MESG25 MOV AH,1 INT 21H RETASK

14、 ENDP;*ARRANGE PROC ;排序子程序(使用冒泡排序) MOV CX,N;序列长度 DEC CXLP5:MOV DX,CX MOV BX,0LP6:MOV AX,BUFBX CMP AX,BUFBX+2 JLE L XCHG AX,BUFBX+2 MOV BUFBX,AX L:ADD BX,2 Loop LP6 MOV CX,DX LOOP LP5 XS MESG26 XS MESG12 XS MESG26 CALL OUTSTRING;调用输出新序列子程序 CALL ASK;调用询问回菜单子程序 RET ARRANGE ENDP ;*OUTSTRING PROC ;输出新序列子

15、程序 MOV CX,N MOV SI,0LP2:PUSH CX MOV AX,BUFSI CALL CHANG;调用数字向字符转化并输出子程序 MOV AH,2 MOV DL, ;输出空格 INT 21H ADD SI,2 POP CX LOOP LP2 RETOUTSTRING ENDP;*CHANG PROC ;数字向字符转化并输出子程序(将AX中的数转换成字符) MOV CX,0 ;记录输出数的位数LP3:CWD DIV SRC PUSH DX ;将余数压入栈,以便倒向输出 INC CX CMP AX,0 ;商不为零则继续除 JNZ LP3LP4:POP DX ;将栈内数依次输出 MOV

16、 AH,2 ADD DL,30H INT 21H LOOP LP4 RETCHANG ENDP;*FIND PROC ;查找子程序 XS MESG26 XS MESG13 CALL CHANGE;调用字符向数字转化子程序,得到要查找的数的值存入DI MOV CX,N MOV SI,0 MOV AL,1;AL记录找到的数的位置LP7:CMP DI,BUFSI JZ FIN ADD SI,2 INC AL LOOP LP7 JMP NFINFIN:PUSH AX ;保护AL XS MESG26 XS MESG14 XS MESG26 XS MESG16 POP AX MOV AH,0 CALL C

17、HANG;调用数字向字符转换并输出子程序(转换AX中的数),输出序列新长度 JMP OUTFNFIN: XS MESG26 XS MESG15 XS MESG26OUTF: CALL ASK RET FIND ENDP;*INSERT PROC ;插入子程序 XS MESG26 XS MESG17 CALL CHANGE;调用字符向数字转换子程序,得到希望插入的数存放在DI MOV BL,2 MOV AX,N MOV AH,0 MUL BL MOV BX,AX MOV BUFBX,DI;把要插入的数先放在序列最后 MOV SI,0LP8:CMP DI,BUFSI;DI与BUF每个单元比较 JB

18、 LP9 ;找到要插入的位置SI ADD SI,2 LOOP LP8 LP9:SHR SI,1 MOV CX,N SUB CX,SI;得到循环交换次数LP10: XCHG AX,BUFBX;从序列最后往前交换 XCHG AX,BUFBX-2 XCHG AX,BUFBX SUB BX,2 LOOP LP10 INC N ;序列长度减1 XS MESG26 XS MESG18 XS MESG26 XS MESG12 XS MESG26 CALL OUTSTRING XS MESG26 XS MESG19 MOV AX,N CALL CHANG;调用数字向字符转化并输出子程序,转化AX中的数,输出序

19、列新长度 XS MESG26 CALL ASK RET INSERT ENDP;*DELETE PROC ;删除子程序 XS MESG26 XS MESG20 CALL CHANGE;调用字符向数字转化子程序,得到要删除的数的值放在DI中 MOV SI,0 MOV CX,NLP11: CMP DI,BUFSI;DI与BUF中每个数比较 JZ LP12;找到要删除的数和此数位置SI ADD SI,2 LOOP LP11 XS MESG26 XS MESG22 JMP OUTD ;没找到要删除的数,返回LP12: MOV BUFSI,0 MOV BX,SI SHR SI,1 MOV CX,N SU

20、B CX,SI DEC CX ;得到循环交换次数LP13: XCHG AX,BUFBX;从删除数开始往后交换 XCHG AX,BUFBX+2 XCHG AX,BUFBX ADD BX,2 LOOP LP13 DEC N ;序列长度加1 XS MESG26 XS MESG21 XS MESG26 XS MESG12 XS MESG26 CALL OUTSTRING XS MESG26 XS MESG19 MOV AX,N CALL CHANG;调用数字向字符转化并输出子程序,转化AX中的数,输出序列新长度 OUTD: CALL ASK RETDELETE ENDP;* CODES ENDSEND

21、 start七、结果显示显示菜单菜单功能号输入错误1号功能,输入数据输入数字错误2号功能,排序3号功能,查找要查找数不存在4号功能,插入5号功能,删除要删除的数不存在6号功能,退出八、感想、收获及体会这次课程设计,通过一步步从对要求的理解、程序的设计、编程、调试、修改,促使我对课程的内容进行了全面系统的复习和总结,达到融会贯通。让我更加熟练地运用DOS功能调用,特别是对结构化程序设计的基本方法、子程序及宏汇编等内容要很好地掌握。经过分析,INT 21H的9号和10号功能以及菜单部分字符串比较部分,由于使用频繁都做成了宏。数据的输入和输出要频繁转化字符和数字,所以字符向数字转化和数字向字符转化做成了子程序。除此之外,每个功能模块都或多或少使用清屏、显示菜单、询问返回菜单、差错检验这些功能,所以都相应的做成了子程序。每个功能模块也做成了子程序。宏和子程序的使用大量减少了程序代码,也减少了程序员的负担,一旦某个部分出错,只需要到相应的模块中改错

温馨提示

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

评论

0/150

提交评论