正在阅读:《编程高手箴言》读后(4)《编程高手箴言》读后(4)

2004-04-08 14:39 出处:CSDN 作者:seacloud 责任编辑:sdq

  解释的运行方式中最常见的式Basic... ...其实,解释程序就是一个字符串的解释器。
=========================================
  很多脚本语言,比如大名鼎鼎的Perl,Python等等都是解释执行的。这些脚本语言的语义十分丰富,像Perl,Python都支持面向对象的编程,因此,这些脚本的解释程序本身十分复杂,编译原理的各个方面几乎都会涉及到,远远不是什么字符串的解释器可以比拟的。

  许多书中没有说为什么参数从右向左传递... ...从而便于汇编和调试。
=========================================
  个人感觉应该和调试没什么关系,倒是可能和可变参数函数的实现有点关系。

  下面摘自VC提供的代码,va_xxx是可变参数编程的几个重要的宏。
  #ifdef  _M_IX86
  #define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

  #define va_start(ap,v)  ( ap = (va_list)&v + _INTSIZEOF(v) )
  #define va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
  #define va_end(ap)      ( ap = (va_list)0 )

  我们可以看到,所谓可变,其实就是利用va_arg每次从栈中取出适当的字节数拼成所需要的参数。如果参数从右往左入栈,那么利用ebp可以顺利的依序取出第一个,第二个...第n个参数,否则,就没法用直接的简单的方法取到第一个参数了,原因是利用ebp只能直接定位到最后一个入栈的参数,而函数参数的个数未知,因此第一个参数在栈中的位置就不太容易定位了。当然,这不是绝对的,用些辅助的方法也可以做到,但是就不如让参数从右向左进栈实现起来轻松简单了。


察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:
键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品