assembly x86(nasm)串比较
预留字符串口令,输入口令串与预留密码串比较。若匹配则显示“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)串比较相关推荐
- assembly x86(nasm)画三角形等图形的实现(升级版)
https://www.cnblogs.com/lanclot-/p/10962702.html接上一篇 本来就有放弃的想法,可是有不愿退而求次, 然后大神室友写了一个集海伦公式计算三角形面积, 三点 ...
- 【TVM 巡礼】How to optimize cpu(x86) gemm串讲
[GiantPandaCV导语]最近在整理一些编译器方面的基础知识翻译,回顾了一下TVM的Schedule然后想起自己1年前做的一些GEMM相关的实验和探索没做什么总结.所以基于TVM的三个教程也即T ...
- c++ dll返回容器_Windows x86 Shellcode开发:寻找Kernel32.dll地址
前言 针对一个已经学习了Linux Shellcode开发,并开始在Windows上尝试的研究人员来说,这一过程可能要比想象的更加艰难.Windows内核与Linux完全不同.尽管如此,但Linux内 ...
- linux修改栈指针x86,为什么x86-64 Linux系统调用会修改RCX,这个值意味着什么?
我正在尝试使用sys_brk syscall在linux中分配一些内存.这是我尝试过的: BYTES_TO_ALLOCATE equ 0x08 section .text global _start ...
- C/C++通用Makefile
最近的项目又回到了Linux上运行,这就需要在Linux下编译项目,写Makefile针对习惯了Windows的程序员来说是一件痛苦的事,如果有一个通用的Makefile该多好啊,本着这样的目的,我再 ...
- 汇编指令prefix rep:
F3: prefix rep: C3 retn OD中看到这,弄不明白第一句是什么意思了,有人能告诉一下吧,谢谢了,我在线等高人帮忙 答案: r ...
- libjpeg-turbo在Windows VS2010下的编译
去年曾经写过文章使用libjpeg-turbo,不过当时是基于Linux X86平台的,现在需要在Windows下使用这个库,于是上网找了一些编译方法,形成此文. 一.先期工作 1.下载CMake 下 ...
- 虚函数与虚函数表剖析(动多态)
探索C++虚函数在g++中的实现 本文是我在追查一个诡异core问题的过程中收获的一点心得,把公司项目相关的背景和特定条件去掉后,仅取其中通用的C++虚函数实现部分知识记录于此. 在开始之前,原谅我先 ...
- 探索C++虚函数在g++中的实现
本文是我在追查一个诡异core问题的过程中收获的一点心得,把公司项目相关的背景和特定条件去掉后,仅取其中通用的C++虚函数实现部分知识记录于此. 在开始之前,原谅我先借用一张图黑一下C++: &quo ...
最新文章
- 技术图文:如何在Python中定义二维数组?
- 基于Kubernetes的云平台存储容器化实践
- 真实版删库跑路,宕机36小时市值蒸发9亿!
- 棋盘问题 POJ - 1321
- [转]ORACLE联机日志文件无故全部消失
- python数字合并提高_python-给定相关数字列表,合并相关列表以创...
- method swizzling你应该注意的点
- python连接pymysql主机目标无响应_Python 解析pymysql模块操作数据库的方法
- (转)李嘉诚:成功源于花90%时间考虑失败
- jdk6-jdk9常用版本下载地址整理
- 夏昕.深入浅出Hibernate中的第一个例子体会.
- 关于游戏中美术文件夹的划分
- 微服务架构深度解析与最佳实践-第一部分:微服务发展历程和定义
- linux重新mac,用 Linux 让旧 MacBook 重获新生
- 【GlobalMapper精品教程】027:路径剖面和和视线工具的使用
- linux安装ifconfig
- GDPR(欧盟通用数据保护条例)基础知识
- 数据分析入门——美国各州人口分析
- matlab动态电路仿真,基于Simulink建立的RLC串联动态电路仿真模型
- 学习PLC LAD 梯形逻辑宝藏网站
热门文章
- (数据结构与算法)插入排序和希尔排序
- Service Mesh 在中国工商银行的探索与实践
- 一文看懂 K8s 日志系统设计和实践
- 规模、性能、弹性全面升级,让天下没有难用的 K8s
- 运营商线路细分_呼叫中心各种线路的区分
- 微机原理换行代码_微机原理实验保留最长行输入字符的程序
- linux 索引代码的函数定义,Linux网络接口操作之if_nameindex
- 如何恢复matlab关联,恢复matlab文件关联
- 电脑常用音频剪辑软件_如何使用音频剪辑软件,快速剪辑任意格式音频!
- python不包含某字符,查找不包含某些文本字符串的所有文本文件