汇编语言、寄存器分类及程序计数器
目录
一、计算机语言
汇编语言
寄存器分类
二、程序计数器
一、计算机语言
计算机是由二进制构成的,它只能听懂二进制也就是机器语言,但是普通人是无法看懂机器语言的,这个时候就需要一种电脑既能识别,人又能理解的语言,最先出现的就是汇编语言。但是汇编语言晦涩难懂,所以又出现了像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就会根据程序计数器的数值,从内存中读取命令并执行,也就是说,程序计数器控制程序的流程。
汇编语言、寄存器分类及程序计数器相关推荐
- ARM32 寄存器分类
ARM32 处理器共有37个寄存器,所有这些寄存器都是32位的. 1,31 个通用寄存器,包括一个程序计数器寄存器 2,6 个状态寄存器 所有的寄存器编排有重叠的分组,有当前的处理器模式决定使用哪一个 ...
- 汇编语言寄存器英文全名
汇编语言寄存器英文全名: http://baike.baidu.com/view/6159.htm ------------------------------------- 我粘了!楼上粘贴那么多谁 ...
- Modbus寄存器分类及地址分配
Modbus协议中一个重要的概念是寄存器,所有的数据均存放于寄存器中.最初Modbus协议借鉴了PLC中寄存器的含义,但是随着Modbus协议的广泛应用,寄存器的概念进一步泛化,不再是指具体的物理寄存 ...
- ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR
参考:堆栈指针寄存器 SP详解以及栈的作用 作者:蓝色鲜橙多 网址:https://blog.csdn.net/qq_36588941/article/details/89873633?utm_sou ...
- 汇编语言寄存器说明eax, ebx, ecx, edx, esi, edi, ebp, esp,eip
eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器.如果用C语言来解释,可以把这些寄存器当作变量看待. 比 ...
- 汇编语言寄存器AX,BX,CX,DX
寄存器AX,BX,CX,DX 汇编语言中的AX.BX.CX.DX是CPU内部的通用寄存器中的数据寄存器助记符. 数据寄存器用来存放参与运算的数据或是存储运算的结果.这四个数据寄存器都是16位的,实际由 ...
- X64汇编语言寄存器结构及其与X86架构编程区别
目录 1. 关于X64架构 2. X64架构的寄存器结构 2.1 通用目的寄存器 2.2 浮点数寄存器 2.3 指令指针寄存器 2.4 段寄存器 2.5 标识寄存器 2.6 控制寄存器 2.6. ...
- [从零学习汇编语言] -寄存器详解
文章目录 前言 一. 存储器与通用寄存器 1. 存储器 2. 寄存器 2.1 通用寄存器 2.2 字在寄存器中的存储 二.地址寄存器 1. 物理地址 1.1 地址寄存器 1.2 8086CPU给出物理 ...
- 汇编语言 寄存器 2.9~2.12 总结
2019独角兽企业重金招聘Python工程师标准>>> 段地址存放在8086CPU的段寄存器中,输入一条汇编指令后比如(mov ax,1234H),8086CPU会要求访问此汇编指令 ...
- 汇编语言--寄存器(cpu工作原理)
本文主要将介绍的是8086 CPU中的寄存器, 寄存器就是个存储信息的单元或者说是器件又或者说是容器而已,就比如内存也是一个存储介质或者说是存储单元而已,其实寄存器从理解上来说和内存差不多, 只不过寄 ...
最新文章
- linux中system清屏命令,Linux磁盘管理命令
- python字典数据类型笔记_Python学习笔记整理(六)Python中的字典
- FortiGate SSH管理认证问题安全公告
- OpenCV导出模板参数文件
- LeetCode 第 25 场双周赛(718/1832,前39.2%)
- 深度优先搜索——First Step(洛谷 P3654)
- python中如何导入图片,Unreal中的python如何导入图片资源到引擎
- 拼多多api接口php算法,PHP 调用 拼多多 API 模板
- 全局变量只能初始化不能赋值
- Python文件属性、文件摘要
- jdy视频直播流采集分析
- Unity3D 多层血条特效
- android可拖动的控件,Android拖动控件的实现,自定义可拖动的LinearLayout
- linux 中文ssid 显示,【两招解决网络设置 支持中文SSID】
- 你的微信昵称,正在暴露你
- css3上箭头怎么写,CSS3箭头
- python表达式_Python-计算字符串中的数学表达式
- php+美拍地址+解析,美拍视频采集之视频地址解析下载
- cellspacing与cellpadding
- 等保(网络安全等级保护)2.0与定级备案之——等保2.0与等保1.0区别解读