1、字符加密汇编语言程序设计目录1.题目功能分析 12. 算法说明 13.程序流程图设计 23.1主程序功能说明及其流程图 23.2子程序结构流程图 34. 软件设计关键问题 54.1主程序部分 54.2 子程序部分 64.2.1标题信息子程序 64.2.2 加密/解密子程序 84.2.3转存子程序 84.2.4清屏子程序 94.3 BIOS中的功能说明 94.4子程序说明 105.程序调试过程及分析 11心得体会 13参考文献 14附录(程序清单) 15字符加密汇编语言程序设计1.题目功能分析密码是一门科学,有着悠久的历史。密码在古代就被用于传递秘密消息。在近代和现代战争中,传递情报和指挥战争均
2、离不开密码,外交斗争中也离不开密码。密码一般用于信息通信传输过程中的保密和存储中的保密。随着计算机和信息技术的发展,密码技术的发展也非常迅速,应用领域不断扩展。密码除了用于信息加密外,也用于数据信息签名和安全认证。这样,密码的应用也不再只局限于为军事、外交斗争服务,它也广泛应用在社会和经济活动中。当今世界已经出现了密码应用的社会化和个人化趋势。例如:可以将密码技术应用在电子商务中,对网上交易双方的身份和商业信用进行识别,防止网上电子商务中的“黑客”和欺诈行为;应用于增值税发票中,可以防伪、防篡改,杜绝了各种利用增值税发票偷、漏、逃、骗国家税收的行为,并大大方便了税务稽查;应用于银行支票鉴别中,
3、可以大大降低利用假支票进行金融诈骗的金融犯罪行为;应用于个人移动通信中,大大增强了通信信息的保密性等等。本次课程设计中采用汇编语言对字符串进行简单的加密和解密,以期获得汇编语言程序设计的基本知识概念。我们设计的程序需要满足以下一些功能:(1)运行程序后屏幕提示1加密,2解密; (2)功能选择后,屏幕提示输入一字符串; (3)根据功能选择对输入的字符串进行加密/解密处理,加密方法自选; (4)输出处理后的字符串,并再次屏幕提示功能选择; (5)可连续输入字符串进行加密/解密处理,直至单击“Q”或“q”键退出程序。 2. 算法说明对于题目主功能要求有以下两种实现方法:方法一:调用DOS的1号功能逐
4、个输入明码字符,此时由于1号的功能对输入的字符显示,故输入的明码会显示。再即时对输入的字符明码保存并调用加密子程序对明码字符进行加密并输出显示在屏幕上,直到把明码输入完,此时加密结果也输出结束,最后把保存的明码输出,即输出一个完整的明码字符串。方法二:调用DOS的OAH号功能输入一串完整的字符串,即要求加密的字符串,输入后进行保存,然后保存在另一个内存区中,再调用加密子程序对字符串中各个元素加密,调用DOS的9号功能把之前加密好的并保存的密码字符串完整输出,显示在屏幕上,最后用解密函数对密码解密并输出明码。在本设计中,我选择了方法二,这样需要加密的字符串可以一次性全部输入,而且操作起来更简单。
5、另外为了防止使用者的一些误操作,自己还设计了一些起警示作用的子程序,使程序更加实用。3.程序流程图设计3.1主程序功能说明及其流程图图3-1 主程序流程图功能说明:主程序开始执行后,先显示程序标题,此处程序标题由天蓝色字体显示,然后显示功能选择提示符。当键盘输入选择后,程序开始进行判断属于哪一类,判定完毕后则执行相应跳转加密或者解密。当输入不是所要求的按键时,程序输出红色错误警告,提醒用户重新进行选择。主程序流程图如图3-1所示。3.2子程序结构流程图(1)程序标题设置功能说明及其流程图:功能说明:程序标题子程序中设置光标位置采用2号功能调用定位到0行0列,写字符部分包括字符的文本显示方式,此
6、处为彩色文本,方式3。流程图如图3-2所示。 图3-2 程序标题设计流程图 图3-3 警示信息设计流程图(2)警示信息功能说明及其流程图:功能说明:当输入选择功能信息有误时,调用警示子程序。首先设置光标位置采用2号功能调用定位到0行0列,写字符部分包括字符的文本显示方式,此处为彩色文本,方式4。流程图如图3-3所示。(3)加密/解密程序功能说明及其流程图:功能说明:用户输入的字符串存在WORD中,我们再调用SHURU子程序存入CHEN中,对CHEN中每个元素进行加密或者解密后存入CHEN中。当加密时,对CHEN中明码相应加10得密码;当解密时,将CHEN中的密码相应的减10即可的解密,得原码。
7、加密/解密程序流程图如图3-4所示。 图3-4 加密/解密程序流程图 图3-5 转存程序流程图(4)转存程序功能说明及其流程图:功能说明:将用户输入的字符串从WORD缓冲区逐个循环赋值转到CHEN缓存区,从而使得原码和密码能同时对应显示出来。流程图如图3-5所示。(5)清屏程序功能说明及其流程图: 功能说明:清屏程序调用6号功能AL=0表示整个屏幕为空白,即清屏幕。流程图如图3-6所示。图3-6 清屏程序流程图4. 软件设计关键问题4.1主程序部分主程序部分开始运行后采用9号功能输出程序标题和提示字符串。当用户选择后,执行判断跳转部分。因为用户输入的信息存在WORD缓存区中,当转存到CHEN中
8、后就需要调用加密/解密子程序,当翻译完成后就将原码和密码一起输出。程序分支有比较跳转实现,代码如下:START: MOV AX,DATAMOV DS,AXCALL TittleONE: LEA DX,BUFF MOV AH, 09INT 21H ;功能选择MOV AH,1INT 21H ;单字符输入 CMP AL,31HJE AA1 CMP AL,32HJE AA2CMP AL,51H JE DONE CMP AL,71H JE DONE ;比较跳转 CALL CLEARCALL WARNING ;警报LOOP ONEAA1: CALL JIAMI ;选择加密AA2: CALL JIEMI ;
9、选择解密SCREEN: LEA DX,CHEN MOV AH, 9 INT 21H ;输出显示 LEA DX,BLANK MOV AH, 9 INT 21H ;回车换行LOOP ONEDONE: MOV AX,4C00H INT 21H4.2 子程序部分4.2.1标题信息子程序本子程序采用BIOS9号功能调用,显示天蓝色的标题信息。AH=9为入口类型号,BH为页号,AL为要写的字符,BL为字符属性值,CX为重复次数,代码如下:Tittle PROC NEAR PUSH SI PUSH AX PUSH BX PUSH CX PUSH DX MOV SI,0BIAOTI: MOV AH,2 ;设置
10、光标位置 MOV BH,0 ;页号 MOV DH,0 ;行号 MOV CX,SI MOV DL,CL ;DL,列号 INT 10H MOV AH,9 ;写当前光标 MOV BH,0 ;页号 MOV AL,ZHIWEISI ;要写的字符 MOV BL,3 ;属性值(颜色) MOV CX,1 ;重复次数 INT 10H INC SI CMP SI,60 JB BIAOTI LEA DX,BLANK MOV AH, 9 INT 21H ;回车换行 POP DX POP CX POP BX POP AX POP SI RETTittle ENDP4.2.2 加密/解密子程序 加密子程序采用ASCII码
11、值加4的方法,而解密则是采用ASCII码值减4的方法,循环赋值,代码如下:JIAMI(JIEMI) PROC NEAR CALL CLEAR ;清屏 LEA DX,BYTE MOV AH, 9 INT 21H ;提示输出LEA DX,WORD MOV AH,0AH INT 21H ;键盘输入 LEA DX,BLANK MOV AH,9 INT 21H ;回车换行 CALL ZHUANCUN ;转存 MOV CL,WORD1 ; 键盘输入个数 MOV SI,0AA3: ADD CHENSI,4 ;加密方法 INC SI LOOP AA3 MOV CHENSI+1,0AH MOV CHENSI+2
12、,0DH MOV CHENSI+3,$ ;结束符 JMP SCREEN RETJIAMI(JIEMI) ENDP4.2.3转存子程序 转存子程序是通过指针的移动将WORD中的字符串逐字读取并存入CHEN中,其代码如下:ZHUANCUN PROC NEAR PUSH BX MOV SI,0 MOV CL,WORDSI+1 ;输入个数 MOV CH,0 AA5: MOV BL,WORDSI+2 MOV CHENSI,BL INC SI LOOP AA5 ;转存 POP BX RETZHUANCUN ENDP4.2.4清屏子程序调用BIOS6号功能,AL为上滚行数,BH为显示属性,CX为上滚部分左上
13、角行列号,DX为上滚部分右下角行列号,代码如下: MOV AH,6 ;6号功能调用-屏幕上滚 MOV AL,0 ;上滚的行数 MOV BH,7 ;黑底 MOV CH,0 ;上滚部分左上角在0行0列 MOV CL,0 MOV DH,24 ;上滚部分右下角在24行79列 MOV DL,79 INT 10h4.3 BIOS中的功能说明在本次课程设计中,为了获得良好的显示效果,用到了基本输入输出系统BIOS)中的几个功能,再次说明一下。(1)设置光标位置 入口参数:AH=2,BH=页号,DH=行号,DL=列号。 出口参数:无 说明:对于页号,通常情况下设置为0。该操作是控制光标的重要操作。(2)屏幕上
14、滚 入口参数:AH=6,AL=上滚行数,CX=上滚部分左上角的行、列号,DX=上滚部分右下角的行、列号,BH=显示属性。 出口参数:无 说明:当AL=0时,表示整个屏幕为空白,及清屏幕。当AL0,窗口(即滚动部分)底部为空白输入行。(3)在当前光标位置写字符及其属性 入口参数:AH=9,BH=页号,AL=要写字符的ASCII码,BL=属性值,CX=重复次数。 出口参数:无 说明:在当前光标位置写字符的操作不改变光标的位置,所以每次写字符前,都必须使用2号功能重新设置光标的位置。4.4子程序说明(1)子程序名;JIAMI(JIEMI)功能:ASCII值加(减)4进行加密并输出。先进行清屏,然后提
15、示输入要加密的字符串,由于键入的明码在AL中,存入了WORD缓存区中,使用ZHUANCUN子程序转存到CHEN后,对每个元素值加30即可,然后调用DOS的9号功能使密码输出并显示在屏幕上。(2)子程序名:TITTLE功能:首先设置光标位置,然后在光标位置写字符,要写的字符属性值由10H调用实现。采用循环算法输出一个字符串。(3)子程序名; WARNING功能:首先设置光标位置,然后在光标位置写字符,要写的字符属性值由10H调用实现。采用循环算法输出一个字符串,和TITTLE子程序一样。(4)子程序名:ZHUANCUN功能:首先赋值循环次数,采用循环算法一个个赋值转存。(5)子程序名:CLEAR
16、功能:首先堆栈压入,保护现场。然后调用6号功能键滚屏,最后再用2号功能键进行光标定位,弹出堆栈。5.程序调试过程及分析(1)将编写好的程序输入到MF平台上,进行以下操作:汇编源程序连接目标码运行程序。弹出对话框,如图5-1所示。图5-1 程序开始运行后界面其中字符串“Character encryption/translation program”显示为天蓝色,这样显示醒目标题信息,这是因为在程序的开始处有这样的输出提示符的程序,并调用了BIOS的2号功能(显示光标位置)、9号功能(在当前光标位置写字符及其属性)使其显示为黄色,在以后的循环执行中也会有这样的提示。(2)当操作者按下Q/q时,对
17、话框自动关闭:当按下1或2时,则会显示以下内容,如图5-2所示。图5-2 选择加密或解密后界面 若选择其他按键,则会出错报警,并要求重新选择,对话框显示如图5-3所示。图5-3 错误警告信息(3)当操作者选择按键1,即加密时,接着先输入要加密的字符,输完后按回车键,即会出现图5-4所示信息,上一行为原码,下一行为密码。加密后回到功能选择提示符,用户可重新选择加密,解密或退出。图5-4加密显示界面(4)当操作者选择按键2,即解密时,接着先输入密码字符,输完后按回车键,即会出现图5-5所示信息,上一行为需要解密的密码码,下一行为原码。解密后回到功能选择提示符,用户可重新选择加密,解密或退出。图5-
18、5 解密显示界面心得体会最近,我们花了近两个星期的时间进行了微机原理及接口技术的课程设计,个人觉得还是相当有收获的。平时上课只是接触课本上已经写好的程序,只是知道它大概有什么功能,却始终没有去真正验证这些功能,去感受汇编语言真正的用途。这次的课程设计不仅要我们能读懂一些程序,还要求我们能自己根据要求设计程序。我们小组的题目是“字符加密汇编语言程序设计”,刚开始拿到题目是觉得并不是特别难,但当真正入手编程时,却发现有许多问题要考虑,比如:操作者输入的字符是未知的,字符的数量也是未知的;当操作人输入原码或密码时,两者要对应同时显示出来;当程序运行后,屏上显示的信息要有条理,要让操作人能看懂,知道下
19、一步该干什么等等问题。不过办法总比问题多,有些问题我们通过小组讨论就解决了,但一些技术性的问题,我们又通过看书,上网查资料的方式慢慢琢磨,不断地修改程序,不断地运行,在不断地改错中进步,最终得到还算比较完整的程序,可以满足要求。加密是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。加密技术是最常用的安全保密手段。对于像字符加密/解密这样的程序,在生活中还是具有很大的实用价值的。我们可以通过这样的程序对现实生活中的一些私人信息进行加密,同时,加密/解密在军事方面也有很大的作用。通过这次微机课设,自己还是有很大收获的。不仅加深
20、了对之前微机课堂学习到的汇编知识,同时也让自己接触到了一些新鲜的汇编功能,比如对DOS调用和BIOS调用的一些编程,这些功能可以让我们在满足主程序逻辑功能的同时,让程序更加的丰满、生动。在这次编程中我就利用DOS调用和BIOS调用功能让程序标题信息以及警示信息以不同的颜色显示在程序运行的对话框中。还利用网上资料实现了清屏和换行的功能,使得程序运行重复运行或输入有误时,窗口中不至于太凌乱。汇编语言虽然不像C语言那样高级,那样方便使用,但它在微机中还是有很大的作用的,因此,我们应该重视它,在学好汇编语言的基础上进行更高层次的语言学习。这次课设对自己编程能力的提升还是有很大帮助的。参考文献(1) 彭
21、虎等编著微机原理与接口技术(第二版)北京:电子工业出版社,2008 (2)沈美明,温东禅IBM-PC汇编语句程序设计(第2版)北京:清华大学出版社,2001 (3)任向明,卢惠林汇编语言程序设计实用教程北京:清华大学出版社,2009 (4)马力妮80x86汇编语言程序设计北京:机械工业出版社,2004 (5)曹加恒,苏光奎,许先斌新一代汇编语言程序设计北京:高等教育出版社,2003 附录(程序清单)DATA SEGMENTZHIWEI DB Character encryption/translation program,0DH,0AH,$BUFF DB 1:encrypt 2:transla
22、te Q/q:exit ?,0DH,0AH,$BYTE DB 0DH,0AH,please press the sentence ,0DH,0AH,$BLANK DB 0DH,0AH,$WORD DB 100,?,40 DUP(?)CHEN DB 50 DUP(0)AGAIN DB sorry,please choose again!,0DH,0AH,$DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXCALL TITTLEONE: LEA DX,BUFF MOV AH, 09INT 21H ;功能选择
23、MOV AH,1INT 21H ;单字符输入 CMP AL,31HJE AA1 CMP AL,32HJE AA2CMP AL,51H JE DONE CMP AL,71H JE DONE ;比较跳转 CALL CLEARCALL WARNING ;警报LOOP ONEAA1: CALL JIAMI ;选择加密AA2: CALL JIEMI ;选择解密SCREEN: LEA DX,CHEN MOV AH, 9 INT 21H ;输出显示 LEA DX,BLANK MOV AH, 9 INT 21H ;回车换行LOOP ONEDONE: MOV AX,4C00H INT 21H;*TITTLE P
24、ROC NEAR PUSH SI PUSH AX PUSH BX PUSH CX PUSH DX MOV SI,0BIAOTI: MOV AH,2 ;设置光标位置 MOV BH,0 ;页号 MOV DH,0 ;行号 MOV CX,SI MOV DL,CL ;DL,列号 INT 10H MOV AH,9 ;写当前光标 MOV BH,0 ;页号 MOV AL,ZHIWEISI ;要写的字符 MOV BL,3 ;属性值(颜色) MOV CX,1 ;重复次数 INT 10H INC SI CMP SI,60 JB BIAOTI LEA DX,BLANK MOV AH, 9 INT 21H ;回车换行
25、POP DX POP CX POP BX POP AX POP SI RETTITTLE ENDP;*;*WARNING PROC NEAR PUSH SI PUSH AX PUSH BX PUSH CX PUSH DX MOV SI,0PP: MOV AH,2 ;设置光标位置 MOV BH,0 ;页号 MOV DH,0 ;行号 MOV CX,SI MOV DL,CL ;DL,列号 INT 10H MOV AH,9 ;写当前光标 MOV BH,0 ;页号 MOV AL,AGAINSI ;要写的字符 MOV BL,4 ;属性值 MOV CX,1 ;重复次数 INT 10H INC SI CMP
26、SI,26 JB PP LEA DX,BLANK MOV AH, 9 INT 21H ;回车换行 POP DX POP CX POP BX POP AX POP SI RETWARNING ENDP;*;加密算法JIAMI PROC NEAR CALL CLEAR ;清屏 LEA DX,BYTE MOV AH, 9 INT 21H ;提示输出 LEA DX,WORD MOV AH,0AH INT 21H ;键盘输入 LEA DX,BLANK MOV AH,9 INT 21H ;回车换行 CALL ZHUANCUN ;转存 MOV CL,WORD1 ;键盘输入个数 MOV SI,0AA3: AD
27、D CHENSI,4 ;加密方法 INC SI LOOP AA3 MOV CHENSI+1,0AH MOV CHENSI+2,0DH MOV CHENSI+3,$ ;结束符 JMP SCREEN RETJIAMI ENDP;*;解密算法JIEMI PROC NEAR CALL CLEAR ;清屏 LEA DX,BYTE MOV AH, 9 INT 21H ;提示输出 LEA DX,WORD MOV AH,0AH INT 21H ;键盘输入 LEA DX,BLANK MOV AH, 9 INT 21H CALL ZHUANCUN ;转存 MOV CL,WORD1 ;输入个数 MOV SI,0AA
28、4: SUB CHENSI,4 INC SI LOOP AA4 ;解密 MOV CHENSI+1,0AH MOV CHENSI+2,0DH MOV CHENSI+3,$ ;结束 JMP SCREEN RETJIEMI ENDP;*;存储ZHUANCUN PROC NEAR PUSH BX MOV SI,0 MOV CL,WORD1 ;输入个数 MOV CH,0 AA5: MOV BL,WORDSI+2 MOV CHENSI,BL INC SI LOOP AA5 ;转存 POP BX RETZHUANCUN ENDP;*;子程序名;CLEAR;功能:对屏幕进行清除CLEAR PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,6 ;6号功能调用-屏幕上滚 MOV AL,0 ;上滚的行数 MOV BH,7 ;黑底 MOV CH,0 ;上滚部分左上角在0行0列 MOV CL,0 MOV DH,24 ;上滚部分右下角在24行79列 MOV DL,79 INT 10hMOV AH,2 MOV BH,0 MOV DX,0000H INT 10H ;光标定位 POP DX
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1