LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: nait

二维字符数组和一维字符指针数组有很大的不同吗?

[复制链接]
 楼主| 发表于 2005-6-4 18:38:41 | 显示全部楼层
esp可以和-16与
难道就不能直接减0吗?干嘛要先把0赋给eax,再减eax呢?
况且减0有什么意义吗?

这三行代码我在好多地方都见到过,可就是一直不知道什么意思
回复 支持 反对

使用道具 举报

发表于 2005-6-4 18:51:55 | 显示全部楼层
还没有细仔看,不过你这个问题有点搞笑了:)

Post by nait

        movl        $7, -16(%ebp)    #想不通为什么要把7放在后面?
        movl        $8, -12(%ebp)


ebp-16 < ebp-12啊,7明明在前面……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-4 19:04:07 | 显示全部楼层
Post by Tetris
还没有细仔看,不过你这个问题有点搞笑了:)



ebp-16 < ebp-12啊,7明明在前面……

呵呵,看来是我没说清楚。
这样说吧,我来画一个栈,高地址在上,低地址在下

  1. +------------------+
  2. |  返回地址          |  <== 4 + %ebp
  3. +------------------+
  4. |     old %ebp    |  <== %ebp
  5. +------------------+
  6. |          7            |  <== n1
  7. +------------------+
  8. |          8            |  <== n2
  9. +------------------+
  10. |          8            |  [color=DarkRed]<== a[1][1][/color]
  11. +------------------+
  12. |           7           |  [color=DarkRed]<== a[0][1][/color]
  13. +------------------+
  14.            .
  15.            .
  16.            .
复制代码

我的问题是为什么a[1][1]在上而a[0][1]在下?
回复 支持 反对

使用道具 举报

发表于 2005-6-4 19:43:57 | 显示全部楼层
Post by nait
呵呵,看来是我没说清楚。
这样说吧,我来画一个栈,高地址在上,低地址在下

  1. +------------------+
  2. |  返回地址          |  <== ebp
  3. +------------------+
  4. |          7            |  <== n1
  5. +------------------+
  6. |          8            |  <== n2
  7. +------------------+
  8. |          8            |  [color=DarkRed]<== a[1][1][/color]
  9. +------------------+
  10. |           7           |  [color=DarkRed]<== a[0][1][/color]
  11. +------------------+
  12.            .
  13.            .
  14.            .
复制代码

我的问题是为什么a[1][1]在上而a[0][1]在下?


这不就对了吗?a[1][1]当然在a[0][1]之上(地址高)了……
a[0][1]更接近栈顶,所以地址低啊。
回复 支持 反对

使用道具 举报

发表于 2005-6-4 19:53:35 | 显示全部楼层
gcc是按照声明顺序在栈里从高到底分配空间的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-4 21:15:22 | 显示全部楼层
哦,终于想清楚了,当时不知道怎么就犯糊涂,老想不通这个理!

我当时的想法是数组元素的位置也应该像普通变量一样,0号单元第一个分配在高地址,1号在0号的下面,依次往下。现在想想,如果真这样的话,0号地址加1就不是1号单元了,跑到数组外面去了!

终于豁然开朗,多谢大家

Tetris兄一定在笑话我了吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表