首页
社区
课程
招聘
求助 汇编写法 pushad popad
2012-1-28 05:34 7362

求助 汇编写法 pushad popad

2012-1-28 05:34
7362
用这两个指令会不会影响其他子程序噢?

用 pushad popad 好    还是。。。

还是自己需要压或弹什么就写压或弹什么好

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
达文西 2012-1-28 09:22
2
0
pushfd
pushad
。。。
popad
popfd

这样安全,不仅保存寄存器,还保存位。
雪    币: 3682
活跃值: (936)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
daohaodaye 2012-1-28 09:55
3
0
不管用哪个,到代码执行完了,得把寄存器清零操作吧,比如中间如果用到eax后面得把这个寄存器清零。我每次都是这样做的,后面写入xor  eax,ea或者sub eax,eax
雪    币: 180
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Seely 2012-1-28 10:49
4
0
不知道你是否了解 pushad 和 popad 指令的意思。
pushad 相当于

push eax
push ecx
push edx
push ebx
push esp
push ebp
push esi
push edi


popad 相当于

pop edi
pop esi
pop ebp
pop esp
pop ebx
pop edx
pop ecx
pop eax


使用了这两条指令后(pushad 和 popad),在这两条指令中间进行的任何对寄存的修改都不会影响到这两条指令后面的指令。
不知道你想用它们做什么,如果是用到子程序中的话,你这个子程序不要用寄存器传递返回值。例如:子程序开始你用了pushad,然后你把子程序的返回值放到eax,popad时会把eax重写,这样你的返回值就可能是错误的。
雪    币: 9
活跃值: (939)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
网络游侠 2012-1-28 15:31
5
0
pushfd
顺序压入
{
  sf
  pf
  cf
  af
  df
  zf
  of
  

}
游客
登录 | 注册 方可回帖
返回