安徽省巢湖学院计算机与信息工程学院
课程设计报告
课程名称 微型计算机系统原理及应用
课
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
名称 密码设置模拟
专业班级 11计本(3)班
学 号 11011176
姓 名 胡小松
联系方式 156********
指导教师 叶海燕
完成日期: 年 月 日
目 录
概述 …………………………………………………… 3
一 设计内容与要求 ………………………………… 3
二 设计思想…………………………………………… 3
三 系统连线图………………………………………… 4
四 程序
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图 ……………………………………… 5
五 程序源代码 ……………………………………… 9
六 课程设计
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
报告………………………………… … 18
七 设计心得………………………………………… …… 18
八 参考文献……………………………………… … …… 18
代码转换程序课程设计报告
3
概述
汇编语言是用指令助记符、符号地址和标号等
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
写程序的语言。用汇编语言
编写的程序,称为汇编语言源程序。
计算机不能直接识别和执行汇编语言,汇编语言源程序必须进行加工翻译转换为机器语言程序。将源程序翻译成机器语言程序的过程叫汇编。完成这种工作的语言程序称为汇编语言。
1. 设计内容与要求
编写程序可以进行密码的设置(第一次)和修改(已设置密码)。
2. 设计思想
目的:学习汇编语言综合应用程序设计方法,提高汇编语言实际应用能力,充分了解计算机硬件和软件,完成理论到实践的推进过程。
要求:1.根据微机软、硬件条件,没人选定一个具有一定综合性的程序设计题目
(1)、对题目进行模块分析
(2)(2)、系统设计实用,功能全面
(3)、编程简练、清晰,可读性强,学习良好的程序设计风格。按质、按量,并按时间完成课程设计的任务。
2.按照所安排的集中上机时间内完成程序调试任务。
(1)、熟悉汇编语言的程序设计,BIOS中断调用,DOS系统功能调用等相关知识。
(2)、熟悉汇编的上机环境,掌握汇编和各种程序调试方法,提高调试程序的效率。
3、撰写设计论文(说明书),要求层次清楚,语言流畅。
4 ,设计完成时英按时提交设计论文及设计程序。每组一个文件夹,文件夹以自己的名 字和学号命名。
5、提供可运行的课程设计程序,参加上机面试答辩。
3. 系统连线图
4. 程序流程图
5. 源程序代码
SCREEN MACRO BUF ;定义一个名为SCREEN的宏,且哑元表中只有一个哑元BUF; MOV DL,2AH ;输出ASCII码的*号 PUSH BX ;将BX压栈 MOV AH,3 ;辅助设备的输入
MOV BH,0
INT 10H ;BIOS中断显示服务,在当前光标处显示字符,获取光标位置把行列号放入DH,DL
MOV CX,DX
MOV AH,7 ;键盘输入,但无回显
MOV AL,0
MOV DL,10 ;设定背景色的宽度
MOV BH,0H ;设定字体颜色???关系到用户的注册
INT 10H ;重新设置页面属性将CH,CL 与DH,DL围的区域设置成黑底黑色
LEA DX,BUF ;取得BUF
MOV AH,0AH ;键盘输入到缓冲区 INT 21H ;输入字符串
MOV AH,3 ;辅助设备的输入 MOV BH,0 INT 10H
MOV CX,DX
MOV AH,7 ;输入的密码在程序继续运行时的颜色7表示黑底白字 MOV AL,0
MOV DL,10
MOV BH,07H ;设定程序运行后的显示字体颜色,07表示黑底白字,0A表示绿色字体,BH设置颜色值
INT 10H ;重新设置页面属性,恢复黑底灰字
POP BX ;恢复原来输入的字符 ENDM ;宏定义结束 DATA SEGMENT
F2 DB 10 DB ?
BUF2 DB 10 DUP('$'),'$' ;存放键盘输入的用户名 F3 DB 10
DB ?
BUF3 DB 10 DUP('$') ;存放第一次输入的密码 F4 DB 10
DB ?
BUF4 DB 10 DUP('$') ;存放第二次输入的密码 F5 DB 10 DB ?
BUF5 DB 10 DUP('$') ;存放所要比较的密码 FILEPATH DB 'C:\DATA.TXT',0 ;数据读写和存放的路径
H DW ?
BUF1 DB 450 DUP('?') ;存放从数据文件中读取的字符,将其全部读取到缓冲区
MESS1 DB 0DH,0AH ;提示信息,以下与此相同 DB
'**************+----------------------------------------------+****************',0DH,0AH DB ' | HELLO ,you have a fun for my design^-^. |',0DH,0AH DB ' | |',0DH,0AH DB ' | Password system for asm program design. |',0DH,0AH DB ' | |',0DH,0AH DB ' | |',0DH,0AH DB ' | |',0DH,0AH DB ' | |',0DH,0AH DB ' | Program Design:WangTY Date: 2012.12.20|',0DH,0AH DB
'**************+----------------------------------------------+****************',0DH,0AH DB '1.NewUser Regisit 2.OldUser To Login In 3.Help Information 4.Quit ',0DH,0AH
DB 0DH,0AH,'Please select the menu',0DH,0AH,'$'
MESS2
DB'
',0DH,0AH,' $'
MESS3 DB ' ',0DH,0AH,'Welcome,You have logined in successfully.',0DH,0AH DB '1.Change the password',0DH,0AH DB '2.Anykey to main menu',0DH,0AH,'$'
MESS4 DB 0DH,0AH,0DH,0AH
DB ' Sorry,this user has exist.back to main menu and retry ',0DH,0AH DB '
',0DH,0AH,'$'
MESS5 DB 0DH,0AH,0DH,0AH,0DH,0AH
DB ' Successed in changing the password ',0DH,0AH,'$'
MESS6 DB 0DH,0AH,'Regisit successfully',0DH,0AH,'$' NAME1 DB 0DH,0AH,'Input the name',0DH,0AH,'$' NAME2 DB 0DH,0AH,'Input your name',0DH,0AH,'$' PASS1 DB 0DH,0AH,'Reset the password',0DH,0AH,'$'
PASS2 DB 'Input your password again',0DH,0AH,'$'
PASS3 DB 0DH,0AH,0DH,0AH,' Sorry,two passwords are different ' DB 0DH,0AH, '$'
PASS4 DB 'Input the password to login in',0DH,0AH,'$' WORD4 DB 0DH,0AH DB 0DH,0AH
DB ' Sorry,your password is wrong,you cannot get in ',0DH,0AH
DB 0DH,0AH
DB 0DH,0AH,'$'
WORD5 DB ' Sorry ,there is no this user ',0DH,0AH
DB '1.Retry agian ',0DH,0AH
DB '2.Back to main menu',0DH,0AH,'$'
WORD6 DB 0DH,0AH,' Password is very simple,please retry ',0DH,0AH,'$'
TUICHU DB 0DH,0AH,' Thank you for your test. ','$'
HELPMSG DB 0DH,0AH
DB 0DH,0AH,'HELP INFORMATION:',0DH,0AH DB 0DH,0AH,'1.For newuser to regisit',0DH,0AH DB 0DH,0AH,'2.For olduser to login in',0DH,0AH DB 0DH,0AH,'3.View the help information',0DH,0AH
DB
0DH,0AH,'4.Quit the program',0DH,0AH
DB 0DH,0AH,'Warnning:the length of password cannot beyond 9 byte',0DH,0AH,'$' DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA START:MOV AX,DATA MOV DS,AX MOV ES,AX
MAIN: CALL IMPORT ;将BUF2-5中全部放入$避免第二次使用出错 CALL OPEN ;将文件的内容读入BUF1缓存区 CALL SEACH ;查找有多少有效字节,放入BX LEA DX,MESS1
MOV AH,09H
INT 21H ;显示程序初始信息
MOV AH,01H
INT 21H ;由用户输入进行选择
CALL X1 ;调用X1子程序,进行菜单项输入的判断
X1: CMP AL,'1'
JE XJ ;如果输入为1,则跳至xj JMP X2 ;否则,强制跳转到X2
X2: CMP AL,'2'
JE LOGIN ;在X1的基础上,如果输入为2,则跳到LOGIN JMP X3 ;否则跳到X3来判断
X3: CMP AL,'3'
JE HELP ;在X2的基础上,如果输入为3,则跳至help JMP EXIT ;否则退出程序,返回DOS
HELP:LEA DX,HELPMSG ;显示帮助信息 MOV AH,09H INT 21H
JMP EXIT
XJ: CALL INNAME ;调用NAME子程序请用户输入新用户名
CALL SEACHNAME ;调用子程序查找用户名是否存在,存在返回AL为1,不存在返回AL为0
CMP AL,1
JNE NEXT21 ;用户不存在,跳到输入密码程序 LEA DX,MESS4 MOV AH,09H
INT 21H ;显示用户名已经存在
JMP MAIN ;用户存在显示出错并且跳出。
NEXT21:CALL AGPASS ;调用2次输入密码并将用户名密码写入BUF1的子程序 CALL WRITE ;将被改写的BUF1重新写入文件。 MAIN2:JMP MAIN ;返回MAIN程序 LOGIN:CALL INNAME ;调用子程序输入用户名。 CALL SEACHNAME 查询用户是否存在。 CMP AL,1
JE QUIT ;用户存在则跳转到QUIT子程序
LEA DX,WORD5
MOV AH,09H
INT 21H ;提示没有此用户,请用户进行重试后返回操作
MOV AH,01H
INT 21H ;接受用户的键盘输入
CMP AL,'1'
JNE BACK ;如果不为1,则返回主菜主菜单
JMP LOGIN ;否则跳转到用户登陆处,重试一次 BACK: JMP MAIN2 QUIT: LEA DX,PASS4 MOV AH,09H
INT 21H ;提示输入密码
SCREEN F5 ;调用宏输入密码并且不回显
LEA DI,BUF5 MOV CX,10
MAIN1:MOV AH,[SI] ;调用SEACHNAME子程序时,SI指向找到的用户名的下一位即密码的第一位。
CMP AH,[DI]
JNE EXITA ;不同则跳转到EXITA子程序 INC SI ;SI加1,准备再次进行比较
INC DI
LOOP MAIN1 ;比较用户名后的密码是否与输入BUF5中的相同
LEA DX,MESS2 ;显示信息让让用户选择 MOV AH,09H INT 21H
LEA DX,BUF2 ;从缓冲区中读取登陆的用户名 MOV AH,09H INT 21H
LEA DX,MESS3 MOV AH,09H
INT 21H ;显示菜当2让用户选择
MOV AH,01H
INT 21H ;接受用户输入
CMP AL,'1'
JNE BACK ;如果输入不为1,则跳至BACK,然后回到主菜单
CALL AGPASS ;输入为1,则调用2次输入密码并将用户名密码写入BUF1的子程序
CALL WRITE ;调用WRITE,进行写文件操作 JMP MAIN
EXITA:LEA DX,WORD4 ;提示出错并且跳出 MOV AH,09H
INT 21H
JMP MAIN ;返回主程序
OPEN PROC NEAR ;读文件内容到BUF1的子程序
MOV AH,3DH ;打开文件
MOV AL,0 ;3DH的参数号码 LEA DX,FILEPATH ;获取文件路径信息到DX寄存器中 INT 21H
JC NOFILE ;如果文件不存在则跳到NOFILE
MOV H,AX
JMP READ ;文件存在则把文件号放入定义的存储区H中并且跳到READ
NOFILE:CALL WRITE ;文件不存在调用建立文件程序 JMP INEXIT ;退出子程序
READ:MOV AH,3FH MOV BX,H
MOV CX,450 ;CX寄存器初始为450个字节 LEA DX,BUF1
INT 21H ;将文件中的内容读出450字节放入BUF1中 INEXIT: RET
OPEN ENDP ;子程序结束
SEACH PROC NEAR ;查找有效字节数程序,因为BUF1全用?填充,所以采取查找?符号的方式
MOV CX,20 ;因为读取的只有450字符每个用户占20字节所以最多有20个用户。
MOV BX,0 MOV AL,'?'
MAIN01: LEA SI,BUF1[BX] CMP AL,[SI] JE EXIT01
ADD BX,20 LOOP MAIN01
EXIT01:RET
SEACH ENDP ;子程序结束
WRITE PROC NEAR ;新建文件子程序,该程序采用重新建立文件的方式来重写文件
PUSH BX
MOV AH,3CH ;建立文件
MOV CX,00 LEA DX,FILEPATH ;取得文件路径,进行读写操作
INT 21H
MOV H,AX ;建立一个文件把文件号放入H中,如果文件已经存在将其破坏。
MOV AH,40H ;请求写入文件
MOV BX,H ;将文件代号放入BX寄存器 MOV CX,450 ;定义一个450个字节的存储空间,存放缓冲区的所有数据 LEA DX,BUF1 ;取得BUF1缓冲区的内容到DX寄存器
INT 21H ;将缓存在BUF1中的所有内容写入新建立的文件
MOV AH,3EH ;关闭文件
MOV BX,H ;与上面同
INT 21H ;关闭文件保证文件被保存 POP BX RET
WRITE ENDP ;子程序结束
INNAME PROC NEAR ;输入用户名,最长9位放入BUF2中不足9位的名字BUF2则用$符号填满 MOV AH,09H
LEA DX,NAME1 ;显示提示信息:输入用户名 INT 21H
MOV AH,0AH ;由键盘输入字符串,放到DX寄存器中 LEA DX,F2 ;取得F2的存储空间 INT 21H
RET
INNAME ENDP ;子程序结束
SEACHNAME PROC NEAR ;查找用户名子程序,该程序在查找到用户名后将用户名的第一个字符的地址放入BX中 MOV DH,20 MOV AX,BX
DIV DH
MOV DX,AX ;用户定义为只占20字节的空间 MOV BX,0
MAIN02: MOV CX,10 ;用户名最长10位 LEA SI,BUF1[BX]
LEA DI,BUF2 CLD
REPE CMPSB ;用BUF1中以BX的偏移地址为首地址的10个字符比较BUF2中的10个字符
JE NEXT02 ;找到相同的用户名,则跳出到NEXIT02,将AX置 ADD BX,20 ;BX从0开始以20的步长增加如果找到用户名BX中是该用户名首字符偏移地址 DEC DX
CMP DX,0
JA MAIN02 ;如果还有用户未比较,则继续比较
MOV AL,0
JMP EXIT02 ;所以用户都比较后未找到相同用户名将AX置0跳到子程序
结束。
NEXT02: MOV AL,1 JMP EXIT02 EXIT02: RET
SEACHNAME ENDP ;子程序结束
AGPASS PROC NEAR ;两次输入密码,相同则将BUF2中的名字和BUF3中的密码输入到BUF1中相应空间 NPASS: LEA DX,PASS1
MOV AH,09H
INT 21H ;提示输入新密码
SCREEN F3 ;调用宏无回显输入密码到BUF3 MOV AH,3
CMP [F3+1],AH
JAE AGAIN ;比较如果输入的字符少于3位则提示密码太简单 LEA DX,WORD6 MOV AH,09H INT 21H
JMP NPASS ;提示密码简单并且跳回要求重新输入 AGAIN:LEA DX,PASS2
MOV AH,09H
INT 21H ;提示再次输入密码
SCREEN F4 ;调用宏无回显输入密码到BUF4
MOV CX,10
LEA SI,BUF3 ;将BUF3数据区的当前值放到变址SI中,从而进行下面的重复比较
LEA DI,BUF4 ;与上面同,不过,将BUF4第二次放入的密码放到变址DI中
CLD
REPE CMPSB ;重复比较
JE NEXT03 ;BUF3和BUF4中的内容相同,则跳到NEXT03
LEA DX,PASS3 MOV AH,09H
INT 21H ;提示密码不对
JMP EXIT03 ;不同提示出错,跳到子程序结束 NEXT03:MOV CX,10
LEA SI,BUF1[BX];将SI指向找到的用户名的首地址 LEA DI,BUF2 FIR: MOV AH,[DI]
MOV [SI],AH ;将两次输入的进行比较
INC DI ;同时DI、SI加1,依次比较两次输入的密码是否一致 INC SI
LOOP FIR ;将BUF2中内容写到该用户名的空间去
ADD BX,10 ;将BX加10使其指向密码的首地址
MOV CX,10
LEA SI,BUF1[BX] 将BUF1中存储信息给SI,以便以后进行写文件操作时,进行覆盖
LEA DI,BUF3 ; IPAS: MOV AH,[DI] MOV [SI],AH INC DI
INC SI
LOOP IPAS ;将BUF3的内容写到该用户后面的密码空间去 ADD BX,10
LEA DX,MESS5 MOV AH,09H
INT 21H ;提示修改密码成功 EXIT03:RET
AGPASS ENDP ;子程序结束
IMPORT PROC NEAR ;将BUF2-BUF5中放入$符号避免使用出错 MOV CX,10 MOV AL,'$'
LEA DI,BUF2 ;显示BUF2的$,放到DI中 REP STOSB ;字符串存取
MOV CX,10 MOV AL,'$'
LEA DI,BUF3 ;第一次输入的密码信息放到DI中
REP STOSB ;进行比较
MOV CX,10
MOV AL,'$'
LEA DI,BUF4 ;第二次输入的信息也放到DI中,以便比较 REP STOSB
MOV CX,10
MOV AL,'$'
LEA DI,BUF5 ;取得BUF5字节空间的地址,进行操作 REP STOSB RET
IMPORT ENDP ;子程序结束
EXIT: CALL WRITE ;调用重写文件程序将BUF1内容写入文件 LEA DX,TUICHU ;退出时显示的内容 MOV AH,09H INT 21H
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END START
6. 课程设计总结报告
课程设计中所遇到的主要问题和解决方法 课程设计中存在的不足,需要进一步改进的思想
通过同学的帮助和上网查找资料,解决了一些,但还有些有待优化的地方
7. 设计心得体会
本次课程设计随着报告的完成也将告一段落,这次实践要求我们有很扎实的理论知识做基础,把课本上各章节的内容学懂,学透,融会贯通才能达到课题的要求。通过这次设计,我对汇编语言有了更深的理解,这是一种指令与机器指令相对应的语言,它的指令同机器指令一样比较具体也比较单一。在熟悉了汇编语言的使用发法之后,就该逐渐掌握用汇编语言编写程序的基本思想。在设计的过程中我对原来学过的各种指令,规则的用法有了更加明确的概念,曾经觉得很抽象的问题在这次设计中通过跟同学一起讨论以及查阅参考资料也逐渐解决了不少。值得一提的是,通过这次的实践,我们真正了解了做大型复杂程序时各部门的分工原理和分工合作的必要性。我还意识到,在这个信息至上的时代,加密在任何领域都是不可或缺维护权益的手段,而计算机语言则可以以一种最直接完备的手段实现这一切我们需要的功能,因此,我们在平时的学习当中应该更高的要求自己,对所学的知识要运用到熟练为止,真正的理解而不是单纯的记忆。这次设计中遇到的还没有解决的问题应该成为我们追求更深层次知识的动力,努力不懈的继续向前。
8. 参考文献
1.沈美明,温东婵编写,《IBM-PC汇编语言程序设计》,清华大学出版社,2001年8月第二版,2003年3月第八次印刷。 2.周明德等编著,《80X86的结构与汇编语言程序设计》,情华大学出版社 3汇编小站,