指令寄存器

Linux内存管理-预备篇(寄存器)

烂漫一生 提交于 2019-12-01 23:33:13
前言(wxy): 说到寄存器,迷迷茫茫好多年,一方面记不住每个寄存器的名称以及作用,另一方面迷惑于寄存器的名称,常常会有一个疑惑就是说道寄存器的种类,怎么各种版本,他们到底什么关系,基本上所有的博客都是直接拷贝别人的,而且也不 说明他们到底什么关系,指示罗列概念,我百度了一下午也没查出个所以然,真TM生气......今天终于解开了这个谜团,原来CPU寄存器分为两类: 用户可见寄存器 ,用户可以对这些寄存器进行编程,还可以通过优化使CPU因使用这类寄存器而减少对主存的访问次数,也就是说我们使用汇编语言可以直接对其操作; 控制和状态寄存器 ,用户不可对其进行编程,他们被控制部件使用,以控制CPU的操作,也可以被带有特权的操作系统程序使用,从而控制程序的执行。 一:控制和状态寄存器 : 参见: https://blog.csdn.net/kwame211/article/details/77773621 CPU中至少要有六类寄存器:指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)。这些寄存器用来暂存一个计算机字,其数目可以根据需要进行扩充。 1. 数据寄存器(Data Register,DR/MDR) 又称 数据/ 指令 缓冲寄存器 数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之

2019-2020-1学期 20192426 《网络空间安全导论》第三周学习总结

早过忘川 提交于 2019-12-01 23:25:07
第六章 低级程序设计语言与伪代码 6.1计算机操作 1.计算机:能够存储、检索和处理数据的可编程电子设备。 存储、检索和处理 是计算机能够对数据执行的操作。也就是说,控制单元执行的指令能够把数据存储到机器的内存中,在机器内存中检索数据,在算术逻辑单元中以某种方式处理数据。 6.2机器语言 1.机器语言(machine language):由计算机直接使用的二进制编码指令构成的语言。 每种处理器都有自己专用的机器指令集合。 这些指令是机器唯一真正能够执行的指令。 2.Pep/8:一台虚拟机 虚拟机(virtual computer (machine)) :为了模拟真实机器的重要特征而设计的假象机器。 Pep/8有39个机器语言指令。 Pep/8反映的重要特性 Pep/8的字长是2字节,或者16比特。这样向算术/逻辑单元(ALU)流入的数据或从算术/逻辑单元流出的数据在长度上就是16比特。 Pep/8有七个寄存器,我们重点研究:程序计数器(PC)、指令寄存器(IR)、累加器. 累加器是用来保存操作的数据和结果。 可用的比特数决定了我们可以使用的内存大小。 指令格式 在Pep/8中,一条指令由两部分组成,即 8位的指令说明符和(可选的)16位的操作数说明符。 指令说明符(指令的第一个字节) :说明了要执行什么操作和如何解释操作数的位置。 操作数说明符(指令的第二和第三个字节)

2019-2020-1学期 20192426 《网络空间安全导论》第三周学习总结

空扰寡人 提交于 2019-12-01 23:06:32
第六章 低级程序设计语言与伪代码 1.计算机操作 计算机是能够 存储、检索和处理数据的可编程电子设备。 2.机器语言 计算机语言(machine language):由计算机直接使用的二进制编码指令构成的语言。 Pep/8:一台虚拟机 虚拟机(virtual computer(machine)):为了模拟真实机器的重要特征而设计的假想机器。 Pep/8有39个机器语言指令。 Pep/8反映的重要特性。 Pep/8的内存单元由65536字节的存储空间构成。这些字节从0到65536(十进制)进行编号。 寄存器: 程序计数器(PC),其中包含下一条即将被执行的指令的地址。 指令寄存器(IR),其中包含正在被执行指令的一个副本。 累加器(是一个寄存器)。 累加器是用来保存操作的数据和结果。 指令格式 一条指令由两部分组成,即8位的指令说明符和(可选的)16位的操作数说明符。说明指令符(指令的第一个字节)说明了要执行什么操作(如把一个数加到一个已经存储在寄存器中的值上)和如何解释操作数的位置。操作数说明符(指令的第二和第三字节)存放的是操作数本身或者操作数的地址。有些指令没有操作数说明符。 指令说明符的格式根据表示一个具体操作所用的比特数的不同而不同。在Pep/8中,操作代码(称为操作码)的长度从4比特到8比特不等。我们在这里所用的操作码长度是4比特或5比特

2019-2020-1学期 20192409 《网络空间安全专业导论》第三周学习总结

坚强是说给别人听的谎言 提交于 2019-12-01 23:01:18
第六章 低级程序设计语言与伪代码 1.计算机操作 计算机是能够 存储、检索和处理数据的可编程电子设备。 2.机器语言 计算机语言(machine language):由计算机直接使用的二进制编码指令构成的语言。 Pep/8:一台虚拟机 虚拟机(virtual computer(machine)):为了模拟真实机器的重要特征而设计的假想机器。 Pep/8有39个机器语言指令。 Pep/8反映的重要特性。 Pep/8的内存单元由65536字节的存储空间构成。这些字节从0到65536(十进制)进行编号。 寄存器: 程序计数器(PC),其中包含下一条即将被执行的指令的地址。 指令寄存器(IR),其中包含正在被执行指令的一个副本。 累加器(是一个寄存器)。 累加器是用来保存操作的数据和结果。 指令格式 一条指令由两部分组成,即8位的指令说明符和(可选的)16位的操作数说明符。说明指令符(指令的第一个字节)说明了要执行什么操作(如把一个数加到一个已经存储在寄存器中的值上)和如何解释操作数的位置。操作数说明符(指令的第二和第三字节)存放的是操作数本身或者操作数的地址。有些指令没有操作数说明符。 指令说明符的格式根据表示一个具体操作所用的比特数的不同而不同。在Pep/8中,操作代码(称为操作码)的长度从4比特到8比特不等。我们在这里所用的操作码长度是4比特或5比特

程序员需要了解的硬核知识之CPU

有些话、适合烂在心里 提交于 2019-12-01 18:50:02
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU 打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU CPU是什么 CPU 的全称是 Central Processing Unit ,它是你的电脑中最 硬核 的组件,这种说法一点不为过。CPU 是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU。 这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说 CPU 决定了你电脑的计算能力。 CPU 实际做什么 CPU 的核心是从程序或应用程序获取指令并执行计算。此过程可以分为三个关键阶段: 提取,解码和执行 。CPU从系统的 RAM 中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。 RAM : 随机存取存储器(英语:Random Access Memory,缩写: RAM ),也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的 临时数据存储介质 CPU 的内部结构

程序员需要了解的硬核知识之CPU

柔情痞子 提交于 2019-12-01 18:46:47
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU 打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU CPU是什么 CPU 的全称是 Central Processing Unit ,它是你的电脑中最 硬核 的组件,这种说法一点不为过。CPU 是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU。 这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说 CPU 决定了你电脑的计算能力。 CPU 实际做什么 CPU 的核心是从程序或应用程序获取指令并执行计算。此过程可以分为三个关键阶段: 提取,解码和执行 。CPU从系统的 RAM 中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。 RAM : 随机存取存储器(英语:Random Access Memory,缩写: RAM ),也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的 临时数据存储介质 CPU 的内部结构

程序员需要了解的硬核知识之CPU

柔情痞子 提交于 2019-12-01 18:45:39
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU 打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU CPU是什么 CPU 的全称是 Central Processing Unit ,它是你的电脑中最 硬核 的组件,这种说法一点不为过。CPU 是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU。 这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说 CPU 决定了你电脑的计算能力。 CPU 实际做什么 CPU 的核心是从程序或应用程序获取指令并执行计算。此过程可以分为三个关键阶段: 提取,解码和执行 。CPU从系统的 RAM 中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。 RAM : 随机存取存储器(英语:Random Access Memory,缩写: RAM ),也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的 临时数据存储介质 CPU 的内部结构

【TencentOS tiny】深度源码分析(2)——调度器

百般思念 提交于 2019-12-01 13:43:37
温馨提示:本文不描述与浮点相关的寄存器的内容,如需了解自行查阅(毕竟我自己也不懂) 调度器的基本概念 TencentOS tiny 中提供的任务调度器是基于优先级的全抢占式调度,在系统运行过程中,当有比当前任务优先级更高的任务就绪时,当前任务将立刻被 切出 ,高优先级任务 抢占 处理器运行。 TencentOS tiny 内核中也允许创建相同优先级的任务。相同优先级的任务采用时间片轮转方式进行调度(也就是通常说的分时调度器),时间片轮转调度仅在当前系统中 无更高优先级就绪任务 的情况下才有效。 为了保证系统的实时性,系统尽最大可能地保证高优先级的任务得以运行。任务调度的原则是一旦任务状态发生了改变,并且当前运行的任务优先级小于优先级队列中任务最高优先级时,立刻进行任务切换(除非当前系统处于中断处理程序中或禁止任务切换的状态)。 调度器是操作系统的 核心 ,其主要功能就是 实现任务的切换 ,即从就绪列表里面 找到 优先级最高的任务,然后去 执行 该任务。 启动调度器 调度器的启动由 cpu_sched_start 函数来完成,它会被 tos_knl_start 函数调用,这个函数中主要做两件事,首先通过 readyqueue_highest_ready_task_get 函数获取当前系统中处于最高优先级的就绪任务,并且将它赋值给指向当前任务控制块的指针 k_curr_task

Y86-64指令集体系结构1

╄→尐↘猪︶ㄣ 提交于 2019-12-01 10:06:32
一. 乱糟糟的概念 指令集体系结构(ISA ):一个处理器支持的指令和指令的字节级编码(每条指令被编码成由一个字节序列或多个字节序列组成的二进制格式) 不同的处理器家族有不同的ISA(例如Intel IA32和x86-64、IBM/Freescale Power和ARM处理器家族)有不同的ISA 同一处理器家族的不同处理器有相同的ISA ISA为编译器编写者和处理器设计人员之间提供了一个概念抽象层:编译器编写者只需知道允许哪些指令,指令的字节级编码是什么;而处理器设计者只需建造出执行这些指令对应的二进制编码的处理器。 计算机科学的重要思想:用巧妙的方法在提高性能的同时又保持一个更简单、更抽象模型的功能。 数字硬件设计:基本构件块,如何连接以及操作,硬件控制语言(硬件系统控制部分的简单语言,用它来描述处理器设计) 二. 创建Y86-64指令集 较x86-64处理器支持的指令集而言,Y86-64指令集的 数据类型 、 指令 、 寻址方式 较少。 好处在于: 字节级编码简单,CPU译码逻辑简单 。 可以实现一些处理整数的程序。 在这一章中,我们会学习到如何用这个新定义出来的Y86-64指令集来设计处理器,并自己设计出来一个处理器, CMU设计了一些研究和测试处理器设计的工具,包括:Y86-64的汇编器,以及运行Y86-64程序的模拟器

C# 基础回顾: volatile 关键字

守給你的承諾、 提交于 2019-12-01 08:10:15
有些人可能从来没看到过这个关键字,这也难怪,因为这个关键字并不常用。那这个关键字到底有什么用呢? 我在网上搜索这个关键字的时候,发现很多朋友都有一个错误的认识 ------ 认为这个关键字可以防止并发争用(有点类似 lock 的赶脚)。 volatile 作用重定义 volatile 中文解释是“可变的”,MSDN 上关于此关键字的解释如下:“volatile 关键字指示一个字段可以由多个同时执行的线程修改。 声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。 这样可以确保该字段在任何时间呈现的都是最新的值。” 不知道你看了上述描述是不是恍然大悟,反正我是没看懂。在网上查阅了众多资料后,才算有所明白,把上面的话用新的方式重新解读后,就有了如下的结论。 1、阻止编译器优化:JIT 编译器会自动对代码进行优化,从而导致最终代码的指令顺序发生变化。使用 volatile 关键字就可以避免 JIT 编译器对此进行优化,如: public bool _goOn = true; //未优化 public void Execute() { while(_goOn) { //do something } } //优化后 public void ExecuteOptimized { if(_goOn) { while(true) { //do something } } }