数据寄存器

计算机系统硬件有哪些重要的部件呢?

元气小坏坏 提交于 2020-01-09 23:55:58
在计算机系统中,中央 处理器 能直接访问的唯一的存储空间是内存储器 。任何程序和数据必须被装入内存储器之后,中央处理器才能对它们进行操作,因而一个作业必须把它的程序和数据存储在内存储器中才能运行,而且 操作系统 本身也要存储在内存储器中并运行。 如果是多道程序系统,就会有若干个程序和相关的数据要存储在内存储器中。操作系统要管理、保护这些程序和数据,使它们不至于受到破坏,不会互相影响和出现冲突。内存储器以及与存储器管理有关的硬件机构是支持操作系统运行的硬件环境的一个重要方面。 此外,IO系统和时钟部件也是计算机硬件的重要组成部分,为计算机用户交互及计算机时间系统提供基础 本节介绍与操作系统密切相关的计算机硬件部件的知识,具体见以下内容。 一、存储系统 1、存储器的类型 (1)类型 在微型计算机中使用的半导体存储器有若干种不同的类型,但基本上可划分为两类: 一种是读写型的存储器,另一种是只读型的存储器 。 所谓读写型的存储器,是指可以把数据存入其中任一地址单元,并且可在以后的任何时候把数据读出来,或者重新存入新的数据的一种存储器 。这种类型的存储器常被称为 随机访问存储器( Random Access Memory,RAM) 。RAM主要用作存储随机存取的程序的数据。 另一种是 只读型的存储器,只能从其中读取数据,但不能随意地用普通的方法向其中写入数据

初步了解CPU

自闭症网瘾萝莉.ら 提交于 2020-01-09 17:02:34
了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识。默认学过工科基础课。 一、总述 先从计算机的结构说起,在现代计算机中,CPU是核心,常常被比喻为人的大脑。现在的计算机都为“冯·诺依曼机”, “冯诺依曼机” 的一个显著的特点就是由运算器、存储器、控制器、输入设备和输出设备组成。 CPU是运算器和控制器合起来的统称 ,因为运算器和控制器在逻辑关系和电路结构上联系十分紧密,尤其在大规模集成电路制作工艺出现之后,所以这两个部件就集成在同一芯片上。 了解CPU怎么工作就转化为了解运算器和控制器的作用和功能。 二、CPU的运算 运算器由ALU(算术逻辑单元)和若干通用寄存器组成。 //寄存器需要数字逻辑知识 ALU即为一个芯片,有相应的输入,会给出相应的输出,由逻辑运算功能表可确定不同针脚会有的相应的运算输出。//这里可以类比于数字逻辑中的74LS138芯片,只不过74181给出的是相应输入的运算结果。 在这里我想到,很多同学并没有学习过数字逻辑这门课,简单介绍一下。我们高中物理就学过“与门”、“或门”和“非门”,也就是通过电路可以实现逻辑上的“与”、“或”和“非”运算。同时呢,有一个门叫做“与非门”,也就是A和B先做与运算,再做非运算取反

Linux下读写芯片的I2C寄存器

十年热恋 提交于 2020-01-09 14:29:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 要想在 Linux 下读写芯片的I2C寄存器,一般需要在Linux编写一份该芯片的I2C驱动,关于Linux下如何编写I2C驱动,前一篇文章 《手把手教你写Linux I2C设备驱动》 已经做了初步的介绍,并且留下了两个疑问尚未解决,第一个是如何对Linux提供的I2C操作函数进行进一步封装,实现对芯片寄存器的读写;另一个是如何在用户空间调用该I2C驱动代码。本文将讨论前一个问题。 首先,我们要了解Linux系统提供的I2C操作函数怎么使用,上篇文章已经提到过,对I2C设备的读写,Linux系统提供了多种接口,这些接口可以在内核的 i2c.h 中找到,这里我主要介绍下面这组读写接口: extern int i2c_master_send(struct i2c_client *,const char* ,int); extern int i2c_master_recv(struct i2c_client *,char* ,int); 第一个参数是 i2c_client 对象指针,第二个参数是要传输的数据buffer指针,第三个参数为buffer的大小。 接口函数已经有了,下面我们要解决的问题就是以何种形式/规则去使用这些接口才能正确地读写芯片的相关寄存器。 首先,我们需要查询芯片手册,找到芯片手册中

C中的volatile用法

女生的网名这么多〃 提交于 2020-01-09 00:29:50
.volatile的本质: 1> 编译器的优化 在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致。 当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。 当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致。 2>volatile应该解释为“直接存取原始内存地址”比较合适,“易变的”这种解释简直有点误导人。 volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。 而 优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作

C语言volatile关键字的用法

ぐ巨炮叔叔 提交于 2020-01-08 18:25:21
作用 编辑 简单地说就是防止编译器对代码进行优化。比如如下程序: 1 2 3 4 XBYTE[2]=0x55; XBYTE[2]=0x56; XBYTE[2]=0x57; XBYTE[2]=0x58; 对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入 volatile ,则编译器会逐一地进行编译并产生相应的机器代码(产生四条代码)。 例子 编辑 精确地说就是,编译器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在 寄存器 里的备份。下面是volatile变量的几个例子: 1)并行设备的硬件寄存器(如:状态寄存器) 2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3)多线程应用中被几个任务共享的变量 这是区分C程序员和 嵌入式系统 程序员的最基本的问题:嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所有这些都要求使用volatile变量。不懂得volatile内容将会带来灾难。 假设被面试者正确地回答了这个问题(嗯,怀疑是否会是这样),我将稍微深究一下,看一下这家伙是不是真正懂得volatile完全的重要性。 1)一个参数既可以是const还可以是volatile吗

详解C中volatile关键字

我们两清 提交于 2020-01-08 08:28:00
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序: short flag; void test() { do1(); while(flag==0); do2(); } 这段程序等待内存变量flag的值变为1(怀疑此处是0,有点疑问,)之后才运行do2()。变量flag的值由别的程序更改,这个程序可能是某个硬件中断服务程序。例如:如果某个按钮按下的话,就会对DSP产生中断,在按键中断程序中修改flag为1,这样上面的程序就能够得以继续运行。但是,编译器并不知道flag的值会被别的程序修改,因此在它进行优化的时候,可能会把flag的值先读入某个寄存器,然后等待那个寄存器变为1。如果不幸进行了这样的优化,那么while循环就变成了死循环,因为寄存器的内容不可能被中断服务程序修改。为了让程序每次都读取真正flag变量的值,就需要定义为如下形式: volatile short flag; 需要注意的是,没有volatile也可能能正常运行

汇编期末复习

别来无恙 提交于 2020-01-07 08:19:03
汇编 记忆部分 进制转换 逻辑地址转换物理地址 1234h:0058h = 12340h+0058h = 12398h 数据存放为 小端原则 低字节在前,比如 12h 34h 56h 78h 短跳,近跳 jmp short target 机器码:EBXX jmp near ptr target 机器码:E9XXXX 近跳的相对长度只能有1个字节长 近跳占3个字节,也就是近跳可以跳2个字节长 XX的计算公式是目标位置减去下一条指令位置,注意:小段规则。 如果是跳回前面的指令,就是 100h-XX ,比如跳回上一条指令,就是EBFC,这里FC=100h-04h,04h相当于下一条指令减去目标指令 远跳 jmp far ptr target 写法是:jmp 段地址:偏移地址 寄存器是CPU中可以存储数据的器件 寄存器 ax, bx, cx, dx。 cs, ds, ss, es。 cs:代码段寄存器 ds:数据段寄存器 ss:栈段寄存器 es:程序首个段前100h的地址,用来存放exe的相关信息。 ip, sp, 注意ip只有jmp类型指令可以修改 只有 bx,bp,si,di 可以放到[]里面,bx, bp为基寄存器。 其中[bx] == ds:[bx] [bp] == ss:[bp] 标志位 影响标志位的指令有很多,比如位运算,加减乘除等。需要记住的只有下面这些。

嵌入式系统开发期末复习

▼魔方 西西 提交于 2020-01-07 06:24:09
一、简答题 1.什么是嵌入式系统?有什么特点?应用在哪些领域? 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。 特点:专用性,嵌入性,计算机系统。 应用领域:工业制造、过程控制、通信、仪器、仪表、汽车、轮船、航空等领域。 2.嵌入式系统组成?嵌入式处理器如何分类?典型的嵌入式处理器有哪些? 组成:嵌入式处理器、外围设备、嵌入式操作系统、应用软件等。 分类:嵌入式微处理器,嵌入式微控制器,嵌入式DSP处理器,SoC片上系统。 典型嵌入式处理器:arm,x86处理器,PowerPC处理器 3.操作系统概念,什么是EOS?常用的EOS有哪些? 嵌入式操作系统(EOS)是一种支持嵌入式系统应用的操作系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器。 常见的EOS:Linux,uLinux,WinCE等。 4.嵌入式系统开发主要步骤和流程 5.哈佛结构&&普林斯顿结构 哈佛结构是一种将程序中指令和数据分开存储的存储器结构,是一种并行存储体系结构。 普林斯顿结构是一种将程序指令存储器和数据存储器合并在一起的存储器结构。 6.CISC&&RISC及特点对比 RISC(精简指令计算机)和CISC(复杂指令集计算机)是两种不同的CPU架构。 CISC

第 8 章 内存管理策略

二次信任 提交于 2020-01-06 17:49:11
  为了实现性能改进,应将多个进程保存在内存中,也就是说必须共享内存。 8.1 背景   内存是现代计算机运行的核心。内存由一个很大的字节数组来组成,每个字节都有各自的地址。 8.1.1 基础硬件   CPU可以直接访问的通用存储只有内存和处理器内置的寄存器。   每个进程都有一个独立的内存空间,可以保护进程不会互相影响。 基地址寄存器(base register):最小的合法的物理内存地址。 界限地址寄存器(limit register):指定了范围的大小。   合法范围为(base, base + limit)register   内存空间保护的实现是通过CPU硬件对在用户模式下产生的地址与寄存器的地址进行比较来完成的。   只有操作系统可以通过特殊的特权指令,才能加载基地址寄存器和界限地址寄存器。不允许用户程序修改它们。 8.1.2 地址绑定   源程序中的地址通常是用符号表示的,编译器通常将这些符号地址绑定到可重定位的地址。链接程序或加载程序再将这些可重定位的地址绑定到绝对地址。每次绑定都是从一个地址空间到另一个地址空间的映射。   通常,指令和数据绑定到存储器地址可在沿途任何一步中进行: 编译时 加载时 执行时 8.1.3 逻辑地址空间和物理地址空间   CPU生成的地址通常称为逻辑地址,而内存单元看到的地址(即加载到内存地址寄存器)通常称为物理地址。  

初学 Delphi 嵌入汇编[30] - 寄存器表

旧街凉风 提交于 2020-01-05 09:55:56
类型 名称 二进制码 寄存器说明 多功能寄存器 AL 0 累加寄存器低八位 AH 100 累加寄存器低八位 AX 0 16 位累加寄存器 EAX 0 32 位累加寄存器 BL 11 基址寄存器低八位 BH 111 基址寄存器低八位 BX 11 16 位基址寄存器 EBX 11 32 位基址寄存器 CL 1 计数寄存器低八位 CH 101 计数寄存器低八位 CX 1 16 位计数寄存器 ECX 1 32 位计数寄存器 DL 10 数据寄存器低八位 DH 110 数据寄存器低八位 DX 10 16 位数据寄存器 EDX 10 32 位数据寄存器 指针寄存器 SP 100 16 位堆栈指针寄存器 ESP 100 32 位堆栈指针寄存器 BP 101 16位基址指针寄存器 EBP 101 32 位基址指针寄存器 变址寄存器 DI 111 16 位目标变址寄存器 EDI 111 32位目标变址寄存器 SI 110 16 位源变址寄存器 ESI 110 32位源变址寄存器 专用寄存器 IP * 16 位指令指针寄存器 EIP * 32 位指令指针寄存器 FLAGS * 16 位标志寄存器 EFLAGS * 32位标志寄存器 段寄存器 CS 1 代码段寄存器 DS 11 数据段寄存器 ES 0 附加段寄存器 SS 10 堆栈段寄存器 FS 100 标志段寄存器 GS 101 全局段寄存器