敬业的IT人 >> 编程开发 >> 其他语言 >> 让汇编揭开死循环的神秘面纱

让汇编揭开死循环的神秘面纱

敬业的IT人 互联网 佚名 2008-2-20 20:04:07
  • 磁盘阵列(Disk Array)原理

有的时候,也许我们会面对一些令自己无法解释的问题。在语言本身无法告诉我们原因的时候,从汇编的层面看问题,可能就会有“柳暗花明又一村”之效。

首先请大家看这么一个简单的小程序:

让我来解释一下这段汇编代码的含义吧。在系统的实现中,i和数组b[10]是分配在栈上的变量,在内存中的分布如下图:

让汇编揭开死循环的神秘面纱(图二)

现在你看到了,i所占据的正是b[10]的位置,而b[10] = 0;这一句会被这样运行:

*(&b[0] + 10) = 0;

所以这一句的结果,就是把0赋值给i。这样一来在第11次循环的时候,i将会被重新置为0,那么循环结束的条件也就永远不会满足了,循环也就是个死循环了。

事实上单单讨论C语言的内部实现并没有什么意义,而且这样书写的循环在程序设计中也绝对不能够出现。所以我所想要讨论的,就是如何让汇编帮助我们解决表面上无法看清楚的东西,仅此而已。

文字:http://www.qqread.com/other-devtool/s564110002.html进入讨论组讨论。
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com