突然发现好像很久没有写过博客了……
正好最近在上微机课,稍微学了一点汇编,实验课做了个小程序,就正好来水一篇文章(
代码和逻辑还是比较简单的,也加了很多注释,应该可以看懂我就不细讲了(
.486 DATA SEGMENT USE16 password DB 'B18020511$' password_len=$-password user DB 'Sinon$' user_len=$-user buffer DB 29 DB ? DB 30 DUP(?) msg1 DB 'Please enter your user name:$' msg2 DB 'Please enter your password:$' msg3 DB 'Sinon,Welcome!' DB 0AH DB ' ________ ___ ________ ________ ________ ' DB 0AH DB '|\ ____\|\ \|\ ___ \|\ __ \|\ ___ \ ' DB 0AH DB '\ \ \___|\ \ \ \ \\ \ \ \ \|\ \ \ \\ \ \ ' DB 0AH DB ' \ \_____ \ \ \ \ \\ \ \ \ \\\ \ \ \\ \ \ ' DB 0AH DB ' \|____|\ \ \ \ \ \\ \ \ \ \\\ \ \ \\ \ \ ' DB 0AH DB ' ____\_\ \ \__\ \__\\ \__\ \_______\ \__\\ \__\' DB 0AH DB ' |\_________\|__|\|__| \|__|\|_______|\|__| \|__|' DB 0AH DB ' \|_________| ' DB 0AH,'$' msg4 DB 'Invalid user name!' DB 0AH,'$' msg5 DB 'Password is incorrect!' DB 0AH,'$' DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA,ES:DATA BEG: MOV AX,DATA MOV DS,AX MOV ES,AX ;提示输入用户名 NAME_LOOP: MOV AH,09H MOV DX,OFFSET msg1 INT 21H ;输入用户名 MOV AH,0AH MOV DX,OFFSET buffer INT 21H MOV AH,02H ;换行 MOV DL,0AH INT 21H MOV BL,buffer+1 MOV BH,0 MOV DI,OFFSET buffer+2 MOV BYTE PTR [DI+BX],'$' ;比较是否相等 MOV DI,OFFSET user MOV SI,OFFSET buffer+2 MOV CX,user_len CLD REPE CMPSB JZ NAME_EXIT ;输入错误 MOV AH,09H MOV DX,OFFSET msg4 INT 21H JMP NAME_LOOP NAME_EXIT: ;提示输入密码 MOV AH,09H MOV DX,OFFSET msg2 INT 21H ;输入密码 MOV DI,OFFSET buffer+2 MOV CX,20 PASS_IN: MOV AH,08H INT 21H CMP AL,0DH JE PASS_CMP MOV [DI],AL INC DI LOOP PASS_IN PASS_CMP: MOV AH,02H ;换行 MOV DL,0AH INT 21H MOV [DI],BYTE PTR'$' ;比较是否相等 MOV DI,OFFSET password MOV SI,OFFSET buffer+2 MOV CX,password_len CLD REPE CMPSB JZ PASS_EXIT ;输入错误 MOV AH,09H MOV DX,OFFSET msg5 INT 21H JMP NAME_EXIT PASS_EXIT: ;登录后欢迎信息 MOV AH,09H MOV DX,OFFSET msg3 INT 21H MOV AH,4CH INT 21H CODE ENDS END BEG
发表评论