鱼C论坛

 找回密码
 立即注册
查看: 2146|回复: 10

有关于AT&T 汇编

[复制链接]
发表于 2014-1-4 16:28:32 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 catch 于 2014-1-4 16:41 编辑



.type count_chars,@function  // 定义函数

.globl count_chars  //全局


.equ ST_STRING_START_ADDRESS,8   // ST_STRING_START_ADDRESS 赋值为8


count_chars:
     pushl %ebp   //ebp 压入栈
     movl %esp,%ebp //esp 和ebp 同时指向栈顶


movl $0,%ecx //计数


movl ST_STRING_START_ADDRESS(%ebp),%edx   

这一句话是什么意思?%ebp 本来指向栈顶,由于pushl %ebp,此时,ebp 相当于指向ebp-4,ST_STRING_START_ADDRESS(%ebp) 相当于 %ebp+8 ,这样他不就越界了吗?望高手指点~

最佳答案

查看完整内容

movl %esp,%ebp 这句话 是用esp的值修改ebp的值 AT&T风格和你8086 80836的汇编语法是反的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-4 16:28:33 | 显示全部楼层
movl %esp,%ebp  这句话 是用esp的值修改ebp的值  AT&T风格和你8086 80836的汇编语法是反的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-5 10:23:09 | 显示全部楼层
ebp+8 貌似是运行过程中栈顶修改吧 movl ST_STRING_START_ADDRESS(%ebp),%edx   这句话的意思是ebp寄存器加8 然后内存里边的数值 赋给edx寄存器   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-5 10:34:23 | 显示全部楼层

但是现在ebp已经指向栈顶(前面有 movl %esp,%ebp),ebp+8 这不是越界吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-5 10:52:02 | 显示全部楼层
duzhongjieqiji 发表于 2014-1-5 10:45
movl %esp,%ebp  这句话 是用esp的值修改ebp的值  AT&T风格和你8086 80836的汇编语法是反的!

是的,esp的值修改ebp的值以后,esp 和 ebp同时指向栈顶,那么ebp+8不就越界了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-5 11:04:54 | 显示全部楼层
esp是堆栈指针     ebp是基址指针 这句话执行之后 只是把栈顶 提高 这时栈顶和基址都被加了8 (操作系统会根据你的程序分配足够的空间,所以不必担心的)!只是这个函数在内存占据的位置 升高了 函数执行完pop回去 就完事了!事实上 操作系统分配给你的内存会比你需要的大一些(即使不大),也不会出现问题的! 你所谓的越界 只是你的感觉 感觉设置完ebp,esp你的函数占用内存就固定了 其实不是的!会动态调整的!当然这只是我的理解!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-5 11:07:49 | 显示全部楼层
duzhongjieqiji 发表于 2014-1-5 11:04
esp是堆栈指针     ebp是基址指针 这句话执行之后 只是把栈顶 提高 这时栈顶和基址都被加了8 (操作系统会根 ...

movl ST_STRING_START_ADDRESS(%ebp),%edx 这句话是把 ebp+8处的值赋给edx,此时栈中并没有指定数据,随意赋给edx?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-5 11:10:19 | 显示全部楼层
你发的代码 是全部代码吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-5 11:12:57 | 显示全部楼层
把 修改玩的栈顶 存在edx中啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-5 12:06:42 | 显示全部楼层
duzhongjieqiji 发表于 2014-1-5 11:12
把 修改玩的栈顶 存在edx中啊!

好像有一些明白了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-17 11:01:27 | 显示全部楼层
咱们码农有力量,嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 14:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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