状态寄存器

单片机期末复习

心不动则不痛 提交于 2019-12-05 18:17:55
一、硬件结构 1.1部分引脚说明 RST:复位引脚,两个机器周期的高电平后复位 ALE:锁存低八位地址 EA:高电平时,访问内部程序存储器(ROM) P0:双向IO口、分时复用-低八位地址,数据总线 P1:双向IO口 P2:双向IO口,访问外部存储器时,提供高八位地址总线 P3:双向IO口,有第二功能 1.2存储器 物理上分为:4 个空间 即片内ROM、 、 片外ROM(程序存储器) 片内RAM、 、 片外RAM(数据存储器) 逻辑上分为: : 3 个空间 , 程序内存(ROM) ( 片内 、 外 ) 统一编址 MOVC 数据存储器 ( 片内) ) MOV 数据存储器(片外) MOVX 1.2.1程序存储器(ROM 作用:存储用户程序和表格常数 特殊单元: 0000H:复位后从这里开始执行程序 中断单元: 外中断0 (INT0 ) 0003H 定时器0 (T0 ) 000BH 外中断1 (INT1 ) 0013H 定时器1 (T1 ) 001BH 串行口(UART ) 0023H 1.2.2内部数据存储器(RAM 通用工作寄存器组 00~1FH共32个,四组通用寄存器,即(四组R0~R7) 可以使用RS1(PSW.4)RS0(PSW.3)来切换寄存器区 RS1 RS0 寄存器区 内存地址 00 0区 00-07H 01 1区 08-0FH 10 2区 10-17H 11 3区 18

浅谈汇编

不羁的心 提交于 2019-12-05 16:46:38
创建编写汇编文件: 首先创建一个空文件 命名方式以.s结尾 第一行需要声明一个代码段 .text 第二行声明一个global + 方法名 .global test 指令: 汇编代码注释在行前加上 ; ret:返回 mov指令:目的寄存器,源操作数 举例:mov x0, #0x8 将8赋值给x0 add指令:将两个寄存器相加 sub指令:将两个寄存器相减 cmp指令:比较指令 操作数1 操作数2:cmp x0, x1 用x0减去x1,并将结果放到cpsr(程序状态寄存器)寄存器里 b 指令:跳转指令,相当于jump b 目标地址 bl指令:带返回的跳转指令,与b指令的区别是使用bl指令,ret指令才会生效 内存操作: 1、load,从内存中装载数据 ldr指令:从内存中读取数据 ldr x0, [x1] ldur指令: ,一般如果数据为负数,会用ldur ldp指令:从内存中读取数据,放到一对寄存器中 ldp w0, w1, [x2, #0x10] 2、store,往内存中存储数据 str指令:往内存中写入数据 str w0, [x1],将w0的数据写入到x1中 stur指令:参考ldur指令 stp指令:参考ldp指令 wzr指令:零寄存器 xzr指令:零寄存器 程序计数器: pc(Program Counter) 记录CPU当前指令是哪一条指令

CPU上下文切换详解

二次信任 提交于 2019-12-05 13:54:12
我们都知道CPU上下文切换,会增加系统负载。那什么是CPU上下文,为什么要切换? 什么是CPU上下文 我们都知道,Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。 而在每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要系统事先帮它设置好 CPU 寄存器和程序计数器(Program Counter,PC)。 CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必须的依赖环境,因此也被叫做 CPU 上下文。 而这些保存下来的上下文,会存储在系统内核中,并在任务重新调度执行时再次加载进来。这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。 根据任务的不同,CPU的上下文切换可以分为不同的场景,也就是进程上下文切换、线程上下文切换、中断上下文切换。 进程上下文切换 Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级的 Ring 0 和 Ring 3。 内核空间(Ring 0)具有最高权限,可以直接访问所有资源;

CPU子系统

谁都会走 提交于 2019-12-05 07:16:05
CPU的基本结构: CPU的主要部件: ​ 运算部件、缓存部件、寄存器、控制器、时序部件 CPU的工作原理: ​ 主要功能:处理指令、执行操作、控制时间、数据运算 ​ 执行指令的流程:读取指令、指令译码、指令执行、后续工作 部件的控制方式: ​ 同步控制方式:每步操作都向统一的外部时序信号对齐,每步操作之间无交互; ​ 异步控制方式:每步操作都不需向统一的外部时序信号对齐,每步操作之间通过交互应答来实现协同; 外部连接与I/O控制任务 指令系统: 设计CPU的一般过程: ​ 指令系统 --- 数据通路 --- 控制器 --- CPU定型 指令可能会涉及到的操作数类型: ​ 地址码数据:寄存器编号或者存储器地址,无符号整数. ​ 数值型数据:定点数、浮点数等,一般用补码表示; ​ 字符型数据:通常表示为ASCII码/汉字内码格式; ​ 逻辑型数据:常规二进制代码,不具有数值含义。 指令中的寻址方式: ​ 立即寻址: ​ 直接寻址: ​ 寄存器直接寻址: ​ 间接寻址(寄存器间接寻址、堆栈间接寻址): ​ 变址、基址寻址及其变化: ​ 基址寻址: ​ 基址 + 变址: ​ PC相对寻址: ​ 页面寻址(伪直接寻址): 设计传送指令时需要考虑: ​ 规定传送范围、指明传送单位、设置寻址方式 算数、逻辑运算指令: ​ 算数运算指令:设计时需要考虑操作数类型、符号、进制等

计算机组成原理复习(2)

放肆的年华 提交于 2019-12-05 02:54:22
中央处理器由运算器和控制器两大部分组成。 运算器接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理。 运算器主要由算术逻辑单元(ALU)、暂存寄存器、累加寄存器、程序状态字寄存器(PSW)、通用寄存器组、计数器(CT)、移位器组成。 程序状态字寄存器用于保存系统的运行状态。条件转移指令执行时,需对标志寄存器的内容进行测试,判断是否满足转移条件。 程序状态字寄存器用于存放程序状态字,而程序状态字的各位表征程序和机器运行状态,如:含有进位标志C、结果为零标志Z等。 通用寄存器用于存放操作数和各种地址信息等,其位数与机器字长相等,这样便于操作控制。 控制器的基本功能就是执行指令,每条指令的执行是由控制器发出的一组微操作实现的。 控制器的功能是取指令、分析指令和执行指令,并产生有关操作控制信号。 控制器由硬布线控制器和微程序控制器两种类型。 控制器由程序计数器(PC)、指令寄存器(IR)、指令译码器、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)、时序系统和微操作信号发生器等组成。 控制器的工作原理是根据指令操作码、指令的执行步骤(微命令序列)和条件信号来形成当前计算机个部件要用到的控制信号。计算机整机各硬件系统在这些控制信号的控制下协同运行,产生预期的执行结果。 程序计数器用于存放下一条指令在主存中的地址,具有自增功能。 程序计数器的内容为下一条指令在主存中的地址

汇编语言复习提纲

99封情书 提交于 2019-12-05 00:07:09
第一章:掌握各进制的转换,有符号数的补码表示 1.1 各进制的转换 10进制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16进制 1 2 3 4 5 6 7 8 9 A B C D E F 2进制 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 十进制数一般用D、二进制数用B、八进制数用O、十六进制数用H来表示。 例如:10101100B,115D ,0075H等。 例: (1)N=45D 十进制数转换为二进制数(用除以2取余) 45/2 = 22 (a0= 1) 22/2 = 11 (a1= 0) 11/2 = 5 (a2= 1) 5/2 = 2 (a3= 1) 2/2 = 1 (a4= 0) 1/2 = 0 (a5= 1) 所以:N=45D=101101B (2)N=117D 十进制转换为十六进制数(除以16取余法) 117/16 = 7 (a0= 5) 7/16 = 0 (a1= 7) 所以 :N=117D=75H (3)将二进制数1011100转换为十进制数(各位二进制数码乘以与其对应的权之和) 1011100B = 1×2^6 + 0×2^5 + 1×2^4 + 1×2^3 + 1×2^2 + 0×2^1 + 0×2^0 = 92D (4

I/O管理杂记

纵然是瞬间 提交于 2019-12-04 20:59:14
  这是一篇杂记,记录了操作系统层面与I/O管理的零散知识点,用于温习使用。由于I/O管理是一个很大的范畴,后续会不断按照自己的生产需求来补充用的到的知识点。计算机系统是人造系统,没有绝对的对错(相对于自然系统的绝对性),只有特定场景下的优劣。我们在理解一块知识时应当从它提出的背景以及要解决的问题出发,去理解机制而不是纠结于如何具体的实现。即使目的相同,不同的公司或开发者在不同场景下的实现也不尽相同,了解几个例子加深自己的理解、帮助自己构建起知识体系即可(个人观点)。 设备控制器   设备控制器是计算机中的一个实体,其主要职责是 控制一个或多个I/O设 备,以实现I/O设备和计算机之间的数据交换。它是 CPU与I/O设备之间的接口 ,它接收从CPU发来的命令,并去控制I/O设备工作, 以使处理机从繁杂的设备控制事务中解脱出来 。设备控制器是一个 可编址 的设备,当它仅控制一个设备时,它只有一个唯一的设备地址;若控制可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备。设备控制器的复杂性因不同设备而异,相差甚大,于是可把设备控制器分成两类:一类是用于控制 字符设备 的控制器,另一类是用于控制 块设备 的控制器。在微型机和小型机中的控制器,常做成印刷电路卡形式,因而也常称为接口卡,可将它插入计算机。有些控制器还可以处理两个、四个或八个同类设备。   控制器由

offsetof(s,m)解析

南笙酒味 提交于 2019-12-04 18:49:08
h ttps://www.cnblogs.com/jingzhishen/p/3696293.html sizeof()用法汇总 sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 注意:int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int); 对于静态数组,sizeof可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于4*10=40; sizeof(b)等于6; 注意:数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4} char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); //而b=20; char ss[] = "0123456789"; sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1 sizeof(

cortex-A7架构概要

风流意气都作罢 提交于 2019-12-04 18:05:24
1.运行模式 1.1:m3架构就只有特权和非特权两种模式,而A7有1种用户模式+8种特权模式 1.2:用户模式不能访问系统的所有资源,需借助异常来切换到其他模式才能访问被授以权限的资源 1.3:当发生中断或异常,处理器进入相应的处理模式,为了保护用户模式下的寄存器不被破坏,相应的模式提供了对应的寄存器组以供使用 2.寄存器组 2.1:浅色即是与user共用的寄存器,蓝色是各个模式所特有的 2.2:未备份寄存器R0-R7,9种模式所共用,切换模式,数据就会被破坏 2.3.:备份寄存器:R8-R14;R13也即sp,存放专用的栈地址;R14即连接寄存器,存放当前子程序的返回地址 2.4:程序计数器:R15,存放指向正在执行的指令的地址+8bytes(32位arm三级流水线,取指>译码>执行) 2.5:程序状态寄存器:CPSR,该寄存器包含了条件标志位、中断禁止位、当前处理器模式标志等一些状态位以及一些控制位。所有的处理器模式都共用一个 CPSR 必然会导致冲突,为此,除了 User 和 Sys 这两个模式以外,其他 7 个模式每个都配备了一个专用的物理状态寄存器,叫做 SPSR(备份程序状态寄存器),当特定的异常中断发生时,SPSR 寄存器用来保存当前程序状态寄存器(CPSR)的值,当异常退出以后可以用 SPSR 中保存的值来恢复 CPSR 3.GNU汇编语法 3.1:语句组成:

《操作系统真象还原》保护模式入门

有些话、适合烂在心里 提交于 2019-12-04 16:48:08
  以下是第四章的收获: 保护模式   什么是保护模式?直接定义保护模式似乎是件很抽象的事情,我们不妨先看看为什么要有保护模式,且保护模式能为我们做些什么?   保护模式是相对于实模式而言的,且是为了解决实模式的一些问题而提出来的。实模式是8086CPU下的寻址模式、指令用法、寄存器大小等。   那么实模式有什么问题呢?为什么需要保护模式呢? 为什么需要保护模式   ①实模式下,用户进程和系统进程属于同一特权级别,平起平坐,系统进程能调用什么,用户进程就能调用什么。   ②实模式下,进程访问的地址直接就是物理地址,想修改内存里面的内容十分容易,没有一点限制。   ③实模式下,可以随意修改段基址,访问所有内存。   以上三点均为安全问题,也是主要问题。我们可以从保护模式的“保护”中看出,保护模式下运行的程序会更加安全可靠,更具“安全感”,不会被另一个程序随意修改。   ④访问内存,需要不断变换段基址,来访问我们想要的内存地址,因为一个段的大小只有64KB。   ⑤内存大小只有1M,不够用。   ⑥每次只能运行一个程序,浪费CPU的资源。   ④到⑥点是使用上的问题,想想如果我们现在的电脑还用着使用着实模式下的CPU的的话,程序的效率会有多么低下,访问内存还得自缚手脚,运行一个程序还要等上一个程序运行完,显然是现代操作系统里难以想象的。   下面就来想如何解决这些问题,第①点的话