鱼C论坛

 找回密码
 立即注册
查看: 3687|回复: 11

检测点10.2 下面的程序执行后,AX中的数值为多少?

[复制链接]
发表于 2013-4-19 09:31:27 | 显示全部楼层 |阅读模式
1鱼币
assume cs:codesg
codesg segment  
start:  
        mov ax,0
        call s  ;
        inc ax
       s:pop ax  ;
codesg ends   
end start  
怎么算的?谁能具体说下谢谢啦~~(我是新手)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-19 11:40:10 | 显示全部楼层
inc ax 的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-19 12:17:41 | 显示全部楼层
楼主,首先要知道,call的功能,call调用,第一步把ip的值push压栈了,第二步跳转。
而压栈的ip值是指向call s  ;这一句的下一句的,即是 inc ax 的地址。(因为cpu在执行call语句的时候 ip会自增到下一句的地址)。
pop ax,就等于是把栈中ip的值给了ax。而前面分析知道栈中ip的值就是 inc ax的地址。所以,ax为inc ax的地址值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-19 15:54:20 | 显示全部楼层
call指令执行时有两步操作。第一步将当前ip的值压入栈顶(此时ip是指向inc ax这条指令的),第二步跳转到s子程序中进行执行。也就是pop ax,此时栈顶的值是刚刚被压入的ip的值,也就是inc ax这条指令所在的内存地址。而inc ax这条指令没有被得到执行的原因是,s子程序没有返回,s子程序执行完后直接向下执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-19 16:22:38 | 显示全部楼层
ssume cs:codesg
codesg segment  
start:  
        mov ax,0    --------    ax=0
        call s  ;     -----------跳到s  保存跳转到的内存给EBP-4的位置   
        inc ax         -----------不读
       s:pop ax  ;  ---------进入S   读出ax    读的位置是EBP+4位置的内容   
codesg ends      -----------------所以ax等于系统给分配的一个内存       具体要看call跳转安排的内存
end start  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-19 16:23:14 | 显示全部楼层
ssume cs:codesg
codesg segment  
start:  
        mov ax,0    --------    ax=0
        call s  ;     -----------跳到s  保存跳转到的内存给EBP-4的位置   
        inc ax         -----------不读
       s:pop ax  ;  ---------进入S   读出ax    读的位置是EBP+4位置的内容   
codesg ends      -----------------所以ax等于系统给分配的一个内存       具体要看call跳转安排的内存
end start  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-19 21:49:31 | 显示全部楼层
我是来看答案的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-21 10:46:36 | 显示全部楼层
我跟楼上一个目的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-2 16:03:51 | 显示全部楼层
我也是跟楼上和楼楼上一个目的,和另外一个目的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-29 13:10:47 | 显示全部楼层
俺也看到这里纠结了。。。。。:'(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-30 23:11:39 | 显示全部楼层
你确定你的代码没有写错???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-30 23:15:14 | 显示全部楼层
程序无法正常返回   call    相当于  push call 下一句代码的地址 + jmp 跳到标号 ,由于你没有返回,pop出来的值肯定是 call 下一句的地址(inc ax)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 21:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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