CPU的功能模块

CPU从逻辑上可以划分成3个模块,分别是控制单元、运算单元和存储单元,这三部分由CPU内部总线连接起来

  1. 控制单元:控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制器OC(Operation Controller)

  2. 运算单元:是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。

  3. 存储单元:包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方

简单的描述下CPU是如何进行计算的。

例如计算2个数的和:

首先,CPU的控制器从内存读取两条MOV指令,执行指令将内存的值赋值到两个不同的寄存器中。

然后。CPU的控制器从内存读取一条ADD指令,计算两个寄存器中数的和值。

计算的结果保存在第三个寄存器中,并将此寄存器的结果返回到内存中。

cpu总线

  1. 地址总线

CPU是通过地址总线来进行内存地址寻址的。8086cpu有20根地址总线,可以访问 1M (1<<20 )的内存空间。

CPU地址总线的位数决定了CPU的寻址能力。

  1. 数据总线

CPU通过数据总线来进行内存和其他器件之间的数据传递。8086有16根数据总线,每次可以读写16位数据。

数据总线的宽度决定了CPU和外界的数据传输速度。

  1. 控制总线

CPU通过控制总线发出各种控制命令,用来操作外部设备。

CPU寄存器

说明:关于CPU寄存器的话,网上很多资料。这边只是做一个总结。

http://zh.wikipedia.org/wiki/%E5%AF%84%E5%AD%98%E5%99%A8

要编写操作系统,首先要熟悉CPU的结构,这样才能控制CPU完成自己想要的操作。CPU是由很多个寄存器构成的,通过汇编语言操作寄存器的数据,从而进行CPU的执行和运算。

CPU寄存器组可以分为通用寄存器组,段寄存器组,指令指针寄存器 和 标志寄存器。

16位cpu的寄存器组

8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器-包括数据寄存器和指针寄存器、(2)指令指针寄存器、(3)标志寄存器和(4)段寄存器等4类。

CPU数存器组:

总共4个数据寄存器,2个指针寄存器以及2个变址寄存器,如下:

  • 4个数据寄存器(AX、BX、CX和DX)
  • 2个指针寄存器(SP和BP)
  • 2个变址寄存器(SI和DI)

通用寄存器

名称 所属寄存器组 作用
AX 数据寄存器(accumulator) 累加寄存器
1.作为数据寄存器
2.累加器可用于乘、除、输入/输出等操作
BX 数据寄存器(base) 基址寄存器。
1.作为数据寄存器
2.可作为基址寄存器来使用,配合段寄存器寻址
CX 数据寄存器(count) 1. 计数寄存器:在循环和字符串操作时,要用它来控制循环次数
2.位移寄存器:在位操作中,当移多位时,要用CL来指明移位的位数
DX 数据寄存器(data) 1.在进行乘、除运算时,它可作为默认的操作数参与运算
2.用于存放I/O的端口地址

通用寄存器: AX,BX,CX,DX

大小为16位又可再拆分高低位使用,大小为8位:AH,AL,BH,BL,CH,CL,DH,DL。

寄存器(16位) AX BX CX DX
高位(8位) AH BH CH DH
低位(8位) AL BL CL DL

1. 累加寄存器 AX -accumulator,累加寄存器。

作用:累加器可用于乘、除、输入/输出等操作,它们的使用频率很高

2. 基址寄存器 BX -base 基址寄存器。存储器指针

作用:它可作为存储器指针来使用;

3. 计数寄存器 CX -counter,计数寄存器。串操作,循环操作计数寄存器,其中的CL低位为移位操作计数器

作用:在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数

4. 数据寄存器 DX -data,数据寄存器。乘除运算

作用:在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址

指针寄存器(16位)

名称 所属寄存器组 作用
SI 变址寄存器(source index) 源变址寄存器
DI 变址寄存器(destination index) 目标变址寄存器
--- --- ---
SP 栈指针寄存器(stack pointer) 栈指针寄存器
BP 基数指针寄存器(base pointer) 基址指针寄存器

指令指针寄存器(16位)

名称 所属寄存器组 作用
IP 指令指针寄存器 指向当前需要取出的指令字节。IP指向的是指令地址的段内地址偏移量

段寄存器组(16位)

名称 所属寄存器组 作用
CS 代码段寄存器(code segment) 用于代码段内存位置寻址
DS 数据段寄存器(data segment ) 用于数据段内存位置寻址
SS 栈段寄存器(stack segment) 用于堆栈内存位置寻址
ES 附加段寄存器(extra segment)

5. 标志寄存器(每个标志占一位)FLAGS

名称 所属寄存器组 作用
FR 标志寄存器(Flags Register) 存放条件标志、控制标志寄存器

32位cpu的寄存器组

CPU数存器组:

后来出现的32位处理器在16位的基础上延伸到32位:

总共有4个32位的数据寄存器EAX、EBX、ECX和EDX。而这4个32位寄存器的低位和原先16位的一样,命名为:AX、BX、CX和DX。
2个指针寄存器,名称为ESP和EBP,
2个变址寄存器,名称为ESI和EDI。

1. 通用寄存器组(32位)

★名称 ★作用
位数 32位 16位 8位(高) 8位(低)
通用寄存器组
累加寄存器 eax ax ah al
基址寄存器 ebx bx bh bl
计数寄存器 ecx cx ch cl
edx dx dh dl
指针寄存器组
源变址寄存器 esi si --- ---
目标变址寄存器 edi di --- ---
指针寄存器组
栈寄存器组
栈指针寄存器 esp sp --- ---
基址指针寄存器 ebp bp --- ---
指令指针寄存器
指令指针寄存器 eip ip --- ---
段寄存器组
代码段寄存器 cs --- ---
数据段寄存器 ds --- ---
栈段寄存器 ss --- ---
附加段寄存器 es --- ---
附加段寄存器 fs --- ---
附加段寄存器 gs --- ---
标志寄存器
标志寄存器 cflags --- ---

64位cpu的寄存器组

CPU数存器组:

1. 通用寄存器组(64位)

★名称 所属寄存器组 ★作用
RAX 数据寄存器(accumulator) 累加寄存器,1.作为数据寄存器
2.累加器可用于乘、除、输入/输出等操作
RBX 数据寄存器(base) 基址寄存器。1.作为数据寄存器
2.可作为基址寄存器来使用,配合段寄存器寻址
RCX 数据寄存器(count) 1. 计数寄存器:在循环和字符串操作时,要用它来控制循环次数
2.位移寄存器:在位操作中,当移多位时,要用CL来指明移位的位数
RDX 数据寄存器(data) 1.在进行乘、除运算时,它可作为默认的操作数参与运算
2.用于存放I/O的端口地址

2. 指针寄存器(64位)

名称 所属寄存器组 作用
RSP 栈指针寄存器(stack pointer) 栈指针寄存器
RBP 基数指针寄存器(base pointer) 基址指针寄存器
--- --- ---
RSI 变址寄存器(source index) 源变址寄存器
RDI 变址寄存器(destination index) 目标变址寄存器

3. 指令指针寄存器(64位)

在原先的基础上增加到32位:指令指针寄存器名称为:

名称 所属寄存器组 作用
RIP 指令指针寄存器

还新增了8个64位的寄存器:
R8 R9 R10 R11 R12 R13 R14 R15

1.3 CPU简介的更多相关文章

  1. 浅谈被加壳ELF(即android的so文件)的调试

    本文只讨论如何调试被加壳的ELF文件,包括调试中的技巧运用及调试过程中可能遇到的问题的解决方法,不包含如何还原加固的DEX本文将以某加壳程序和某加固为目标. 一.ELF格式简介 ELF全称:Execu ...

  2. 初识CPU卡、SAM卡/CPU卡简介、SAM卡简介 【转】

    初识CPU卡.SAM卡/CPU卡简介.SAM卡简介 IC卡按照接口方式可分为接触式卡.非接触式卡.复合卡:按器件技术可分为非加密存储卡.加密存储卡和CPU卡. 加密存储卡是对持卡人的认证,只有输入正确 ...

  3. 8086 CPU 寄存器简介

    转载:http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些 ...

  4. SPEC CPU 使用简介

    SPEC CPU2000简介 SPEC CPU2000是由标准性能评价机构“The Standard Performance Evaluation Corporation (SPEC)”开发的用于评测 ...

  5. [转帖]8086 CPU 寄存器简介

    8086 CPU 寄存器简介 https://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 哎 没看完 感觉好复杂. 引子 打算写几篇 ...

  6. CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介

    自我学习:一.线程安全日期格式化操作的几种方式:1.每次new一个新对象:public static Date parse(String date) throws ParseException { r ...

  7. CPU结构与指令执行过程简介

    CPU(Central Processing Unit)是计算机中进行算术和逻辑计算处理指令的主要部件. CPU结构 CPU由通用寄存器组,运算器,控制器和数据通路等部件组成. 寄存器包括 数据寄存器 ...

  8. (Matlab)GPU计算简介,及其与CPU计算性能的比较

    1.GPU与CPU结构上的对比 2.GPU能加速我的应用程序吗? 3.GPU与CPU在计算效率上的对比 4.利用Matlab进行GPU计算的一般流程 5.GPU计算的硬件.软件配置 5.1 硬件及驱动 ...

  9. cpu分析简介

    进程占用CPU过高,一般有以下两种原因:          1.    业务量过大导致进程处理负荷高,占用CPU资源:2.    程序BUG导致,比如死循环:    初步查看cpu占用情况top进一步 ...

随机推荐

  1. Python 编程快速上手 第十四章 处理 CSV 文件和 JSON 数据

    前言 这一章分为两个部分,处理 CSV 格式的数据和处理 JSON 格式个数据. 处理 CSV 理解 csv csv 的每一行代表了电子表格中的每一行,每个逗号分开两个单元格csv 的内容全部为文本, ...

  2. HTML 第十二章总结

    HTML5 markup 前言 在这一章中,讲解了新的 HTML5 的一些 markup,并且对其中的<video>进行了很详细的讲解. New HTML5 elements 列表如下: ...

  3. HTML第二章总结

    前言 在第一单元中,我们了解了 "ML":Markup Language,它的作用是: tell the strure of content;在这一单元,进一步认识 HT,它的作用 ...

  4. spring cloud: zuul(三): ribbon负载均衡配置

    zuul的routes配置下path/url组合不支持负载均衡 下面介绍zuul的routes配置下的path/serviceId负载均衡配置 spring-boot-user微服务开启了:7901, ...

  5. 雷林鹏分享:XML Parser

    XML Parser 所有现代浏览器都有内建的 XML 解析器. XML 解析器把 XML 文档转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象. 解析 XML 文档 下面的 ...

  6. LeetCode--682--棒球比赛(java)

    你现在是棒球比赛记录员. 给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在本轮中获得的积分数.2. "+"(一轮的得分):表示本轮获得的得 ...

  7. linux中ping IP可以通但是主机名不通

    在/etc/hosts中配置要ping的主机名称映射 例如: ping test1不通 在/etc/hosts中配置 ip地址  test1

  8. textarea点击蓝色背景,黄色条,input点击黄色条,如何去掉?

    textarea:focus{ background: #ffff outline:none; } input:focus{ oulilne:none; }

  9. python基础之字典以及增删改查

    字典:字典是python中唯一的一个映射类型,主要形式为 dic = {key1:value,key2:value2,....} 字典中key的值是唯一的,主要关系到HASH算法,并且key的值必须是 ...

  10. spring boot 多数据源配置与使用

    在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文 ...