Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5785415
  • 博文数量: 409
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 8273
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-23 19:15
个人简介

qq:78080458 学习交流群:150633458

文章分类

全部博文(409)

文章存档

2019年(127)

2018年(130)

2016年(20)

2015年(60)

2014年(41)

2013年(31)

分类: 嵌入式

2014-03-28 13:36:46

DATAS SEGMENT
    ;此处输入数据段代码  
    DOC DB 0DH, 0AH, '======================================='
    DB  0DH, 0AH, '| Simple password sysytem       |'
    DB  0DH, 0AH, '|    Copy Right By DDDDD 2014-3-28    |'
    DB 0DH, 0AH, '=======================================$'
    XING DB 0DH, 0AH, '*************************************$'
    SETPASS DB 0DH, 0AH, 'Please set your password:$'
    RESPASS DB 0DH, 0AH, 'Please set your password again:$'
    SORRY DB 0DH, 0AH, 'The two password you have set is not same!!!$'
    INPUT DB 0DH, 0AH, 'Please input your password:$'
    SUCCESS DB  0DH, 0AH, 'WOW! Your card has 10000 dollars!$'
    FAIL DB 0DH, 0AH, 'SORRY! your password is not right$'
    TWO DB  0DH, 0AH, 'YOU have only two chance now!$'
    ONE DB  0DH, 0AH, 'YOU have only one chance now!$'
    ZERO DB  0DH, 0AH, 'YOU have no chance now!$'
    PASS DB 7 ;设置密码 存放位置
    DB ?
    DB 7 DUP(?)
PASS1 DB 7 ;再次设置密码  存放位置
    DB ?
    DB 7 DUP(?)
PASS2 DB 7 ;输入密码 存放位置
    DB ?
    DB 7 DUP(?)
DATAS ENDS


STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS


EXTRA SEGMENT
PASS11 DB 9 DUP(?)  ;PASS1 拷贝到PASS11
PASS22 DB 9 DUP(?)  ;PASS2 拷贝到PASS22
EXTRA ENDS


CODES SEGMENT
    ASSUME CS:CODES, DS:DATAS, SS:STACKS, ES:EXTRA
START:
    MOV AX, DATAS
    MOV DS, AX
    MOV AX, EXTRA
    MOV ES, AX
    ;此处输入代码段代码
    MOV AH, 9 ;9号功能,屏幕输出字符串
    LEA DX, DOC ;打印版权,将字符串首地址给DX
    INT 21H
    
    MOV AH, 9
    LEA DX, XING  ;打印*****
    INT 21H
    
    MOV AH, 9H
    LEA DX, SETPASS ;打印Please set your password:
    INT 21H
    
    MOV AH, 0AH ;0AH 等待输入字符串
    LEA DX, PASS ;设置密码,密码存放在PASS
    INT 21H
    
    MOV AH, 9H
    LEA DX, RESPASS ;打印Please set your password again:
    INT 21H
    
    MOV AH, 0AH
    LEA DX, PASS1 ;再次设置密码,密码存放在PASS1
    INT 21H
    
  CALL CMPPASS01 ;比较两次设置密码是否相同
  JE SAME
 
  MOV AH, 9H
  LEA DX, SORRY   ;两次设置密码不同,打印The two password you have set is not same!!!
  INT 21H
 
  JMP START
 
 
SAME: ;密码设置正确
    MOV AH, 9
    LEA DX, XING ;打印******
    INT 21H
    
  MOV AH, 9H
  LEA DX, INPUT   ;打印please input your password:
  INT 21H
 
  MOV AH, 0AH ;输入密码
  LEA DX, PASS2   ;密码存放在PASS2
  INT 21H
 
  CALL CMPPASS02   ;比较输入的密码和设置的密码
  JE RMB ;相同,则会显示余额
 
  MOV AH, 9H
  LEA DX, FAIL ;不相同提示失败,SORRY! your password is not right
  INT 21H
 
  MOV AH, 9H
  LEA DX, TWO ;还有2次机会,YOU have only two chance now!
  INT 21H 
 
    MOV AH, 9H
    LEA DX, XING ;打印*******************
    INT 21H
    
    MOV AH, 9H
  LEA DX, INPUT   ;打印please input your password:
  INT 21H
 
  MOV AH, 0AH
  LEA DX, PASS2 ;第二次输入密码,密码存放在PASS2
  INT 21H
 
  CALL CMPPASS02 ;比较输入的密码和设置的密码
  JE RMB ;相同,则会显示余额
 
  MOV AH, 9H
  LEA DX, FAIL ;不相同提示失败,SORRY! your password is not right
  INT 21H
 
  MOV AH, 9H
  LEA DX, ONE ;还有1次机会,YOU have only one chance now!
  INT 21H 
 
    MOV AH, 9
    LEA DX, XING ;打印**********
    INT 21H
    
    MOV AH, 9H
  LEA DX, INPUT   ;打印please input your password:
  INT 21H
 
  MOV AH, 0AH
  LEA DX, PASS2 ;第三次输入密码,密码存放在PASS2
  INT 21H
 
  CALL CMPPASS02 ;比较输入的密码和设置的密码
  JE RMB ;相同,则会显示余额
 
  MOV AH, 9H
  LEA DX, FAIL ;不相同提示失败,SORRY! your password is not right
  INT 21H
 
  MOV AH, 9H
  LEA DX, ZERO ;没有机会了 you have no chance
  INT 21H 
 
JMP OVER


RMB:
    MOV AH, 9H
    LEA DX, XING ;打印*****
    INT 21H
    
MOV AH, 9H
LEA DX, SUCCESS ;显示余额 your card have 10000 dollars!
INT 21H  


OVER: 
    MOV AH,4CH
    INT 21H
 
    
CMPPASS01 PROC
LEA SI, PASS1 ;源地址PASS1
LEA DI, PASS11 ;目标地址PASS11
MOV CX, 9
CLD
REP MOVSB ;将输入的密码移动到附加段PASS11,字节移动,重复次数cx

LEA SI, PASS ;源地址PASS,数据段
LEA DI, PASS11 ;目标地址PASS11,附加段
MOV CX, 9
REPE CMPSB ;比较输入的密码和设置的密码,字节比较重复次数cx,不等于会自动退出比较
RET
CMPPASS01 ENDP


CMPPASS02 PROC
LEA SI, PASS2
LEA DI, PASS22
MOV CX, 9
CLD
LAST11:
MOVSB ;采用loop循环进行字节移动,循环次数cx
LOOP LAST11

LEA SI, PASS
LEA DI, PASS22
MOV CX, 9
CLD
LAST21:
CMPSB
JNE OVER11 ;发现不等于就跳出,不比较了
LOOP LAST21
OVER11:
RET
CMPPASS02 ENDP


CODES ENDS
    END START


阅读(16554) | 评论(3) | 转发(1) |
给主人留下些什么吧!~~

garyv2014-04-05 12:51:16

garyv:8086年代的汇编,看起来熟悉又陌生。。。。。。。。

你的代码用到了很多的 INT 0x21,印象中是MS-DOS系统调用,看代码只是为了显示东西,完全可以绕过系统直接写显存0xB8000。。。。。。。。如果是裸机代码的话 

谈不上失败,过谦了。
只是谈谈另一种解决方法而已。

回复 | 举报

一生有你llx2014-03-30 11:38:39

garyv:8086年代的汇编,看起来熟悉又陌生。。。。。。。。

你的代码用到了很多的 INT 0x21,印象中是MS-DOS系统调用,看代码只是为了显示东西,完全可以绕过系统直接写显存0xB8000。。。。。。。。如果是裸机代码的话 

纯属为了教学,就是想设计一个综合性的实验,体现所有的汇编知识,貌似失败了。见笑哈

回复 | 举报

garyv2014-03-29 20:37:04

8086年代的汇编,看起来熟悉又陌生。。。。。。。。

你的代码用到了很多的 INT 0x21,印象中是MS-DOS系统调用,看代码只是为了显示东西,完全可以绕过系统直接写显存0xB8000。。。。。。。。如果是裸机代码的话