预留字符串口令,输入口令串与预留密码串比较。若匹配则显示“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 段之目的变址指针。

assembly x86(nasm)串比较的更多相关文章

  1. assembly x86(nasm)修改后的日常

    data segment ENG db 'SUNdayS Coming I Wanna Drive My Car,SUN,SUN$' ;9,3 sun1 db 'SUN' swcount db 0ah ...

  2. assembly x86(nasm)子程序1

    T: 将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来.要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示. 思路: Main主调程 ...

  3. assembly x86(nasm)的日常

    cs的日常打卡. data segment ENG db 'SUNdayS Coming I Wanna Drive My Car,SUN,SUN$' ;43,35 sun1 db 'SUN' swc ...

  4. assembly x86(nasm)画三角形等图形的实现(升级版)

    https://www.cnblogs.com/lanclot-/p/10962702.html接上一篇 本来就有放弃的想法,可是有不愿退而求次, 然后大神室友写了一个集海伦公式计算三角形面积, 三点 ...

  5. assembly x86(nasm)画三角形等图形的实现

    参考了一位大佬的博客 https://blog.csdn.net/qq_40298054/article/details/84496944传送门 https://blog.csdn.net/qq_40 ...

  6. assembly x86(nasm)选择排序

    有一个首地址为NUM的N字无序无符号整数数组,编制程序采用选择排序法使该数组中的数按照从小到大的次序排序输出. 选择排序: data segment message db 'This is a pro ...

  7. Ubuntu Desktop 编译 ffmpeg (简略的写写)

    关于ffmpeg FFmpeg是一個自由軟體,可以執行音訊和視訊多種格式的錄影.轉檔.串流功能,包含了libavcodec——這是一個用於多個專案中音訊和視訊的解碼器函式庫,以及libavformat ...

  8. Windows下libjpeg-trubo-1.5.3编译(VS2015)

    简述 https://libjpeg-turbo.org/的网站上是有已经编译好的版本下载的,但是VC下是使用的VC10.0编译的.虽然在VC14.0下也能用,但是我还是需要编译一个VC14.0版本的 ...

  9. 在window平台下,自己DIY编译OpenSSL,Libcurl ,来支持HTTPS传输协议

    1 缘起 原来就了解些libcurl,一直没有机会在项目实际使用libcurl.   恰好最近一个云存储的项目,服务器使用openstack 恰好我负责现在的一个云存储SDK c++版本的开发中. 与 ...

随机推荐

  1. find命令用法

    关于查找 文件查找:     locate非实时查找:根据索引查找     find实时查找:根据文件的各种属性去找到相对应文件     根据文件的各种属性去找到相对应文件 文本搜索:     gre ...

  2. 创建私有maven库

    在公司搭建私有maven库,我为了在本机做测试,我选择Sonatype nexus oss,在docker里面安装 1.Mac上安装docker 下载地址:https://github.com/boo ...

  3. 修改JDK环境变量,不生效的问题

    一般是在/etc/profile下面配置JDK的环境变量 JAVA_HOME=/data/jdk1.7.0_72 JRE_HOME=/data/jdk1.7.0_72/jre PATH=$PATH:$ ...

  4. 设置开启telnet功能

    今天访问服务器的时候发现ip可以ping通,但是不能访问,就telnet一下端口吧,谁知系统逗我:

  5. 如何设置SVN提交时必须输入注释

    在Windows环境 在SVN的Repositories路径,E:\Repositories\demo20170408\hooks: 创建pre-commit.bat批处理文件. 文件内容: @ech ...

  6. h5的缓存机制

    H5的缓存,大概有localstorage.sessionstorage.cookie和manifest. 一.LocalStorage LocalStorage是永久性的本地缓存,存储在客户端的浏览 ...

  7. 记录下 hubot相关

    适配器工厂https://hubot.github.com/docs/adapters/ 自己写适配器https://hubot.github.com/docs/adapters/developmen ...

  8. CentOS 下源码安装LAMP环境

    一.简介 什么是LAMP    LAMP是一种Web网络应用和开发环境,是Linux, Apache, MySQL, Php/Perl的缩写,每一个字母代表了一个组件,每个组件就其本身而言都是在它所代 ...

  9. 【转载】Java的接口和抽象类

    尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3811437.html 也不知道,面试为什么经常用到这个知识点—— 一.抽象类 在了 ...

  10. 「AHOI2008」「LuoguP4281」紧急集合 / 聚会(LCA

    题目描述 欢乐岛上有个非常好玩的游戏,叫做“紧急集合”.在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个等待点,且通过这些道路可以走遍所有的等待点,通过道路从一个点到另一个点要 ...