逆向基础--汇编基础(CS与IP) (05)

一. 段地址

  段表示某个范围 / 区间,可以理解为一段地址。更规范的说法是一块地址连续且起始地址为16倍数的存储单元定义为一个段。  

  之所以是16倍数是因为:物理地址=段地址 * 16 +偏移地址

  假设有两个段:10000H ~ 1007FH (段地址为1000H)、10080H ~ 100FFH,段地址为(1008H)。这两个段大小均为80H。-----段地址1000H和1008H,它们之间有什么关系?注意1000H * 10H = 10000H,1008H * 10H = 10080H。所以第二个段起始于10080H,正好是第一个段结束后的下一个字节,第一个段结束于1007FH,1007FH + 1 = 10080H,所以是的,两个段是连续。的。注意10H就是16D

  这段我们在编程时就可以根据需要将一块地址连续的存储单元看成一个段,通过 物理地址=段地址 * 16+ 偏移地址 来定位段中的内存。

  注意:段地址一定是16的倍数,且段的最大长度为64kb。具体一个段使用多大的长度,是由程序来定义的,上面段的长度为80H (128 字节)

  在x86架构中,段地址和偏移地址一起形成物理地址。物理地址的计算是段地址乘以16(或左移4位)加上偏移地址。

  段地址的根本作用是:扩展寻址空间,因为早期CPU8086的寄存器是16位的,如果直接使用,只能寻址 2^16 = 64KB 的内存,这远远不够。所以段地址 × 16 + 偏移地址就使CPU的寻址能力从64KB提升到了 2^20 = 1MB。

  段地址的核心功能是:组织和隔离内存,段地址为程序提供了一种逻辑上的内存划分方式,使得内存管理更加有序( CS, DS,SS, ES)。

  段地址是由CPU的相关部件提供,大多寄存器中有4个段寄存器: CS, DS,SS, ES。当CPU要访问内存时,由他们提供段地址,通过分段来管理内存

    ---CS (Code Segment):代码段,存放当前正在执行的指令。

    ---DS (Data Segment):数据段,存放程序的主要数据。

    ---SS (Stack Segment):堆栈段,存放堆栈数据。

    ---ES (Extra Segment):附加段,通常用作数据操作的备用段。

二. CS与IP

  CS与IP是8086CPU中最关键的两个寄存器。它们指示CPU当前要读取的指令的地址。 CS称之为代码段寄存器,IP为指令指针寄存器。

  在8086CPU中,任意时刻设CS中的值为M,IP中的值为N,则CPU将从 M *16 +N地址单元中取出一条指令并执行。也就是说当前指令在哪由CS和IP来决定,表示为CS:IP,下图为CPU通过CS、IP寄存器进行指令操作

  上图说明如下:

    1)CS的内容为2000H,IP内容为0000H, 说明物料地址为20000H(2000H *10H=20000H 或者2000H * 16=20000H),20000H去寻址对应内存为B8H,通过指令计数器把B8 23 01通过数据总线送到指令缓冲器中,再执行控制器(对应的汇编指令 mov ax,0123H)。

    2)内存20000H ~ 20009H内存单元中存放着可执行的机器码

   那么上述的状态下程序又是如何执行的呢?

    1)CPU从CS:IP指向的存储单元中读取指令,读取的指令进入指令缓冲区。

    2)IP=IP + 所读取指令的长度,从而指向下一条指令。 如下一次IP为0003H, 通过地址加法器组成20003H再去寻址对应内存为BBH

    3)执行指令。重复1、2步

  总结:

    1)CS(Code Segment,代码段寄存器):

        --- 用于存放当前代码段的段地址。

        --- 代码段是内存中存储程序指令的区域。

        --- 段地址是20位物理地址的高16位,实际物理地址由CS左移4位(相当于乘以16)加上IP的值得到。

    2)IP(Instruction Pointer,指令指针寄存器):

        --- 用于存放下一条要执行的指令在代码段内的偏移地址。

        --- 它总是与CS寄存器一起使用,形成20位的物理地址,即:物理地址 = (CS << 4) + IP。

        --- 当CPU执行一条指令后,IP会自动增加,指向下一条指令。增加的大小取决于已执行指令的长度。

   上面讲到了CS段用途是取指令,默认的偏移地址是IP。而其它三个段寄存器不再这里介绍: DS段用途是访问数据,SS段用途是堆栈操作,ES段用途是串操作目标, 它们的默认的偏移地址都不同。

相关推荐
星恒讯工业路由器6 小时前
5G FWA技术演进与趋势
网络·5g·信息与通信·4g·5g fwa·3gpp规范·fwa趋势
凌云C6 小时前
5G 协议体系与交互流程
网络协议
星夜夏空999 小时前
网络编程(1)
服务器·网络
上海云盾-小余9 小时前
中小站点防护避坑:低价高防服务存在的各类安全短板剖析
网络·爬虫·安全·ddos
X7x511 小时前
跨厂商路由引入(重发布)实战指南:华为、华三、思科的逻辑差异与配置避坑
网络协议·信息与通信·信号处理·实施路由引入
数据知道12 小时前
邮件安全实战:SPF/DKIM/DMARC 配置与钓鱼绕过
网络·安全·web安全·网络安全·邮件安全
玩转4G物联网12 小时前
FS800DTU 新品上线|免费使用 DMP 设备管理平台,支持远程批量配置 & OTA 升级
物联网·网络协议·tcp/ip·云平台·核心板·fs800dtu·iot管理平台
王莎莎-MinerU12 小时前
MCP 解决的是工具接入,科研 Agent 还缺的是科学证据接口标准化
开发语言·网络·人工智能·深度学习·pdf·c#·php
Chloeis Syntax12 小时前
JAVAEE初阶 --- 构造HTTP请求
网络·网络协议·http·postman
砚凝霜13 小时前
软考网络工程师|第 1 章 计算机网络基础 完整备考笔记
网络·笔记·计算机网络