首页 新闻 会员 周边 捐助

关于IL中Dup指令的疑问

0
悬赏园豆:30 [已解决问题] 解决于 2013-10-24 15:06

看了IL手册,手册对Dup的解释为:复制计算堆栈上当前最顶端的值,然后将副本推送到计算堆栈上。

如果堆栈上有一个数,顶层为1,执行Dup指令后会发生什么?

IL_0001:    ldloc.0    // 将局部变量表的值5推送到计算堆栈,此时计算堆栈最顶端的值为5

IL_0002     dup      // 按手册意思,将5的副本再次推送到堆栈,那岂不是说此时堆栈有两个5?

IL_0003:    ldc.i4.1    // 将整型数1推送到堆栈

IL_0004:    add    // 执行加操作,  5 + 1 = 6

IL_0005:    stloc.0    // 将结果存储到局部变量表

不太理解计算堆栈的概念

wadesss的主页 wadesss | 初学一级 | 园豆:194
提问于:2013-10-23 21:52
< >
分享
最佳答案
0

与IL 指令相关的三个概念 :

1 Managed Heap 

2 Evaluation Stack

3 Call Stack

只有Evaluation Stack 是栈取数据时是根据栈的特点,先进后出,其它两个都不是栈,可以不按顺序取值 

Dup根据IL指令的解释,是复制一份评估栈(Evaluation Stack)上的值并压入评估栈中,

根据你的问题 如果评估栈中最顶端的值为1 那执行Dup指令 则是将1 先复制一份,然后把副本的1压入评估栈中

收获园豆:20
Zery | 大侠五级 |园豆:6151 | 2013-10-24 07:41

那么此时评估栈有两个值对吗?最顶端的值为1的副本1,第二个位置的值为原来的1

wadesss | 园豆:194 (初学一级) | 2013-10-24 09:14

@天天天蓝_Mr: 没错就是这样的

Zery | 园豆:6151 (大侠五级) | 2013-10-24 09:15
其他回答(1)
0
  1. value 被推送到堆栈上。

  2. 从堆栈中弹出 value 以用于复制。

  3. value 被推送回堆栈上。

  4. 将重复值推送到堆栈上。

dup 指令重复堆栈的顶层元素,并且将两个相等值留在堆栈顶部。

收获园豆:10
朝曦 | 园豆:1073 (小虾三级) | 2013-10-24 09:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册