目录

一、计算机语言

汇编语言

寄存器分类

二、程序计数器


一、计算机语言

计算机是由二进制构成的,它只能听懂二进制也就是机器语言,但是普通人是无法看懂机器语言的,这个时候就需要一种电脑既能识别,人又能理解的语言,最先出现的就是汇编语言。但是汇编语言晦涩难懂,所以又出现了像C、C++、Java的高级语言。

所以计算机语言一般分为两种:低级语言(机器语言,汇编语言)和高级语言。使用高级语言编写的程序,经过编译转换成机器语言后才能运行,而汇编语言经过汇编器才能转换为机器语言。

汇编语言

汇编语言表示的代码清单示例:

mov eax,dword ptr [ebp-8] /* 把数值从内存复制到eax */
add eax,dword ptr [ebp-0Ch] /* 把eax的数值和内存的数值相加 */
mov dword ptr [ebp-4],eax /* 把eax的数值(上一步的结果)存储在内存中*/

这就是采用汇编语言(assembly)编写程序的一部分。汇编语言采用 助计符(memonic) 来编写程序,每一个原本是电信号的机器语言指令会有一个与其对应的助记符,例如:mov,add 分别是数据的存储(move)和相加(addition)的简写。汇编语言和机器语言时一 一对应的。这一点和高级语言有很大的不同,通常我们将汇编语言编写的程序转换为机器语言的过程称为 汇编;反之,机器语言转化为汇编语言的过程称为 反汇编

汇编语言能够帮助你理解计算机做了什么工作,机器语言级别的程序时通过 寄存器 来处理的,上面代码中的 eax,ebp 都是表示的寄存器,是CPU内部寄存器的名称,所以可以说 CPU是一系列寄存器的集合体。在内存中的存储通过地址编号来表示,而寄存器的种类则通过名字来区分。

寄存器分类

不同类型的CPU。其内部寄存器的种类,数量以及寄存器的数值范围都是不同的。不过,根据功能的不同,可以将寄存器划分为下面几类:

种类 功能
累加寄存器 存取运行的数据和运算后的数据
标志寄存器 用于反应处理器的状态和运算结果的某些特征以及控制指令的执行
程序计数器 程序计数器是用于存放下一条指令所在单元的地址的地方
基址寄存器 存储数据内存的起始位置
变址寄存器 存储基址的相对地址
通用寄存器 存储任意数据
指令寄存器 储存正在被运行的指令,CPU内部使用,程序无法对该寄存器进行读写
栈寄存器 存储栈区域的起始位置

其中程序计数器、累加寄存器、标志寄存器、指令寄存器和栈寄存器都只有一个,其他寄存器一般有多个。

二、程序计数器

程序计数器(Program Counter)是用来存储下一条指令所在单元的地址。

程序执行时,PC的初值为程序第一条指令的地址,在顺序执行程序时,控制器首先按程序计数器所指出的指令地址从内存中取出一条指令,然后分析和执行该指令,同时将PC的值加1指向下一条要执行的指令。

可根据一个示例来看一下程序计数器的执行过程:

内存中配置程序示例

这是一段进行相加的操作,程序启动,在经过编译解析后会由操作系统把硬盘中的程序复制到内存中,示例中的程序将123和456执行相加操作,并将结果输出到显示屏上。由于使用机器语言难以描述,所以这里经过翻译后的结果,实际上每个指令和数据都可能分布在不同的地址上,但为了方便说明,把组成每一条的内存和数据放在一个内存地址上。

地址0100是程序运行的起始位置。Windows等操作系统把程序从硬盘复制到内存后,会将程序计数器作为设定为起始位置0100,然后执行程序,每执行一条指令后,程序计数器的数据会增加1(或者直接指向下一条指令的地址),然后,CPU就会根据程序计数器的数值,从内存中读取命令并执行,也就是说,程序计数器控制程序的流程

汇编语言、寄存器分类及程序计数器相关推荐

  1. ARM32 寄存器分类

    ARM32 处理器共有37个寄存器,所有这些寄存器都是32位的. 1,31 个通用寄存器,包括一个程序计数器寄存器 2,6 个状态寄存器 所有的寄存器编排有重叠的分组,有当前的处理器模式决定使用哪一个 ...

  2. 汇编语言寄存器英文全名

    汇编语言寄存器英文全名: http://baike.baidu.com/view/6159.htm ------------------------------------- 我粘了!楼上粘贴那么多谁 ...

  3. Modbus寄存器分类及地址分配

    Modbus协议中一个重要的概念是寄存器,所有的数据均存放于寄存器中.最初Modbus协议借鉴了PLC中寄存器的含义,但是随着Modbus协议的广泛应用,寄存器的概念进一步泛化,不再是指具体的物理寄存 ...

  4. ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR

    参考:堆栈指针寄存器 SP详解以及栈的作用 作者:蓝色鲜橙多 网址:https://blog.csdn.net/qq_36588941/article/details/89873633?utm_sou ...

  5. 汇编语言寄存器说明eax, ebx, ecx, edx, esi, edi, ebp, esp,eip

    eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器.如果用C语言来解释,可以把这些寄存器当作变量看待. 比 ...

  6. 汇编语言寄存器AX,BX,CX,DX

    寄存器AX,BX,CX,DX 汇编语言中的AX.BX.CX.DX是CPU内部的通用寄存器中的数据寄存器助记符. 数据寄存器用来存放参与运算的数据或是存储运算的结果.这四个数据寄存器都是16位的,实际由 ...

  7. X64汇编语言寄存器结构及其与X86架构编程区别

    目录 1.  关于X64架构 2.  X64架构的寄存器结构 2.1  通用目的寄存器 2.2 浮点数寄存器 2.3 指令指针寄存器 2.4 段寄存器 2.5 标识寄存器 2.6 控制寄存器 2.6. ...

  8. [从零学习汇编语言] -寄存器详解

    文章目录 前言 一. 存储器与通用寄存器 1. 存储器 2. 寄存器 2.1 通用寄存器 2.2 字在寄存器中的存储 二.地址寄存器 1. 物理地址 1.1 地址寄存器 1.2 8086CPU给出物理 ...

  9. 汇编语言 寄存器 2.9~2.12 总结

    2019独角兽企业重金招聘Python工程师标准>>> 段地址存放在8086CPU的段寄存器中,输入一条汇编指令后比如(mov ax,1234H),8086CPU会要求访问此汇编指令 ...

  10. 汇编语言--寄存器(cpu工作原理)

    本文主要将介绍的是8086 CPU中的寄存器, 寄存器就是个存储信息的单元或者说是器件又或者说是容器而已,就比如内存也是一个存储介质或者说是存储单元而已,其实寄存器从理解上来说和内存差不多, 只不过寄 ...

最新文章

  1. linux中system清屏命令,Linux磁盘管理命令
  2. python字典数据类型笔记_Python学习笔记整理(六)Python中的字典
  3. FortiGate SSH管理认证问题安全公告
  4. OpenCV导出模板参数文件
  5. LeetCode 第 25 场双周赛(718/1832,前39.2%)
  6. 深度优先搜索——First Step(洛谷 P3654)
  7. python中如何导入图片,Unreal中的python如何导入图片资源到引擎
  8. 拼多多api接口php算法,PHP 调用 拼多多 API 模板
  9. 全局变量只能初始化不能赋值
  10. Python文件属性、文件摘要
  11. jdy视频直播流采集分析
  12. Unity3D 多层血条特效
  13. android可拖动的控件,Android拖动控件的实现,自定义可拖动的LinearLayout
  14. linux 中文ssid 显示,【两招解决网络设置 支持中文SSID】
  15. 你的微信昵称,正在暴露你
  16. css3上箭头怎么写,CSS3箭头
  17. python表达式_Python-计算字符串中的数学表达式
  18. php+美拍地址+解析,美拍视频采集之视频地址解析下载
  19. cellspacing与cellpadding
  20. 等保(网络安全等级保护)2.0与定级备案之——等保2.0与等保1.0区别解读

热门文章

  1. 计算机系统安全启动,怎么关闭安全启动_关闭bios安全启动的方法图文步骤
  2. element tabs label 插槽
  3. --hot 和 --inline的区别
  4. JAVA根据年月查询当月的天数
  5. bootstrap fileupload插件实现文件上传与前端回显图片
  6. cordic ip核 vivado_Xilinx Vivado CORDIC IP核求解atan 反正切
  7. GIS(地理信息系统/地理信息科学)怎么评职称?
  8. redis主从,哨兵模式配置
  9. Oracle AutoVue 使用范围
  10. 手写一个简单的mybatis