1.3 CPU简介
CPU的功能模块
CPU从逻辑上可以划分成3个模块,分别是控制单元、运算单元和存储单元,这三部分由CPU内部总线连接起来
控制单元:控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制器OC(Operation Controller)
运算单元:是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。
存储单元:包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方
简单的描述下CPU是如何进行计算的。
例如计算2个数的和:
首先,CPU的控制器从内存读取两条MOV指令,执行指令将内存的值赋值到两个不同的寄存器中。
然后。CPU的控制器从内存读取一条ADD指令,计算两个寄存器中数的和值。
计算的结果保存在第三个寄存器中,并将此寄存器的结果返回到内存中。
cpu总线
- 地址总线
CPU是通过地址总线来进行内存地址寻址的。8086cpu有20根地址总线,可以访问 1M (1<<20 )的内存空间。
CPU地址总线的位数决定了CPU的寻址能力。
- 数据总线
CPU通过数据总线来进行内存和其他器件之间的数据传递。8086有16根数据总线,每次可以读写16位数据。
数据总线的宽度决定了CPU和外界的数据传输速度。
- 控制总线
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简介的更多相关文章
- 浅谈被加壳ELF(即android的so文件)的调试
本文只讨论如何调试被加壳的ELF文件,包括调试中的技巧运用及调试过程中可能遇到的问题的解决方法,不包含如何还原加固的DEX本文将以某加壳程序和某加固为目标. 一.ELF格式简介 ELF全称:Execu ...
- 初识CPU卡、SAM卡/CPU卡简介、SAM卡简介 【转】
初识CPU卡.SAM卡/CPU卡简介.SAM卡简介 IC卡按照接口方式可分为接触式卡.非接触式卡.复合卡:按器件技术可分为非加密存储卡.加密存储卡和CPU卡. 加密存储卡是对持卡人的认证,只有输入正确 ...
- 8086 CPU 寄存器简介
转载:http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些 ...
- SPEC CPU 使用简介
SPEC CPU2000简介 SPEC CPU2000是由标准性能评价机构“The Standard Performance Evaluation Corporation (SPEC)”开发的用于评测 ...
- [转帖]8086 CPU 寄存器简介
8086 CPU 寄存器简介 https://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 哎 没看完 感觉好复杂. 引子 打算写几篇 ...
- CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
自我学习:一.线程安全日期格式化操作的几种方式:1.每次new一个新对象:public static Date parse(String date) throws ParseException { r ...
- CPU结构与指令执行过程简介
CPU(Central Processing Unit)是计算机中进行算术和逻辑计算处理指令的主要部件. CPU结构 CPU由通用寄存器组,运算器,控制器和数据通路等部件组成. 寄存器包括 数据寄存器 ...
- (Matlab)GPU计算简介,及其与CPU计算性能的比较
1.GPU与CPU结构上的对比 2.GPU能加速我的应用程序吗? 3.GPU与CPU在计算效率上的对比 4.利用Matlab进行GPU计算的一般流程 5.GPU计算的硬件.软件配置 5.1 硬件及驱动 ...
- cpu分析简介
进程占用CPU过高,一般有以下两种原因: 1. 业务量过大导致进程处理负荷高,占用CPU资源:2. 程序BUG导致,比如死循环: 初步查看cpu占用情况top进一步 ...
随机推荐
- 关于select的默认样式问题
select { border: solid 1px #000; appearance:none; -moz-appearance:none; -webkit-appearance:none; pad ...
- lua --- __newindex 的使用规则
1.如果 __newindex 是一个函数,在给 table 不存在的字段赋值的时候,会调用这个函数2.如果 __newindex 是一个table,在给 table 不存在的字段赋值的时候,会直接给 ...
- phalcon的save方法保存失败?
phalcon的save方法保存失败? 因为表中设置了一个字段:disabled, 默认值是1, 在创建数据的时候,disabled没有传值过去,导致save方法一直是false, 当返回false时 ...
- p1211 Prime Cryptarithm
直接深搜+检验. #include <iostream> #include <cstdio> #include <cmath> #include <algor ...
- 小程序for循环嵌套
<view class='nocontnt' wx:if="{{listLength == 0 }}"> 暂无相关评论 </view> <view c ...
- python记录_day30 多进程
1.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 同一个程序执行两次,就会产生两个进程 ## 进程调度算 ...
- vue项目 sockjs-node一直报错问题
vue3下 vue.config.js中 devServer: { host: '0.0.0.0', port: 8080, proxy: { '/': { target: 'http://127.0 ...
- element-ui radio 再次点击取消选中
<el-radio-group v-model="radio2"> <el-radio @click.native.prevent="clickitem ...
- 使用ajax请求接口,跨域后cookie无法设置,全局配置ajax;及使用axios跨域后cookie无法设置,全局配置axios
问题一: 使用ajax/axios跨域请求接口,后端放行了,能够正常获取数据,但是cookie设置不进去,后端登录session判断失效 ajax解决办法: //设置ajax属性 crossDomai ...
- Leetcode 117
if(root == NULL) return; queue<TreeLinkNode *> que; que.push(root); while(!empty(que)){ int le ...