预留字符串口令,输入口令串与预留密码串比较。若匹配则显示“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. Pipeline inbound(netty源码7)

    netty源码死磕7  Pipeline 入站流程详解 1. Pipeline的入站流程 在讲解入站处理流程前,先脑补和铺垫一下两个知识点: (1)如何向Pipeline添加一个Handler节点 ( ...

  2. yum 工作原理

    MySQL :: A Quick Guide to Using the MySQL Yum Repository https://dev.mysql.com/doc/mysql-yum-repo-qu ...

  3. Xcode6 新特性

    苹果在WWDC 2014上对新版Xcode(Xcode 6 Beta版)并没有提及过多.但它却是开发人员不能忽视的一部分.Xcode 6 Beta版为设计和创建软件引入了新方法,更加关注功能和一些改善 ...

  4. SAP建数据库索引

    [转]SAP建数据库索引   %_hints  db6 'INDEX("MKPF","MKPF~BUD")'           db6 'INDEX(&quo ...

  5. virtualBox 不能开启一个新任务的错误

    2016.06.05 这两天想在virtualbox上安装CentOS7.0玩,遇到一个问题: 不能为虚拟电脑 CentOS7 打开一个新任务. The virtual machine 'CentOS ...

  6. Pager-taglib

    <%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg" %> & ...

  7. 使用官方Android-support-v7在低版本上使用ActionBarActivity

    昨天晚上更新了下Android SDK Manager,发现Extras下的Android Support Library已经更新到19.1了,上网一查原来是sdk\extras\android\su ...

  8. [haoi2008]玩具命名

    某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很 ...

  9. 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

    数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...

  10. html5--5-1 了解canvas元素

    html5--5-1 了解canvas元素 学习要点 如何在HTML5文档中添加canvas元素 canvas的属性 了解canvas坐标系 了解script元素 绘制一条直线(准确的说是线段) 什么 ...