预留字符串口令,输入口令串与预留密码串比较。若匹配则显示“MATCH!CONGRATULATION”,否则显示“NOMATCH!”,并让用户重新输入,程序能对口令进行测试,但测试次数最多3次,若3次输入密码皆错,给出相应的提示信息,程序退出。

两种做法:

data    segment
message db 'This is a sample program of passward'
db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'
passward db 'huangchangsheng$'
buf1 db
db ?
db dup('$')
FAULT db 0dh,0ah,'NOMATCH!Please enter again!',0dh,0ah,'$'
RIGHT db 0dh,0ah,'MATCH!CONGRATULATION!',0dh,0ah,'$'
ending db 0dh,0ah,'You have typed the wrong passward for three times!',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset message
mov ah,
int 21h
mov cl,
jmp input
rinput:
mov dx,offset FAULT ;提示错误
mov ah,
int 21h
input:
lea dx, buf1 ;字符串输入
mov ah, 0ah
int 21h
xor si,si
strcmp: ;串比较
mov al,passward[si]
cmp al,'$'
jz output2
mov al,passward[si]
cmp buf1[si+],al
jnz output1
inc si
jmp strcmp
output1:
loop rinput
mov dx,offset ending
mov ah,
int 21h
jmp exit
output2:
mov dx,offset RIGHT ;提示正确
mov ah,
int 21h
exit:
mov ah,4ch
int 21h
code ends
end start

第二种比较难受,因为di和附加段搞了好久,然后是看大佬代码才发现自己错哪了的

https://blog.csdn.net/pengwill97/article/details/79249631传送门

data    segment
message db 'This is a sample program of passward'
db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'
buf1 db ,?, dup('$')
FAULT db 0dh,0ah,'NOMATCH!Please enter again!',0dh,0ah,'$'
RIGHT db 0dh,0ah,'MATCH!CONGRATULATION!',0dh,0ah,'$'
ending db 0dh,0ah,'You have typed the wrong passward for three times!',0dh,0ah,'$'
data ends
ext segment
passward db 'huangchangsheng$'
ext ends
code segment
assume cs:code,ds:data,es:ext
start:
mov ax,data
mov ds,ax
mov ax,ext
mov es,ax
mov dx,offset message
mov ah,
int 21h
mov cx,
jmp input
rinput:
mov dx,offset FAULT ;提示错误
mov ah,
int 21h
input:
lea dx, buf1 ;字符串输入
mov ah, 0ah
int 21h
lea di,passward
lea si,buf1+
push cx
mov cl,buf1+
repz cmpsb ;当前字符相同则继续循环
jz output2
jnz output1
output1:
pop cx
loop rinput
mov dx,offset ending
mov ah,
int 21h
jmp exit
output2:
mov dx,offset RIGHT ;提示正确
mov ah,
int 21h
exit:
mov ah,4ch
int 21h
code ends
end start

如果使用repz cmpsb,密码应该放在附加段,不然可能会出bug,原因可能是di是目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。

最新文章

  1. curl+openssl编译
  2. mac:在当前文件夹打开terminal终端
  3. SQL基础篇---函数及其函数配套使用的关键字
  4. Swift Explore - 关于 Swift 中的 isEqual 的一点探索
  5. c++ algorithm 的用法
  6. HDU 4166 & BNU 32715 Robot Navigation (记忆化bfs)
  7. sql小技巧 group by datetime类型字段,只取其中的日期部分
  8. 1.4.2.2. PATHS(Core Data 应用程序实践指南)
  9. Linux 搭建svn版本库
  10. HDU 2594(求最长公共前后缀 kmp)
  11. iOS开发基础-九宫格坐标(5)
  12. Java8新特性 重复注解与类型注解
  13. oracle数据库名称已被一现有约束条件占用
  14. calico 原理分析
  15. ajax返回数据
  16. MRO和C3算法
  17. 将mysql的表导出为excel
  18. 微信分享缩略图,如何增加微信朋友圈分享链接的小图片? facebook、google+、twitter等分享的标签
  19. tomcat web工程 jar包冲突解决方法
  20. Ubuntu18.10安装及优化

热门文章

  1. VCL里的构造函数
  2. windows下使用DOS命令删除大文件
  3. 记一次FastJSON和Jackson解析json时遇到的中括号问题
  4. 头文件---#include<***.h>和#include"***.h"的区别
  5. appium(13)- server config
  6. Process 'command 'D:\AndroidSDK\ndk-bundle\ndk-build.cmd'' finished with non-zero exit value 2
  7. LVS集群的负载调度
  8. git删除某次提交(某个commit)的方法【转】
  9. java random配置修改
  10. 网站流量统计之PV和UV