天天看點

基于8086的電子密碼鎖,用彙編實作

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 ;再次設定密碼  存放位置

PASS2 DB 7 ;輸入密碼 存放位置

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  ;列印*****

    MOV AH, 9H

    LEA DX, SETPASS ;列印Please set your password:

    MOV AH, 0AH ;0AH 等待輸入字元串

    LEA DX, PASS ;設定密碼,密碼存放在PASS

    LEA DX, RESPASS ;列印Please set your password again:

    MOV AH, 0AH

    LEA DX, PASS1 ;再次設定密碼,密碼存放在PASS1

  CALL CMPPASS01 ;比較兩次設定密碼是否相同

  JE SAME

  MOV AH, 9H

  LEA DX, SORRY   ;兩次設定密碼不同,列印The two password you have set is not same!!!

  INT 21H

  JMP START

SAME: ;密碼設定正确

    LEA DX, XING ;列印******

  LEA DX, INPUT   ;列印please input your password:

  INT 21H

  MOV AH, 0AH ;輸入密碼

  LEA DX, PASS2   ;密碼存放在PASS2

  CALL CMPPASS02   ;比較輸入的密碼和設定的密碼

  JE RMB ;相同,則會顯示餘額

  LEA DX, FAIL ;不相同提示失敗,SORRY! your password is not right

  LEA DX, TWO ;還有2次機會,YOU have only two chance now!

  INT 21H 

    LEA DX, XING ;列印*******************

  MOV AH, 0AH

  LEA DX, PASS2 ;第二次輸入密碼,密碼存放在PASS2

  CALL CMPPASS02 ;比較輸入的密碼和設定的密碼

  LEA DX, ONE ;還有1次機會,YOU have only one chance now!

    LEA DX, XING ;列印**********

  LEA DX, PASS2 ;第三次輸入密碼,密碼存放在PASS2

  LEA DX, ZERO ;沒有機會了 you have no chance

JMP OVER

RMB:

    LEA DX, XING ;列印*****

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,附加段

REPE CMPSB ;比較輸入的密碼和設定的密碼,位元組比較重複次數cx,不等于會自動退出比較

RET

CMPPASS01 ENDP

CMPPASS02 PROC

LEA SI, PASS2

LEA DI, PASS22

LAST11:

MOVSB ;采用loop循環進行位元組移動,循環次數cx

LOOP LAST11

LEA SI, PASS

LAST21:

CMPSB

JNE OVER11 ;發現不等于就跳出,不比較了

LOOP LAST21

OVER11:

CMPPASS02 ENDP

CODES ENDS

    END START

繼續閱讀