首页 >> 大全

在x86上叫做ip;在arm下叫做pc,即R15.

2023-12-28 大全 39 作者:考证青年

其实这是不同平台下的不同叫法。 在x86上叫做ip;在arm下叫做pc,即R15. 在X86上不能直接给IP赋值,可以通过jmp来改变它的值。 而ARM上可以通过LDR直接对PC赋值。 CS 寄存器 和 IP 寄存器

下面将要介绍的是一组非常非常重要的寄存器,即 CS:IP 。

CS:IP 两个寄存器指示了 CPU 当前将要读取的指令的地址,其中CS 为代码段寄存器,而IP 为指令指针寄存器。

什么叫做指示了 CPU 当前将要读取的指令呢?在 8086 CPU 中,为什么 CPU 会自动的执行指令呢?

这些指令肯定是存放在内存中的,但是 CPU 怎么知道这些指令存放在内存的那个位置呢?

比如,我有下面的两条指令要执行:

    MOV AX,1234HMOV BX,AX

而假设这两条指令在内存中存放为:

image

很显然, 1000H:0000H 指向的是 MOV AX,1234H 的首地址,

如果 CPU 要读取到我的指令的话,很显然,必须要知道地址 1000H:0000H ,

然后 CPU 就可以根据这个首地址,将汇编指令 MOV AX,1234H 所对应的机器码读入到 CPU 的指令寄存器中,

最后便可以在 CPU 中进行处理了。

但关键是 CPU 如何知道我的 1000H:0000H 这个首地址?其实这就需要使用到 CS:IP 这个寄存器组了 。

当我们运行一个可执行文件时,很明显,我们需要另外一个程序来将这个可执行文件加载到内存当中,

关于这个加载可执行文件的程序,我们在这里不管他,点一下即可,

一般是通过操作系统的外壳程序(也就是传说中的 Shell 程序),

_上即是下下即是上_即上即下什么意思

Shell 将可执行文件加载到内存中以后,就会设置 CPU 中的两个寄存器,即设置 CS:IP 两个寄存器指向可执行文件的起始地址,此后 CPU 便从这个起始地址开始读取内存中的指令,并且执行。

比如我们在写汇编程序时,通常会使用 START 标记,其实这个标记就是用来标记起始地址的,

当将一个汇编程序编译,连接成可执行文件以后,再通过操作系统的 Shell 程序将可执行文件加载到内存中以后,

这个 START 所标记处的地址就是整个可执行文件的起始地址了 。

也就是说,当一个可执行文件加载到内存中以后,CS:IP 两个寄存器便指向了这个可执行文件的起始地址,

然后 CPU 就可以从这个起始地址开始往下读取指令,

当读取完指令后,CS:IP 将会自动的改变,基本上是改变 IP,从而指向下一条要读取的指令,这样就可以执行这个可执行文件了。

最后再对 CS:IP 总结一下:

你想让 CPU 执行哪行指令,你就让 CS:IP 指向保存有指令的那块内存即可。任何时候,CS:IP 指向的地址中的内容都是 CPU 当前执行的指令。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了