微机原理 反汇编实例1

实例4 secret1.exe
在这里插入图片描述
MOV AH,0A
INT 21
系统调用,输入一个字符串,(加上最后的回车也是一个字符)长度不超过0A,即10。所以最多只能输入9个字符。
DS:0000用来存储字符串的长度,DS:0001用来存储输入字符串的真实长度,即CL用来存储字符串的长度。从DS:0002开始才用来存储输入的字符串,所以SI用来存储输入字符串首字符的地址。DI存储的是提示正确信息字符串的首字符的地址。
在这里插入图片描述
JNZ(或JNE)(jump if not zero, or not equal),汇编语言中的条件转移指令。结果不为零(或不相等)则转移。

CL用于存储字符串的真实长度,每输入正确一个字符,就将其减一,若还未减到零,则说明还没有输入全部的字符,则要进入循环:在提示正确输入的信息字符串中取下一位字符,将其与输入字符串中的下一位字符比较ASCII码值,若不相等则跳到0036提示输入错误,然后顺序往下执行,让BX加一,控制输入错误的次数不超过3次。

由分析可知:
程序想让我们输入的字符串其实是提示正确输入信息字符串的前9位的ASCII码加一以后对应的字符串。可输入1到9位字符,答案有9种。

只输入一个字符z或者zp、zpv、zpv!等也会直接提示输入正确。这是因为控制循环的因子CL是用户所输入的字符串的长度,只要输入的字符串中的字符的ASCII码依次是提示信息字符串ASCII码加一的结果即可。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
总结:
看到看不懂的代码,应该去上下文找寻相关联系,思考它的用意。知道它是什么目的之后就容易理解了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值