CPU Instruction Pointer

简介: CPU Instruction Pointer eryar@163.com 1.Introduction CPU对存储器的读写通过总线Bus来完成,总线又分为地址总线(Address Bus)、数据总线(Data Bus)、控制总线(Control Bus)。

CPU Instruction Pointer

eryar@163.com

1.Introduction

CPU对存储器的读写通过总线Bus来完成,总线又分为地址总线(Address Bus)、数据总线(Data Bus)、控制总线(Control Bus)。地址总线AB决定了CPU的寻址能力,即可以访问的存储空间的大小。数据总线DB决定了CPU的一次操作中可以处理的数据的大小,16位CPU一次可以加载两个字节,32位CPU一次可以加载4个字节。当然CPU的主频越大,那么在相同的时间内,处理的次数会更多。

2.16bit CPU 

由于8086CPU有20位地址总线,所以寻址能力为1MB。但是8086所有的寄存器都是16位的,如果由寄存器直接处理地址,那么一个16位的寄存器可以访问的最大地址为64KB。如何通过16位的寄存器来访问这1MB的空间呢?8086CPU折腾出一个地址加法器,通过加法器来根据两个16位地址来合成一个20位的地址,即物理地址=段地址X16+偏移地址。对应到CPU中就是CS和IP这两个寄存器。

8086CPU中的CS和IP的内容提供了CPU要执行指令的地址。在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。CPU从何处执行指令是由CS和IP中的内容决定的,程序员可以通过改变CS和IP中的内容来控制CPU执行目标指令。

若想同时修改CS和IP的内容,可以用形如jmp 段地址:偏移地址的指令完成。如下图所示:

wps_clip_image-10222

3.32bit CPU

因为80386的CPU寻址能力是4GB,所以它的寻址模式是平坦模式,不需要用段地址+偏移地址来折腾。所以32位CPU的EIP寄存器对应了16位CPU中的CS和IP两个寄存器。修改了EIP寄存器就可以改变CPU要执行的指令。如下面一段简单代码:

#include  < stdio.h >  

int  main( int  argc,  char *  argv[]) 

    mark: printf(
" hi\n " ); 

    
goto  mark; 

    
return   0
}

使用了goto,在Debug时可以在Visual Studio中看到CPU中相关寄存器中的信息如下图所示:

wps_clip_image-22411

由上图可知,goto对应的汇编命令就是一个修改EIP寄存器的jmp指令。

目录
相关文章
|
Linux C语言 C++
linux GCC编译错误:CPU you selected does not support x86-64 instruction set
Linux GCC编译时如遇到如下错误: cpp:1: error: CPU you selected does not support x86-64 instruction set 是因为在64位平台上加了-march=pentium4这样一个编译参数,它只用于32位平台。
2003 0
|
2月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
724 0
|
1月前
|
弹性计算 前端开发 NoSQL
2025最新阿里云服务器配置选择攻略:CPU、内存、带宽与系统盘全解析
本文详解2025年阿里云服务器ECS配置选择策略,涵盖CPU、内存、带宽与系统盘推荐,助你根据业务需求精准选型,提升性能与性价比。
|
2月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
199 0
|
4月前
|
数据可视化 Linux iOS开发
Python测量CPU和内存使用率
这些示例帮助您了解如何在Python中测量CPU和内存使用率。根据需要,可以进一步完善这些示例,例如可视化结果或限制程序在特定范围内的资源占用。
178 22
|
8月前
|
存储 设计模式 监控
快速定位并优化CPU 与 JVM 内存性能瓶颈
本文介绍了 Java 应用常见的 CPU & JVM 内存热点原因及优化思路。
901 166
|
6月前
|
存储 设计模式 监控
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
156 0
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
|
7月前
|
人工智能 运维 监控
2025年阿里云服务器配置选择全攻略:CPU、内存、带宽与系统盘详解
在2025年,阿里云服务器以高性能、灵活扩展和稳定服务助力数字化转型,提供轻量应用服务器、通用型g8i实例等多样化配置,满足个人博客至企业级业务需求。针对不同场景(如计算密集型、内存密集型),推荐相应实例类型与带宽规划,强调成本优化策略,包括包年包月节省成本、ESSD云盘选择及地域部署建议。文中还提及安全设置、监控备份的重要性,并指出未来可关注第九代实例g9i支持的新技术。整体而言,阿里云致力于帮助用户实现性能与成本的最优平衡。 以上简介共计238个字符。
|
9月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
899 7