《汇编课程设计磁盘文件加密解密.doc》由会员分享,可在线阅读,更多相关《汇编课程设计磁盘文件加密解密.doc(16页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、汇编语言程序设计课程设计题目:磁盘文件加密、解密专业: 学号: 姓名: 2011-2012学年第二学期一设计目的汇编语言课程设计是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。根据汇编语言的特点,选择相应的题目,在老师的指导下,由学生独立完成。课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、系统功能调用、磁盘数据的查询、存取等相关知识。通过课程设计,一方面提高运用汇编语言编程解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。二设计内容从键盘输入不少于三个字符作为密钥,自己再设计一个加密算法。把磁盘文本文件(该
2、磁盘文件名称要求键盘输入)加密后存盘,然后输入同样的密钥,把加密后的文件(该磁盘文件名称要求键盘输入)进行解密,把解密后的文件内容显示于屏幕上。三程序设计原理1设计一个主菜单,判别1、2、3及其他字符串所对应的操作,其中1对应建立新文件,2对应打开磁盘文件并对其进行加密进而将加密后的文件存入磁盘,3对应打开磁盘文件并对其进行解密进而将解密密后的文件存入磁盘,其他字符则退出循环。2. INPUTFILE,创建文件的子程序。文件名由键盘输入,内容可以在程序中直接输入,也可在对应路径的文件里面直接输入。3. JIAMI1,加密文件的子程序。文件名由键盘输入,可以打开创建的文件,也可以打开磁盘里原有的
3、文件。打开文件并将其放入缓冲区之后,调用PASSWORD子程序,对文件进行加密。最后将加密后的文件存入磁盘。4.JIEMI1,解密文件的子程序。文件名由键盘输入,可以打开创建的文件,也可以打开磁盘里原有的文件。打开文件并将其放入缓冲区之后,调用PASSWORD子程序,对文件进行解密。最后将解密后的文件存入磁盘。并调用XIANSHi,将解密后的文件显示在屏幕上。5.PASSWORD,加密算法的子程序。根据输入的字符串,已大写字母Z对应的ASCII码作为分界线,大于Z的减去60H,小于Z的减去40H。将处理过后的每个字符对应的数据相加,存入内存单元,以备加密解密算法的调用。6.XIANSHI,显示
4、文件内容的子程序。先读取文件内容至缓冲区,再在缓冲区的结尾添上美元符,输出文件内容至屏幕上。四程序流程图1、主要算法开始主菜单:1:新建 2:加密 3:解密 其他:退出输入字符是“1“是“2“是“3“NYYYNN创建文件加密解密退出读取文件名,并输入文件内容,将输入的写入文件。读取文件名打开文件,打开错误则重新打开,正确即打开成功读取文件名读取文件内容将打开文件时存入缓冲区的数据一一加上PASSWORD子程序产生的参数。写入文件打开文件,打开错误则重新打开,正确即打开成功读取文件内容将打开文件时存入缓冲区的数据一一减去PASSWORD子程序产生的参数。写入文件调用XIANSHI子程序关闭文件结
5、束2、加密算法:开始输入密码将密码存放在KEY中SI KEY的偏移地址AL SIAL=AL-40HBL=BL+ALAL=AL-60H与Z比较BL=0CX 实际读取字节长度SI=SI+1CX=CX-1结束小于等于大于五源程序DATAS SEGMENT KEY DB 11,?,11 DUP(?) INPUTK DB INPUT THE PASSWORD:,10,13,$ NUM DB ? FNAME DB 50,?,51 DUP(?) INPUTF DB INPUT THE FILE NAME:,10,13,$ FCODE DW ? ERROR DB 10,13,ERROR!$ TABLE DB
6、255,?,255 DUP(?) INPUTFI DB WRITE THE FILE:,10,13,$ COUNT DB ? CHOICE DB*,13,10 DB 1:INPUTFILE 2:JIAMI 3:JIEMI OTHER :EXIT DB 13,10,*,13,10,$ PASS DB 11,?,11 DUP (?) TABLE1 DB 5000 DUP(?) DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATA
7、S MOV DS,AX ;主程序 G0: MOV DX,OFFSET CHOICE MOV AH,9 INT 21H MOV AH,1 INT 21H CMP AL,31H JNZ G1 CALL INPUTFILE JMP G0 G1:CMP AL,32H JNZ G2 CALL JIAMI1 JMP G0 G2:CMP AL,33H JNZ G3 CALL JIEMI1 JMP G0 G3:JMP L1 ;初始化,建立文件 INPUTFILE PROC MOV DL,10 MOV AH,2 INT 21H MOV DL,13 MOV AH,2 INT 21H MOV DX,OFFSET I
8、NPUTF MOV AH,9 INT 21H MOV DX,OFFSET FNAME MOV AH,0AH INT 21H LEA SI,FNAME MOV BL,SI+1 XOR BH,BH MOV BYTE PTR SI+BX+2,0;形成AXCIZ串 LEA DX,FNAME+2;建立文件 MOV AH,3CH XOR CX,CX INT 21H JC ERROR1 MOV FCODE,AX MOV DL,10 MOV AH,2 INT 21H MOV DL,13 MOV AH,2 INT 21H ;写入文件 MOV DX,OFFSET INPUTFI MOV AH,9 INT 21H
9、MOV DX,OFFSET TABLE MOV AH,0AH INT 21H MOV AH,40H LEA DX,TABLE+2 MOV BX,FCODE MOV CL,TABLE+1 XOR CH,CH INT 21H JC ERROR1 MOV DL,10 MOV AH,2 INT 21H MOV DL,13 MOV AH,2 INT 21H CALL CLS RET INPUTFILE ENDP ;JIAMI JIAMI1 PROC CALL CLS CALL PASSWORD MOV DL,10 MOV AH,2 INT 21H MOV DL,13 MOV AH,2 INT 21H I
10、1:MOV DX,OFFSET INPUTF MOV AH,9 INT 21H MOV DX,OFFSET FNAME MOV AH,0AH INT 21H MOV DL,10 MOV AH,2 INT 21H MOV DL,13 MOV AH,2 INT 21H LEA SI,FNAME MOV BL,SI+1 XOR BH,BH MOV BYTE PTR SI+BX+2,0;形成AXCIZ串 LEA DX,FNAME+2;建立文件 MOV AH,3DH;打开 MOV AL,0 INT 21H JC I1 MOV FCODE,AX MOV AH,3FH;读文件 LEA DX,TABLE1 M
11、OV BX,FCODE MOV CX,5000 INT 21H JC ERROR1 MOV CX,5000 MOV BX,CX LEA SI,TABLE1 PUSH AX XOR AX,AX MOV AL,NUM JIAMI:ADD BYTE PTR SI,AL INC SI LOOP JIAMI POP AX LEA DX,FNAME+2 MOV AH,3CH XOR CX,CX INT 21H JC ERROR1 MOV FCODE,AX XOR AH,AH MOV CX,5000 MOV BP,5000 MOV AH,40H LEA DX,TABLE1 MOV BX,FCODE INT
12、21H JC ERROR1 RET JIAMI1 ENDP ;JIEMI JIEMI1 PROC CALL CLS CALL PASSWORD MOV DL,10 MOV AH,2 INT 21H MOV DL,13 MOV AH,2 INT 21H I2: MOV DX,OFFSET INPUTF MOV AH,9 INT 21H MOV DX,OFFSET FNAME MOV AH,0AH INT 21H MOV DL,10 MOV AH,2 INT 21H MOV DL,13 MOV AH,2 INT 21H LEA SI,FNAME MOV BL,SI+1 XOR BH,BH MOV
13、BYTE PTR SI+BX+2,0;形成AXCIZ串 LEA DX,FNAME+2 MOV AH,3DH;打开 MOV AL,0 INT 21H JC I2 MOV FCODE,AX MOV AH,3FH;读文件 LEA DX,TABLE1 MOV BX,FCODE MOV CX,10000 INT 21H JC ERROR1 MOV CX,5000 MOV BX,CX MOV BP,BX LEA SI,TABLE1 PUSH AX XOR AX,AX MOV AL,NUM JIEMI:SUB BYTE PTR SI,AL INC SI LOOP JIEMI LEA DX,FNAME+2 M
14、OV AH,3CH XOR CX,CX INT 21H JC ERROR1 MOV FCODE,AX XOR AH,AH MOV CX,5000 MOV BP,5000 MOV AH,40H LEA DX,TABLE1 MOV BX,FCODE INT 21H JC ERROR1 POP AX CALL XIANSHI JC ERROR1 RET JIEMI1 ENDP PASSWORD PROC PUSH SI PUSH DI MOV DL,10 MOV AH,2 INT 21H MOV DL,13 MOV AH,2 INT 21H MOV DX,OFFSET INPUTK MOV AH,9
15、 INT 21H MOV DX,OFFSET KEY MOV AH,0AH INT 21H MOV CL,KEY+1 XOR CH,CH XOR BX,BX LEA SI,KEY NUM1:MOV AL,SI+2 CMP AL,Z JA C1 SUB AL,40H JMP C0 C1:SUB AL,60H C0: INC SI ADD BL,AL LOOP NUM1 MOV NUM,BL POP DI POP SI RET PASSWORD ENDP ;显示文件内容 XIANSHI PROC PUSH DX PUSH BX MOV BX,5000 MOV BYTE PTR BX+TABLE1,
16、$ LEA DX,TABLE1 MOV AH,09H INT 21H MOV DL,10 MOV AH,2 INT 21H MOV DL,13 MOV AH,2 INT 21H POP BX POP DX RET XIANSHI ENDP CLS PROC;清屏MOV AH,6MOV AL,0MOV BH,7MOV CH,0MOV CL,0MOV DH,24MOV DL,79INT 10HMOV DX,0MOV AH,2MOV BH,0INT 10HRET CLS ENDP JMP L1 ERROR1:MOV DX,OFFSET ERROR MOV AH,9 INT 21H L1:MOV AH
17、,4CH INT 21HCODES ENDS END START六调试过程1. 创建文件并对其进行加密解密1)创建文件2)加密3)解密1)加密2)解密(由于太长,只显示一部分)七遇到的问题及解决方法1遇到的问题:对文件的各种操作很陌生。解决方法:熟读课本,课本内容很详细,只要对其进行稍微的拓展,与前面所学的东西加以结合,即可动手操作,在编程中逐渐熟悉文件的各种操作。2遇到的问题:在写入文件的时候对于字符串的文件实际读入的字节长度对应的寄存器引用错误,导致后期打开文件一直发现只能有7个字符。解决方法:将每个子程序的寄存器校正。3.遇到的问题:打不开磁盘已有的文件。解决方法:其实程序是可以打开的,也没有什么错误,重点在文件的新建上。电脑默认的文件扩展名是.txt,所以在后来将.txt删除之后即可打开文件。4.遇到的问题:缓冲区太小,若文件太大,会导致加密或解密之后只写入文件的一部分,使大部分文件内容丢失。解决方法:扩大缓冲区,并将缓冲区的定义放在数据段的最末端以免影响其他定义的内容。相应的也要对程序的字节长度等做相应的调整。5.遇到的问题:设计加密算法时,由于标号放置的错误致使程序出错。解决方法:仔细检查程序,有序的在脑海里运行基本的循环以及跳转,纠正标号的位置。八参考文献汇编语言程序设计 主编:刘丽莉 北京大学出版社
限制150内