经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 汇编语言 » 查看文章
汇编几个有趣实验
来源:cnblogs  作者:kerman  时间:2018/10/8 9:09:23  对本文有异议

实验1:

输入以下命令,我先是使用a命令进行了输入,并用t命令进行的单步调试。

可以发现ax,bx在不同的命令下发生了改变,而ip的值也是根据输入指令的长度而不断的增加。后来我又使用了g命令进行了一次执行完成(结果和单步相同)。

这里需要注意,g的最后范围应当是命令结束的那个地址,而不是下个地址。

随后我又使用了e命令尝试。

首先反汇编看了下,发现没有什么问题。

然而当我尝试使用g命令一次性执行完成时却发生了问题,当我执行到倒数第二个地址时是成功的,而执行到最后一个地址却出现了卡死的状态,我后面尝试了使用不同的方法都失败了,不知道是为什么,求助大佬。

实验2:

使用3条指令完成2的8次方的计算。这里我使用的是7次jmp命令来完成计算。这里记得要修改cs和ip的初始值,因为我们是从2000:0开始写的,而不是从默认地址开始的。

然后使用t开始单步调试,因为一开始要执行2次移动和加法,下面的jmp每次都是要执行2次,共要7次jmp,故总共要执行t命令16次才能得到想要的结果。

这里可以看见ax的16进制为0100转换为10进制就是2的8次方即16的平方256。

实验3:

这里要查找FFF00H~FFFFFH中的生产日期。故我使用了d命令从fff0:0开始找起,发现了一个有趣的现象。

通过这几张图可以发现,在每个段地址从fff0到ffff中都会在00x0中出现01/01/92这个值(x为0~f)而且段地址的最后一位与00x0中的x有着这样的关系 最后一位定义为y的话(即fffy)y+x=16 的00x0的地址就会出现01/01/92。然后我尝试去修改这个值,发现并没有能修改成功。

 

实验4:

尝试着在b8100一片连续的内存中修改值,出现了如图的情况。

然后我在其他地方修改并不会出现这种情况。

后来查书发现从A0000~BFFFF的内存单元地址都是显存地址,故会出现一些图案。

总结:

经过这几个实验对汇编的一些指令有了初步的了解,也体会到了汇编对内存修改的方便。这里还有几个问题

1.实验1:然而当我尝试使用g命令一次性执行完成时却发生了问题,当我执行到倒数第二个地址时是成功的,而执行到最后一个地址却出现了卡死的状态,我后面尝试了使用不同的方法都失败了,不知道是为什么,求助大佬。

2.实验2:这里有个问题,因为jmp会无限执行下去,故如何才能中止这个程序。

3.实验3:这里也有个问题,如果这个就是生产日期的话为什么会出现/92这种数字。众所周知,一个月最多只有31天。是我找错了还是什么?

 

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号