字符加密汇编语言程序设计.docx
《字符加密汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《字符加密汇编语言程序设计.docx(24页珍藏版)》请在冰豆网上搜索。
字符加密汇编语言程序设计
目录
1.题目功能分析1
2.算法说明1
3.程序流程图设计2
3.1主程序功能说明及其流程图2
3.2子程序结构流程图3
4.软件设计关键问题5
4.1主程序部分5
4.2子程序部分6
4.2.1标题信息子程序6
4.2.2加密/解密子程序8
4.2.3转存子程序8
4.2.4清屏子程序9
4.3BIOS中的功能说明9
4.4子程序说明10
5.程序调试过程及分析11
心得体会13
参考文献14
附录(程序清单)15
字符加密汇编语言程序设计
1.题目功能分析
密码是一门科学,有着悠久的历史。
密码在古代就被用于传递秘密消息。
在近代和现代战争中,传递情报和指挥战争均离不开密码,外交斗争中也离不开密码。
密码一般用于信息通信传输过程中的保密和存储中的保密。
随着计算机和信息技术的发展,密码技术的发展也非常迅速,应用领域不断扩展。
密码除了用于信息加密外,也用于数据信息签名和安全认证。
这样,密码的应用也不再只局限于为军事、外交斗争服务,它也广泛应用在社会和经济活动中。
当今世界已经出现了密码应用的社会化和个人化趋势。
例如:
可以将密码技术应用在电子商务中,对网上交易双方的身份和商业信用进行识别,防止网上电子商务中的“黑客”和欺诈行为;应用于增值税发票中,可以防伪、防篡改,杜绝了各种利用增值税发票偷、漏、逃、骗国家税收的行为,并大大方便了税务稽查;应用于银行支票鉴别中,可以大大降低利用假支票进行金融诈骗的金融犯罪行为;应用于个人移动通信中,大大增强了通信信息的保密性等等。
本次课程设计中采用汇编语言对字符串进行简单的加密和解密,以期获得汇编语言程序设计的基本知识概念。
我们设计的程序需要满足以下一些功能:
(1)运行程序后屏幕提示1加密,2解密;
(2)功能选择后,屏幕提示输入一字符串;
(3)根据功能选择对输入的字符串进行加密/解密处理,加密方法自选;
(4)输出处理后的字符串,并再次屏幕提示功能选择;
(5)可连续输入字符串进行加密/解密处理,直至单击“Q”或“q”键退出程序。
2.算法说明
对于题目主功能要求有以下两种实现方法:
方法一:
调用DOS的1号功能逐个输入明码字符,此时由于1号的功能对输入的字符显示,故输入的明码会显示。
再即时对输入的字符明码保存并调用加密子程序对明码字符进行加密并输出显示在屏幕上,直到把明码输入完,此时加密结果也输出结束,最后把保存的明码输出,即输出一个完整的明码字符串。
方法二:
调用DOS的OAH号功能输入一串完整的字符串,即要求加密的字符串,输入后进行保存,然后保存在另一个内存区中,再调用加密子程序对字符串中各个元素加密,调用DOS的9号功能把之前加密好的并保存的密码字符串完整输出,显示在屏幕上,最后用解密函数对密码解密并输出明码。
在本设计中,我选择了方法二,这样需要加密的字符串可以一次性全部输入,而且操作起来更简单。
另外为了防止使用者的一些误操作,自己还设计了一些起警示作用的子程序,使程序更加实用。
3.程序流程图设计
3.1主程序功能说明及其流程图
图3-1主程序流程图
功能说明:
主程序开始执行后,先显示程序标题,此处程序标题由天蓝色字体显示,然后显示功能选择提示符。
当键盘输入选择后,程序开始进行判断属于哪一类,判定完毕后则执行相应跳转加密或者解密。
当输入不是所要求的按键时,程序输出红色错误警告,提醒用户重新进行选择。
主程序流程图如图3-1所示。
3.2子程序结构流程图
(1)程序标题设置功能说明及其流程图:
功能说明:
程序标题子程序中设置光标位置采用2号功能调用定位到0行0列,写字符部分包括字符的文本显示方式,此处为彩色文本,方式3。
流程图如图3-2所示。
图3-2程序标题设计流程图图3-3警示信息设计流程图
(2)警示信息功能说明及其流程图:
功能说明:
当输入选择功能信息有误时,调用警示子程序。
首先设置光标位置采用2号功能调用定位到0行0列,写字符部分包括字符的文本显示方式,此处为彩色文本,方式4。
流程图如图3-3所示。
(3)加密/解密程序功能说明及其流程图:
功能说明:
用户输入的字符串存在WORD中,我们再调用SHURU子程序存入CHEN中,对CHEN中每个元素进行加密或者解密后存入CHEN中。
当加密时,对CHEN中明码相应加10得密码;当解密时,将CHEN中的密码相应的减10即可的解密,得原码。
加密/解密程序流程图如图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中后就需要调用加密/解密子程序,当翻译完成后就将原码和密码一起输出。
程序分支有比较跳转实现,代码如下:
START:
MOVAX,DATA
MOVDS,AX
CALLTittle
ONE:
LEADX,BUFF
MOVAH,09
INT21H;功能选择
MOVAH,1
INT21H;单字符输入
CMPAL,31H
JEAA1
CMPAL,32H
JEAA2
CMPAL,51H
JEDONE
CMPAL,71H
JEDONE;比较跳转
CALLCLEAR
CALLWARNING;警报
LOOPONE
AA1:
CALLJIAMI;选择加密
AA2:
CALLJIEMI;选择解密
SCREEN:
LEADX,CHEN
MOVAH,9
INT21H;输出显示
LEADX,BLANK
MOVAH,9
INT21H;回车换行
LOOPONE
DONE:
MOVAX,4C00H
INT21H
4.2子程序部分
4.2.1标题信息子程序
本子程序采用BIOS9号功能调用,显示天蓝色的标题信息。
AH=9为入口类型号,BH为页号,AL为要写的字符,BL为字符属性值,CX为重复次数,代码如下:
TittlePROCNEAR
PUSHSI
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVSI,0
BIAOTI:
MOVAH,2;设置光标位置
MOVBH,0;页号
MOVDH,0;行号
MOVCX,SI
MOVDL,CL;DL,列号
INT10H
MOVAH,9;写当前光标
MOVBH,0;页号
MOVAL,ZHIWEI[SI];要写的字符
MOVBL,3;属性值(颜色)
MOVCX,1;重复次数
INT10H
INCSI
CMPSI,60
JBBIAOTI
LEADX,BLANK
MOVAH,9
INT21H;回车换行
POPDX
POPCX
POPBX
POPAX
POPSI
RET
TittleENDP
4.2.2加密/解密子程序
加密子程序采用ASCII码值加4的方法,而解密则是采用ASCII码值减4的方法,循环赋值,代码如下:
JIAMI(JIEMI)PROCNEAR
CALLCLEAR;清屏
LEADX,BYTE
MOVAH,9
INT21H;提示输出
LEADX,WORD
MOVAH,0AH
INT21H;键盘输入
LEADX,BLANK
MOVAH,9
INT21H;回车换行
CALLZHUANCUN;转存
MOVCL,WORD[1];键盘输入个数
MOVSI,0
AA3:
ADDCHEN[SI],4;加密方法
INCSI
LOOPAA3
MOVCHEN[SI+1],0AH
MOVCHEN[SI+2],0DH
MOVCHEN[SI+3],'$';结束符
JMPSCREEN
RET
JIAMI(JIEMI)ENDP
4.2.3转存子程序
转存子程序是通过指针的移动将WORD中的字符串逐字读取并存入CHEN中,其代码如下:
ZHUANCUNPROCNEAR
PUSHBX
MOVSI,0
MOVCL,WORD[SI+1];输入个数
MOVCH,0
AA5:
MOVBL,WORD[SI+2]
MOVCHEN[SI],BL
INCSI
LOOPAA5;转存
POPBX
RET
ZHUANCUNENDP
4.2.4清屏子程序
调用BIOS6号功能,AL为上滚行数,BH为显示属性,CX为
上滚部分左上角行列号,DX为上滚部分右下角行列号,代码如下:
MOVAH,6;6号功能调用-屏幕上滚
MOVAL,0;上滚的行数
MOVBH,7;黑底
MOVCH,0;上滚部分左上角在0行0列
MOVCL,0
MOVDH,24;上滚部分右下角在24行79列
MOVDL,79
INT10h
4.3BIOS中的功能说明
在本次课程设计中,为了获得良好的显示效果,用到了基本输入输出系统BIOS)中的几个功能,再次说明一下。
(1)设置光标位置
入口参数:
AH=2,BH=页号,DH=行号,DL=列号。
出口参数:
无
说明:
对于页号,通常情况下设置为0。
该操作是控制光标的重要操作。
(2)屏幕上滚
入口参数:
AH=6,AL=上滚行数,CX=上滚部分左上角的行、列号,DX=上滚部分右下角的行、列号,BH=显示属性。
出口参数:
无
说明:
当AL=0时,表示整个屏幕为空白,及清屏幕。
当AL
0,窗口(即滚动部分)底部为空白输入行。
(3)在当前光标位置写字符及其属性
入口参数:
AH=9,BH=页号,AL=要写字符的ASCII码,BL=属性值,CX=重复次数。
出口参数:
无
说明:
在当前光标位置写字符的操作不改变光标的位置,所以每次写字符前,都必须使用2号功能重新设置光标的位置。
4.4子程序说明
(1)子程序名;JIAMI(JIEMI)
功能:
ASCII值加(减)4进行加密并输出。
先进行清屏,然后提示输入要加密的字符串,由于键入的明码在AL中,存入了WORD缓存区中,使用ZHUANCUN子程序转存到CHEN后,对每个元素值加30即可,然后调用DOS的9号功能使密码输出并显示在屏幕上。
(2)子程序名:
TITTLE
功能:
首先设置光标位置,然后在光标位置写字符,要写的字符属性值由10H调用实现。
采用循环算法输出一个字符串。
(3)子程序名;WARNING
功能:
首先设置光标位置,然后在光标位置写字符,要写的字符属性值由10H调用实现。
采用循环算法输出一个字符串,和TITTLE子程序一样。
(4)子程序名:
ZHUANCUN
功能:
首先赋值循环次数,采用循环算法一个个赋值转存。
(5)子程序名:
CLEAR
功能:
首先堆栈压入,保护现场。
然后调用6号功能键滚屏,最后再用2号功能键进行光标定位,弹出堆栈。
5.程序调试过程及分析
(1)将编写好的程序输入到MF平台上,进行以下操作:
汇编源程序——连接目标码——运行程序。
弹出对话框,如图5-1所示。
图5-1程序开始运行后界面
其中字符串“Characterencryption/translationprogram”显示为天蓝色,这样显示醒目标题信息,这是因为在程序的开始处有这样的输出提示符的程序,并调用了BIOS的2号功能(显示光标位置)、9号功能(在当前光标位置写字符及其属性)使其显示为黄色,在以后的循环执行中也会有这样的提示。
(2)当操作者按下Q/q时,对话框自动关闭:
当按下1或2时,则会显示以下内容,如图5-2所示。
图5-2选择加密或解密后界面
若选择其他按键,则会出错报警,并要求重新选择,对话框显示如图5-3所示。
图5-3错误警告信息
(3)当操作者选择按键1,即加密时,接着先输入要加密的字符,输完后按回车键,即会出现图5-4所示信息,上一行为原码,下一行为密码。
加密后回到功能选择提示符,用户可重新选择加密,解密或退出。
图5-4加密显示界面
(4)当操作者选择按键2,即解密时,接着先输入密码字符,输完后按回车键,即会出现图5-5所示信息,上一行为需要解密的密码码,下一行为原码。
解密后回到功能选择提示符,用户可重新选择加密,解密或退出。
图5-5解密显示界面
心得体会
最近,我们花了近两个星期的时间进行了《微机原理及接口技术》的课程设计,个人觉得还是相当有收获的。
平时上课只是接触课本上已经写好的程序,只是知道它大概有什么功能,却始终没有去真正验证这些功能,去感受汇编语言真正的用途。
这次的课程设计不仅要我们能读懂一些程序,还要求我们能自己根据要求设计程序。
我们小组的题目是“字符加密汇编语言程序设计”,刚开始拿到题目是觉得并不是特别难,但当真正入手编程时,却发现有许多问题要考虑,比如:
操作者输入的字符是未知的,字符的数量也是未知的;当操作人输入原码或密码时,两者要对应同时显示出来;当程序运行后,屏上显示的信息要有条理,要让操作人能看懂,知道下一步该干什么等等问题。
不过办法总比问题多,有些问题我们通过小组讨论就解决了,但一些技术性的问题,我们又通过看书,上网查资料的方式慢慢琢磨,不断地修改程序,不断地运行,在不断地改错中进步,最终得到还算比较完整的程序,可以满足要求。
加密是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。
加密技术是最常用的安全保密手段。
对于像字符加密/解密这样的程序,在生活中还是具有很大的实用价值的。
我们可以通过这样的程序对现实生活中的一些私人信息进行加密,同时,加密/解密在军事方面也有很大的作用。
通过这次微机课设,自己还是有很大收获的。
不仅加深了对之前微机课堂学习到的汇编知识,同时也让自己接触到了一些新鲜的汇编功能,比如对DOS调用和BIOS调用的一些编程,这些功能可以让我们在满足主程序逻辑功能的同时,让程序更加的丰满、生动。
在这次编程中我就利用DOS调用和BIOS调用功能让程序标题信息以及警示信息以不同的颜色显示在程序运行的对话框中。
还利用网上资料实现了清屏和换行的功能,使得程序运行重复运行或输入有误时,窗口中不至于太凌乱。
汇编语言虽然不像C语言那样高级,那样方便使用,但它在微机中还是有很大的作用的,因此,我们应该重视它,在学好汇编语言的基础上进行更高层次的语言学习。
这次课设对自己编程能力的提升还是有很大帮助的。
参考文献
(1)彭虎等编著.微机原理与接口技术(第二版).北京:
电子工业出版社,2008
(2)沈美明,温东禅.IBM-PC汇编语句程序设计(第2版).北京:
清华大学出版社,2001
(3)任向明,卢惠林.汇编语言程序设计实用教程.北京:
清华大学出版社,2009
(4)马力妮.80x86汇编语言程序设计.北京:
机械工业出版社,2004
(5)曹加恒,苏光奎,许先斌.新一代汇编语言程序设计.北京:
高等教育出版社,2003
附录(程序清单)
DATASEGMENT
ZHIWEIDB'Characterencryption/translationprogram',0DH,0AH,'$'
BUFFDB'1:
encrypt2:
translateQ/q:
exit?
',0DH,0AH,'$'
BYTEDB0DH,0AH,'pleasepressthesentence',0DH,0AH,'$'
BLANKDB0DH,0AH,'$'
WORDDB100,?
40DUP(?
)
CHENDB50DUP(0)
AGAINDB'sorry,pleasechooseagain!
',0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
CALLTITTLE
ONE:
LEADX,BUFF
MOVAH,09
INT21H;功能选择
MOVAH,1
INT21H;单字符输入
CMPAL,31H
JEAA1
CMPAL,32H
JEAA2
CMPAL,51H
JEDONE
CMPAL,71H
JEDONE;比较跳转
CALLCLEAR
CALLWARNING;警报
LOOPONE
AA1:
CALLJIAMI;选择加密
AA2:
CALLJIEMI;选择解密
SCREEN:
LEADX,CHEN
MOVAH,9
INT21H;输出显示
LEADX,BLANK
MOVAH,9
INT21H;回车换行
LOOPONE
DONE:
MOVAX,4C00H
INT21H
;*******************************
TITTLEPROCNEAR
PUSHSI
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVSI,0
BIAOTI:
MOVAH,2;设置光标位置
MOVBH,0;页号
MOVDH,0;行号
MOVCX,SI
MOVDL,CL;DL,列号
INT10H
MOVAH,9;写当前光标
MOVBH,0;页号
MOVAL,ZHIWEI[SI];要写的字符
MOVBL,3;属性值(颜色)
MOVCX,1;重复次数
INT10H
INCSI
CMPSI,60
JBBIAOTI
LEADX,BLANK
MOVAH,9
INT21H;回车换行
POPDX
POPCX
POPBX
POPAX
POPSI
RET
TITTLEENDP
;******************************
;******************************
WARNINGPROCNEAR
PUSHSI
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVSI,0
PP:
MOVAH,2;设置光标位置
MOVBH,0;页号
MOVDH,0;行号
MOVCX,SI
MOVDL,CL;DL,列号
INT10H
MOVAH,9;写当前光标
MOVBH,0;页号
MOVAL,AGAIN[SI];要写的字符
MOVBL,4;属性值
MOVCX,1;重复次数
INT10H
INCSI
CMPSI,26
JBPP
LEADX,BLANK
MOVAH,9
INT21H;回车换行
POPDX
POPCX
POPBX
POPAX
POPSI
RET
WARNINGENDP
;*******************************
;加密算法
JIAMIPROCNEAR
CALLCLEAR;清屏
LEADX,BYTE
MOVAH,9
INT21H;提示输出
LEADX,WORD
MOVAH,0AH
INT21H;键盘输入
LEADX,BLANK
MOVAH,9
INT21H;回车换行
CALLZHUANCUN;转存
MOVCL,WORD[1];键盘输入个数
MOVSI,0
AA3:
ADDCHEN[SI],4;加密方法
INCSI
LOOPAA3
MOVCHEN[SI+1],0AH
MOVCHEN[SI+2],0DH
MOVCHEN[SI+3],'$';结束符
JMPSCREEN
RET
JIAMIENDP
;*******************************
;解密算法
JIEMIPROCNEAR
CALLCLEAR;清屏
LEADX,BYTE
MOVAH,9
INT21H;提示输出
LEADX,WORD
MOVAH,0AH
INT21H;键盘输入
LEADX,BLANK
MOVAH,9
INT21H
CALLZHUANCUN;转存
MOVCL,WORD[1];输入个数
MOVSI,0
AA4:
SUBCHEN[SI],4
INCSI
LOOPAA4;解密
MOVCHEN[SI+1],0AH
MOVCHEN[SI+2],0DH
MOVCHEN[SI+3],'$';结束
JMPSCREEN
RET
JIEMIENDP
;*******************************
;存储
ZHUANCUNPROCNEAR
PUSHBX
MOVSI,0
MOVCL,WORD[1];输入个数
MOVCH,0
AA5:
MOVBL,WORD[SI+2]
MOVCHEN[SI],BL
INCSI
LOOPAA5;转存
POPBX
RET
ZHUANCUNENDP
;*******************************
;子程序名;CLEAR
;功能:
对屏幕进行清除
CLEARPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,6;6号功能调用-屏幕上滚
MOVAL,0;上滚的行数
MOVBH,7;黑底
MOVCH,0;上滚部分左上角在0行0列
MOVCL,0
MOVDH,24;上滚部分右下角在24行79列
MOVDL,79
INT10h
MOVAH,2
MOVBH,0
MOVDX,0000H
INT10H;光标定位
POPDX