通过CS和IP如何计算物理内存地址(OS)

您所在的位置:网站首页 ip地址的下一跳怎么算 通过CS和IP如何计算物理内存地址(OS)

通过CS和IP如何计算物理内存地址(OS)

#通过CS和IP如何计算物理内存地址(OS)| 来源: 网络整理| 查看: 265

我是罡罡同学,一位初入网安的小白。☜(ˆ▽ˆ) (疯狂暗示 点赞 !关注!转发 !!! 点赞 !关注!转发 !!!)

* 您的支持是罡罡同学前进的最大动力!(欢迎报考山东政法学院网络空间安全学院!!!) 最近在学习操作系统,回顾一下CS和IP的知识点

CS和IP是8086CUP中两个最关键的寄存器。它们用来指示CPU当前要读取的地址。在8086CPU中,任意时刻,CPU将从 (CS) x 16 + (IP) 单元开始读取一条指令并执行。也就是说:CPU 将 CS:IP 指向的内容当作指令执行。

一般来说,CPU在访问内存的时候要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。段寄存器提供段地址。8086CPU有4个段寄存器:CS、DS、ES、SS。典型的提供段地址和偏移地址的寄存器为CS和IP寄存器。也就是说,CPU会将CS:IP合成的物理地址指向的内容当作指令执行。

段地址 x 16 等于 左移四位 一个数据(16进制)左移1位,相当于乘以16。 一个数据 (十进制)左移1位,相当于乘以10。 一个数据(N进制) 左移1位 ,相当于乘以N。 在这里插入图片描述

8086cpu工作的过程可以描述如下: 1:从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器 2:IP=IP+所读取指令的长度,从而读取下一条指令 3:执行指令,转到步骤1,重复这个过程

右边内存 20000H - 20009H 单元存放着可执行的机器码。右边是汇编代码 举例:前三个(第一个括号括起来的部分),内容是B8 23 01 长度是 3byte 对应的汇编代码 mov ax,0123H

图的执行逻辑: 1.Cs IP中的内容送到地址加法器(段地址X16+偏移地址=物理地址) (就是老师上课说的方法,CS左移加上一位+IP) 2.地址加法器将物理地址送入到输入输出控制电路 3.输入输出控制电路将物理地址20000H送上地址总线 4.从20000H开始存放的机器指令 B8 23 01通过数据总线送入Cpu 5.输入输出控制电路将机器指令B8 23 01送入指令缓冲器 6.读取一条指令后,IP中的值自动增加,Cpu读取下一条指令。因为当前指令的长度是3个字节,所以IP中的值加3。此时,Cs:Ip指向内存单元2000:0003

Q2的拓展: 1、请大家仔细看图,当我看到这个图的时候,我想到了一个问题:当CPU去内存去取指令的时候,如何知道取多少长度的内存呢?因为在图中,取 mov ax,0123H 和 mov ax,bx 的长度是不一样的。CPU是怎么知道要取多少长度的呢?在我查询资料之后,终于得到答案: 指令译码一般有几个过程(部件):指令预取、指令预分析(预解码)、解码。预取是从cache或者内存取一系列的字节(大小可以保证至少包含一条指令),并设置一个待分析的位置,预分析从此位置逐字节分析,如果是前缀就设置分析状态(因为前缀可能改变默认地址尺寸和操作数的大小,影响后续指令长度),直到不是前缀,就认为是操作码,x86的op code长度一般为1字节,某些2字节,查表就可以直接找出指令长度了。

2、修改CS、IP的指令不同于修改通用的寄存器值的指令,修改通用寄存器的值可以用mov 指令(mav ax,123),mov指令被称为传送指令。修改CS、IP的指令是jmp指令。jmp指令被称为转移指令。 (1)同时修改代码段寄存器(CS)和指令指针寄存器(IP),形如jmp 段地址:偏移地址。 jmp2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU将在2AE33H处读取指令

(2)仅想修改IP的内容,形如“jmp 某一合法寄存器”,功能是用某一合法寄存器中的值修改IP的内容 jmpax,指令执行前:ax=1000H,CS=2000H,IP=0003H 指令执行后:ax=1000H,CS=2000H,IP=1000H。

3、在编程时,可以根据需要将一组内存单元定义为一个段。我们可以将长度为N(N



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3