eip寄存器的修改和执行当前指令谁先?

youqika 在校生 2012-08-24 08:00:12
也是别人问我的。。。
在群里问了,悲催,没人回。。。

我想到的可能的逻辑顺序:
cpu根据eip的值取指令->修改eip指向下一条指令->执行当前指令->......
or
cpu根据eip的值取指令->执行当前指令->修改eip指向下一条指令->......

个人倾向于前者,求大神解答,不是这两种的也行,谢谢!
...全文
237 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
youqika 2012-09-09
结贴了,当时也是根据call指令来判断的。

[Quote=引用 6 楼 的回复:]
恩 仔细想想也是 调试断点处 往往是执行先前的指令, 而eip却跳到了断点处,确没执行改断点的指令。我先前理解有误
[/Quote]
6L的说法无法区分这两种情况。
回复
template_cplus 2012-08-26
[Quote=引用 5 楼 的回复:]
当然是先修改EIP,否则call指令岂不是导致无限循环?
《Intel® 64 and IA-32 Architectures Software Developer's Manual》里面已经明确说了:
3.5 INSTRUCTION POINTER
The instruction pointer (EIP) register contains the offset in the curre……
[/Quote]

恩 仔细想想也是 调试断点处 往往是执行先前的指令, 而eip却跳到了断点处,确没执行改断点的指令。我先前理解有误
回复
当然是先修改EIP,否则call指令岂不是导致无限循环?
《Intel® 64 and IA-32 Architectures Software Developer's Manual》里面已经明确说了:
3.5 INSTRUCTION POINTER
The instruction pointer (EIP) register contains the offset in the current code segment for the next instruction to be executed.
回复
distogram 2012-08-25
第一种。首先修改指令指针。然后执行上一条在指令缓冲队列中的指令。这样安排是有严重意义的哦
回复
template_cplus 2012-08-25
eip修改的值 是看 当前指令大小的 指行完当前指令后 修改eip值 然后继续执行 该eip所对应的指令
这是我的理解:)也就是 后者 呵呵
回复
template_cplus 2012-08-25
eip修改的值 是看 当前指令大小的 指行完当前指令后 修改eip值 然后继续执行 该eip所对应的指令
这是我的理解:)也就是 后者 呵呵
回复
WJN92 2012-08-24
一般现在的CPU都会有指令缓存的吧
回复
相关推荐
发帖
汇编语言
创建于2007-08-27

2.1w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
申请成为版主
帖子事件
创建了帖子
2012-08-24 08:00
社区公告
暂无公告