数据寄存器

计算机CPU是怎么认识代码的?

夙愿已清 提交于 2020-02-11 14:41:45
先说一下半导体,啥叫半导体?就是介于导体和绝缘体中间的一种东西,比如二极管。 电流可以从A端流向C端,但反过来则不行。你可以把它理解成一种防止电流逆流的东西。 当C端10V,A端0V,二极管可以视为断开。 当C端0V,A端10V,二极管可以视为导线,结果就是A端的电流源源不断的流向C端,导致最后的结果就是A端=C端=10V 等等,不是说好的C端0V,A端10V么?咋就变成结果是A端=C端=10V了?你可以把这个理解成初始状态,当最后稳定下来之后就会变成A端=C端=10V。 文科的童鞋们对不住了,实在不懂问高中物理老师吧。反正你不能理解的话就记住这种情况下它相当于导线就行了。 利用半导体,我们可以制作一些有趣的电路,比如【与门】 此时A端B端只要有一个是0V,那Y端就会和0V地方直接导通,导致Y端也变成0V。只有AB两端都是10V,Y和AB之间才没有电流流动,Y端也才是10V。 我们把这个装置成为【与门】,把有电压的地方计为1,0电压的地方计为0。至于具体几V电压,那不重要。 也就是AB必须同时输入1,输出端Y才是1;AB有一个是0,输出端Y就是0。 其他还有【或门】【非门】和【异或门】,跟这个都差不多,或门就是输入有一个是1输出就是1,输入00则输入0。 非门也好理解,就是输入1输出0,输入0输出1。 异或门难理解一些,不过也就那么回事,输入01或者10则输出1

《编码》读书笔记:从无到有构建计算机系统

人走茶凉 提交于 2020-02-10 07:49:47
1 简单的电报系统: 按键、发声装置,电池和一些导线即可构成: 当电报机的键按下时,发生器的电磁铁将可动棒拖下发出“滴”的声音;当键放开时,棒弹回初始位置,发出“嗒”的声音。快速的“嘀嗒”为点,慢速的则为划。 2 继电器 电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。这样吸合、释放,从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。 长距离导线会有很大的电阻,会导致电流越来越小。下图中的继电器系统就是为了增大电流。 上述通信系统中的继电器的简单实现: 3 逻辑代数与电路 逻辑代数是分析和设计逻辑电路的数学基础。逻辑代数是由英国科学家乔治·布尔(George·Boole)创立的,故又称布尔代数。 4 逻辑门 (logic gates) 逻辑门和通常让水和人通过的门十分相似。逻辑门通过阻挡或允许电流通过在逻辑中执行简单的任务。 (1)与门

verilog HDL入门

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-09 17:17:28
verilog HDL入门 特点 类C语言 并行执行 硬件描述 设计流程 : 自顶向下 前提 :懂C语言和简单的数电知识 简单体验 语法很类似C语言,同时不难看出描述的是一个多路选择器 module muxtwo (out, a, b, s1); input a,b,s1; output out; reg out; always @(s1 or a or b) if(!s1) out = a; else out = b; endmodule 注意 没考虑时延问题 没有说明如果输入a或b是三态的(高阻时)输出应该是什么。 一 入门例子 例1. 多路选择器 描述一个多路选择器,控制信号sel,输入信号in0、in1, 输出信号out module mux(out, in0, in1, sel); parameter N=8; output[N:1] out; input[N:1] in0, in1; input sel; assign out=sel?in1:in0; endmodule 例2. 4位二进制加法计数器(带同步清0) 进位输出:当q为最大值(15)且cin=1时,cout=1;否则cout=0 module counter(q, cout, reset, cin, clk); parameter N=4; input reset, cin, clk; output

转:汇编常见错误

ⅰ亾dé卋堺 提交于 2020-02-09 05:21:47
1、test.asm(54): error A2000: Block nesting error 说明:此错误信息通常见于一个段定义起始段名和末尾段名不一致。 修改:检查段定义,使段名前后保持一致。 2、test.asm(5): error A2005: Symbol is multidefined: DATA 说明:此错误信息提示DATA符号重复定义了。 修改:将其中一个符号DATA重新设置。 3、test.asm(7): error A2009: Symbol not defined: B9H 说明:此错误信息为test.asm中第7行指令出错,查看该指令,源操作数为十六进制数B9H。按规定以字母开始的十六进制数,应在其前面加上数字0以便汇编程序区分常数和符号。另一种出错的可能原因是程序中使用的符号变量没有定义。 修改:以0B9H取代B9H;使用伪指令定义变量。 4、test.asm(11): error A2009: Symbol not defined: NO 说明:test.asm中第11行指令JLE no-count,符号中使用了中折线,中折线在汇编中是作为减号,因此,汇编提示标号NO没有定义。注意,汇编语言规定符号中可以使用下划线。 修改:将no-count改为no_count。 5、test.asm(28): error A2010: Syntax error 说明

计算机是这样工作的

本秂侑毒 提交于 2020-02-09 03:12:12
陈民禾,原创作品转载请注明出处《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 ,我的博客中有一部分是出自MOOC课程中视频,再加上一些我自己的理解。 一、首先在理解计算机是如何工作之前,我们先来理解一下现代计算机的模型。 现代计算机是存储程序计算机,依据冯诺依曼体系结构构造。从硬件的层面,也就是我们从计算机的主板。冯诺依曼体系结构我们可以大概抽象成一个cpu。还有一块可以抽象成内存,cpu和内存有一个连接,我们称之为总线,然后就是cpu内部,cpu里面有个很重要的寄存器,叫做ip,它总是指向内存的某一块区域,比如说它指向代码段,此时cpu就从IP指向的那个内存地址取过来一条指令执行,执行完之后Ip自加一,这样像贪吃蛇一样一步步向下面走,这就是从硬件方面解释的冯诺依曼体系。 二、计算机依靠机器语言进行工作,我们可以通过汇编语言来“指挥”计算机完成一些工作,下面就是一些汇编基础知识,总结如下: X86计算机的寄存器:32位的X86计算机的寄存器,它的低16位作为16位的寄存器,16位的寄存器,它还有8位的寄存器。8位的寄存器包含AH,BH,CH,DH,AL,BL,CL,DL。16位的寄存器包含AX,BX,CX,DX,BP,SI,DI,SP。所有开头为E的寄存器一般来讲是32位的。譬如EAX:累加器

OV5640(2):配置寄存器

谁都会走 提交于 2020-02-08 12:58:53
  上电之后要做的是通过 SCCB 协议对摄像头的寄存器进行配置,SCCB 协议在之前的博客中已经详细介绍过,其写和 IIC 完全相同,读和 IIC 相比多了个 STOP 信号。本篇博客不讲 SCCB,而是关注寄存器配置的要点。 一、图像窗口   由这段英文可知,OV5640使用寄存器 0x3800 ~ 0x3814 进行窗口设置。物理像素尺寸(Physical pixel size)是整个传感器的全部尺寸大小。ISP 输入尺寸是从像素阵列中读出来的全部尺寸。通常,ISP 的输入尺寸(input size)越大,图像的帧速率(frame rate)就越小。数据的输出尺寸(data out size)就是 OV5640 的图像输出尺寸了。图像尺寸和 ISP 的输入尺寸有关,也和当和 x_offset ,y_offset 这两个有关。 这些寄存器功能如下表所示:   0x3808 ~ 0x380B 用于设置输出的窗口大小,可根据需要进行修改。而其他寄存器大多时候使用预设值都没什么问题。 二、图像输出格式   OV5640支持多种图像数据格式,而 VGA 多使用 RGB565 格式,因此寄存器这边需要配置成 RGB565。 1、选定RGB   寄存器 0x501F 用于选择图像输出格式,我们需要 RGB 格式,因此低三位设置成 001,即 0x01。但是 RGB 有多种格式,如

用户态与内核态的切换

ぃ、小莉子 提交于 2020-02-07 13:54:23
内核态与用户态的理解: 2)特权级 熟悉Unix/Linux系统的人都知道,fork的工作实际上是以系统调用的方式完成相应功能的,具体的工作是由sys_fork负责实施。其实无论是不是Unix或者Linux,对于任何操作系统来说,创建一个新的进程都是属于核心功能,因为它要做很多底层细致地工作,消耗系统的物理资源,比如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录页表等等,这些显然不能随便让哪个程序就能去做,于是就自然引出特权级别的概念,显然,最关键性的权力必须由高特权级的程序来执行,这样才可以做到集中管理,减少有限资源的访问和使用冲突。 特权级显然是非常有效的管理和控制程序执行的手段,因此在硬件上对特权级做了很多支持,就Intel x86架构的CPU来说一共有0~3四个特权级,0级最高,3级最低,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查,相关的概念有CPL、DPL和RPL,这里不再过多阐述。硬件已经提供了一套特权级使用的相关机制,软件自然就是好好利用的问题,这属于操作系统要做的事情,对于Unix/Linux来说,只使用了0级特权级和3级特权级。也就是说在Unix/Linux系统中,一条工作在0级特权级的指令具有了CPU能提供的最高权力,而一条工作在3级特权级的指令具有CPU提供的最低或者说最基本权力。 3)用户态和内核态

Virtualbox源码分析16 APIC虚拟化1 APIC概念和初始化

♀尐吖头ヾ 提交于 2020-02-06 18:08:57
说明: APIC我其实也理解的不是特别明白,只是从网上找些资料和阅读源码理解,如果有错误,麻烦在下面评论里指出。 虚拟化有个重要的功能: APIC虚拟化,本章重点介绍这个功能 中断是什么 一般来说,中断主要是由一些硬件设备产生的,表示这些硬件有一些重要的事件需要通知处理器,比如某些从外部设备请求的数据准备好了,需要通知处理器对其进行读取等。当然这里所谓的“一般来说”是指也可以通过软件的方式来触发中断,比如调用 INT n 指令,当然这种方式产生的中断和通过意见产生的中断最终的处理方式会有很大的不同。 因此从种类来分,可以将中断分为通过硬件产生的外部中断(External interrupt)和通过软件产生的软件中断(Software interrupt)。不管是外部中断还是软件中断,每个中断都有一个中断号与之对应,对于外部中断来说,可使用的中断号范围从16到255(0到15)为系统预留的中断号,而对于软件中断来说,可使用的中断号为0到255。除此之外,16到255范围内的中断是可以通过EFLAGS中的 IF flag 进行disable的,如果EFLAGS中的 IF flag 被清零,则表示当前CPU不接受这个范围内的中断,如果其被置为1,则表示当前CPU可以正常处理这个范围内的中断。 中断是如何被发送给CPU的? 中断在进入CPU之前,首先会进入一个被称为Advanced

nasm帮助

自古美人都是妖i 提交于 2020-02-05 01:25:37
3.1 NASM源程序行的组成。 就像很多其他的汇编器,每一行NASM源代码包含(除非它是一个宏,一个预处理操作 符,或一个汇编器操作符,参况第4,5章)下面四个部分的全部或某几个部分: label: instruction operands ; comment 通常,这些域的大部分是可选的;label,instruction,comment存在或不存在都是允 许的。当然,operands域会因为instruction域的要求而必需存或必须不存在。 NASM使用反斜线()作为续行符;如果一个以一个反斜线结束,那第二行会被认为 是前面一行的一部分。 NASM对于一行中的空格符并没有严格的限制:labels可以在它们的前面有空格,或 其他任何东西。label后面的冒号同样也是可选的。(注意到,这意味着如果你想 要写一行’lodsb’,但却错误地写成了’lodab’,这仍将是有效的一行,但这一行不做 任何事情,只是定义了一个label。运行NASM时带上命令行选项’-w orphan-labels’ 会让NASM在你定义了一个不以冒号结尾的label时警告你。 labels中的有效的字符是字母,数字,’-’,’ KaTeX parse error: Expected 'EOF', got '#' at position 4: ','#̲','@','~','.'和'… ‘前缀

20145206 《信息安全系统设计基础》第6周学习总结

巧了我就是萌 提交于 2020-02-04 04:19:17
20145206 《信息安全系统设计基础》第6周学习总结 教材学习内容总结 1.流水线化的处理器: 将每条指令的执行分解成五步,每个步骤由一个独立的硬件部分或者阶段来处理。指令步经流水线的各个阶段,且每个时钟周期有一条新指令进入流水线。所以处理器可以同时执行五条指令的不同阶段。 2.程序员可见的状态: Y86程序中的每条指令都会读取或者修改处理器状态中的某些部分。这称为程序员可见状态。 3.Stat 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态;它会指示是正常运行还是出现了某种异常。 4.Y86 一个简单的、可以称之为IA32指令集的子集的指令集;只包括四字节整数操作,寻址方式比较少。指令编码长度从1——6字节不等。 关于指令结构,每条指令的第一个字节表明指令的类型;这个字节分为两个部分,每部分四位:高四位是代码部分(0——0xB),第四位是功能部分。这里补充一些缩写:立即数(i),寄存器(r)、存储器(m)。指令附加的寄存器指示符字节依次是数据源(如果是立即数,把这一位设置成0xf)、目的寄存器/基址寄存器。有些指令需要附加四字节的常数字,采用小端法(倒序)编码 5.stat代码可能取值反应了机器的不同状态—— AOK:正常操作(除此之外的任何状态都会使得处理器停止执行指令) HLT:处理器执行halt指令 ADR:遇到非法地址 INS:遇到非法指令 6