预留字符串口令,输入口令串与预留密码串比较。若匹配则显示“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    20db  ?db     20 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,datamov    ds,ax            mov    dx,offset message            mov    ah,9                        int    21h    mov cl,3jmp input
rinput:        mov    dx,offset FAULT                ;提示错误mov    ah,9                        int    21h
input:        lea    dx, buf1                     ;字符串输入mov ah, 0ah                        int 21hxor si,si
strcmp:                                        ;串比较mov al,passward[si]cmp al,'$'jz output2mov al,passward[si]                cmp buf1[si+2],aljnz output1inc sijmp strcmp
output1:    loop rinputmov    dx,offset ending        mov    ah,9                        int    21hjmp exit
output2:    mov    dx,offset RIGHT                ;提示正确mov    ah,9                        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     20,?,20 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,datamov    ds,axmov ax,extmov es,ax            mov    dx,offset message            mov    ah,9                        int    21h    mov cx,3jmp input
rinput:        mov    dx,offset FAULT                ;提示错误mov    ah,9                        int    21h
input:        lea    dx, buf1                     ;字符串输入mov ah, 0ah                        int 21hlea di,passwardlea si,buf1+2push cxmov cl,buf1+1repz cmpsb                        ;当前字符相同则继续循环jz output2jnz output1
output1:pop cxloop rinputmov    dx,offset ending        mov    ah,9                        int    21hjmp exit
output2:    mov    dx,offset RIGHT                ;提示正确mov    ah,9                        int    21h
exit:        mov    ah,4ch                                    int    21h
code    ends
end    start

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

转载于:https://www.cnblogs.com/lanclot-/p/10963477.html

assembly x86(nasm)串比较相关推荐

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

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

  2. 【TVM 巡礼】How to optimize cpu(x86) gemm串讲

    [GiantPandaCV导语]最近在整理一些编译器方面的基础知识翻译,回顾了一下TVM的Schedule然后想起自己1年前做的一些GEMM相关的实验和探索没做什么总结.所以基于TVM的三个教程也即T ...

  3. c++ dll返回容器_Windows x86 Shellcode开发:寻找Kernel32.dll地址

    前言 针对一个已经学习了Linux Shellcode开发,并开始在Windows上尝试的研究人员来说,这一过程可能要比想象的更加艰难.Windows内核与Linux完全不同.尽管如此,但Linux内 ...

  4. linux修改栈指针x86,为什么x86-64 Linux系统调用会修改RCX,这个值意味着什么?

    我正在尝试使用sys_brk syscall在linux中分配一些内存.这是我尝试过的: BYTES_TO_ALLOCATE equ 0x08 section .text global _start ...

  5. C/C++通用Makefile

    最近的项目又回到了Linux上运行,这就需要在Linux下编译项目,写Makefile针对习惯了Windows的程序员来说是一件痛苦的事,如果有一个通用的Makefile该多好啊,本着这样的目的,我再 ...

  6. 汇编指令prefix rep:

    F3:             prefix rep:    C3              retn OD中看到这,弄不明白第一句是什么意思了,有人能告诉一下吧,谢谢了,我在线等高人帮忙 答案: r ...

  7. libjpeg-turbo在Windows VS2010下的编译

    去年曾经写过文章使用libjpeg-turbo,不过当时是基于Linux X86平台的,现在需要在Windows下使用这个库,于是上网找了一些编译方法,形成此文. 一.先期工作 1.下载CMake 下 ...

  8. 虚函数与虚函数表剖析(动多态)

    探索C++虚函数在g++中的实现 本文是我在追查一个诡异core问题的过程中收获的一点心得,把公司项目相关的背景和特定条件去掉后,仅取其中通用的C++虚函数实现部分知识记录于此. 在开始之前,原谅我先 ...

  9. 探索C++虚函数在g++中的实现

    本文是我在追查一个诡异core问题的过程中收获的一点心得,把公司项目相关的背景和特定条件去掉后,仅取其中通用的C++虚函数实现部分知识记录于此. 在开始之前,原谅我先借用一张图黑一下C++: &quo ...

最新文章

  1. vue加百度统计代码(亲测有效)
  2. js网页文件资源加载器
  3. C#算法设计查找篇之05-二叉树查找
  4. MySQL8.0版本升级建议及各类场景的操作方法
  5. 程序员面试金典——1.1确定字符互异
  6. vSphere Client 连接ESXi 或者是vCenter 时虚拟机提示VMRC异常的解决办法
  7. SecureCRT8.1下载+注册机+破解教程
  8. imagemagick /tmp/magick-xxxxxxxx
  9. Nginx学习使用记录
  10. 个性化定制软件安装包流程指导(按照步骤即可定制化安装流程)
  11. 计算机视觉快速入门一 —— 图像基本操作(二)
  12. 共模电压你了解多少?陈老师带你搞清楚
  13. Mask RCNN -- Mask Scoring R-CNN
  14. python常用的集成开发工具,python的主流开发工具
  15. java excel 设置列为日期,POI - 如何将单元格值设置为日期并应用默认Excel日期格式?...
  16. 苹果开放降级_潮讯:苹果官网又崩了;微信新功能被群嘲;小米11性能跑分;LOL手游封杀加速器;华为新平板有高刷...
  17. 中医移动医疗_搜狗切入移动医疗领域 推中医识方APP
  18. k8s tfjob批调度-volcano调研
  19. 宇宙是计算机程序,宇宙是被设计好的,和计算机程序100%相似,这些对比看宇宙的运行...
  20. mkdoc安装与使用说明

热门文章

  1. 模板设计模式,简单Java代码实现
  2. Java 里的HashMap(HashTable) 简介.
  3. 120xa正反转参数_RFID的软件SOPAS参数设置
  4. python贪婪匹配顺序_Python正则表达式:贪婪模式返回多个空匹配
  5. 计算机组成原理试卷五套,计算机组成原理(五套试题)
  6. 教师资格证考试计算机知识题库,教师资格证考试题库
  7. CCNA必会知识点:路由器PAP单向认证怎么配置?
  8. flutter嵌入HTML5页面,Flutter加载Html并实现与JS 的双向调用
  9. 互动赠新书|当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
  10. 独家解读 etcd 3.4版本 |云原生生态周报 Vol. 18