shenxinon
驱动牛犊
驱动牛犊
  • 注册日期2005-01-26
  • 最后登录2005-02-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3567回复:7

mov与push&pop有什么区别吗?

楼主#
更多 发布于:2005-02-19 20:43
我看付值的时候有时候用MOV  A, B

有时候就用PUSH  B;  POP A

这两者有什么区别吗?还是就是因为太单调了才换着用?谢谢
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2005-02-19 21:57
因为在X86处理器上不支持内存到内存的传送,所以必须通过寄存器
比如A给B,必须
MOV EAX,A
MOV B,EAX
就是说需要使用一个寄存器,而如果使用
PUSH A
POP B
则通过堆栈来做,从而可以节省寄存器
特别在X86-64以前,寄存器不多,还是比较好的,不过速度还是慢了点.....

[编辑 -  2/19/05 by  wowocock]
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
shenxinon
驱动牛犊
驱动牛犊
  • 注册日期2005-01-26
  • 最后登录2005-02-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-22 12:19
明白了,谢谢了
toadwolf
驱动牛犊
驱动牛犊
  • 注册日期2003-11-30
  • 最后登录2013-11-12
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望67点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-17 07:59
MOVS系列指令就是用来进行内存<->内存数据传送的.

MOV, PUSH, POP在不同CPU上的效率(执行时间, 指令长度)不一样. 有时候也属于编程风格吧.

toad
stanlyburg
驱动小牛
驱动小牛
  • 注册日期2005-01-30
  • 最后登录2008-08-12
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望72点
  • 贡献值0点
  • 好评度57点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-09 22:45
真是高手
Henry
驱动牛犊
驱动牛犊
  • 注册日期2001-04-27
  • 最后登录2011-06-20
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-07-26 10:59
还有一点,MOV只改变了AB寄存器的值,而PUSH,POP还修改了堆栈内容
驱动人生。
adlyer
驱动牛犊
驱动牛犊
  • 注册日期2006-08-27
  • 最后登录2010-03-21
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-01-21 17:53
嗯,我认为最重要的两点就是效率和码长.
qiweixue
驱动小牛
驱动小牛
  • 注册日期2004-07-21
  • 最后登录2011-12-19
  • 粉丝0
  • 关注0
  • 积分1006分
  • 威望274点
  • 贡献值0点
  • 好评度268点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2007-02-03 16:51
push /pop 和call,jmp病毒经常容它们构造变形技术.
相比mov处理数据直接些更容易分析出来
 
游客

返回顶部