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位平台。
1583 0
|
7天前
|
Linux
Linux rsyslog占用内存CPU过高解决办法
该文档描述了`rsyslog`占用内存过高的问题及其解决方案。
30 4
|
1月前
|
移动开发 运维 监控
掌握Linux运维利器:查看CPU和内存占用,轻松解决性能问题!
掌握Linux运维利器:查看CPU和内存占用,轻松解决性能问题!
|
1月前
|
监控 Python
【python】实现cpu/内存监控的功能(非常简单)
【python】实现cpu/内存监控的功能(非常简单)
|
1月前
|
Linux
Linux 查看进程PID和线程CPU和内存占用情况
Linux 查看进程PID和线程CPU和内存占用情况
22 0
|
2月前
|
运维 监控 网络协议
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC
64 0
|
2月前
|
JSON Java Serverless
nacos常见问题之cpu和内存占用高如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
217 0
|
1月前
|
移动开发 Linux
Linux下如何查看哪些进程占用的CPU内存资源最多
Linux下如何查看哪些进程占用的CPU内存资源最多
|
12天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
10天前
|
监控 Shell
Shell脚本监控CPU、内存和硬盘利用率
Shell脚本监控CPU、内存和硬盘利用率