状态寄存器

ARM 汇编访问 CPSR / SPSR 寄存器 【 msr ,mrs 】

匿名 (未验证) 提交于 2019-12-02 23:43:01
状态寄存器访问过程:读 - 改 - 写 读 CPSR / SPSR 指令【 mrs 】 格式:<opcode><cond> Rn, cpsr/spsr         写 CPSR / SPSR 指令【 msr 】 格式:<opcode><cond> cpsr/spsr , Rn   mrs r0 , cpsr @ 读取 cpsr 中状态放在 r0 中 mov r1 , #0x1F mvn r1 , r1 @ 按位取反在放到 r1 中 and r0 , r0 , r1 @ r1 和 r0 按位与 结果放到 r0 中 清零 r0 中的低 5 λ mov r1 , #1 lsl r1 , r1 , #4 orr r0 , r0 , r1 @ 置 1 第 5 λ 主要改变用户状态 msr cpsr , r0 @ 把 r0 中修改后的数据写入 CPSR 中 , 把 SVC 模式改为 user ģʽ 转载请标明出处: ARM 汇编访问 CPSR / SPSR 寄存器 【 msr ,mrs 】 文章来源: ARM 汇编访问 CPSR / SPSR 寄存器 【 msr ,mrs 】

《深入理解计算机系统》阅读笔记--程序的机器级表示(上)

匿名 (未验证) 提交于 2019-12-02 21:59:42
一、为什么要学习和了解汇编 编译器基于编程语言的规则,目标机器的指令集和操作系统遵循的惯例,经过一系列的阶段生成机器代码。GCC c语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序中的每一条指令。然后GCC调用汇编和链接器,根据汇编代码生成可执行的机器代码。这一章节其实就是来更加深入的认识和理解汇编代码 现在我们更多接触的都是一些高级语言,如JAVA,GO,Python,其实用这些语言的时候,更大程度上,已经屏蔽了一些程序的细节,即机器级的实现。但是如果是用汇编语言,程序员就必须制定程序用来执行计算的低级指令。 那么为什么我们还要学习和了解汇编呢? 虽然现在编译器已经替我们做了生成汇编代码的大部分工作,但是作为程序员,如果我们能够阅读和理解汇编代码将是一个非常重要的技能,好处是: 能够理解编译器的优化能力分析代码中隐含的低效率 如我们通过线程包写并发程序时,了解不同线程是如何共享程序数据或保持数据私有的,以及准确知道如何在哪里访问共享数据,这些在机器代码都是可见的 二、历史 Inter的处理器系统俗称x86,第一代处理器是8086,一个单芯片,16位微处理器,主要为 IBM PC 和 DOS 设计,有 1MB 的地址空间。八年后的 1985,第一个 32 位 Intel 处理器(IA32) 386 诞生。2004 年,奔腾(Pentium) 4E

Linux 下访问PHY芯片寄存器

匿名 (未验证) 提交于 2019-12-02 21:56:30
下面代码描述了在用户层访问smi/mdio总线, 读写phy芯片寄存器的通用代码。Linux内核2.6以上通用。 将下面代码编译后,将可执行文件a.out 重命名为mdio eth0 为mac层控制器的名称, 一般为eth0 或mgmt0。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <linux/mii.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <net/if.h> #include <linux/sockios.h> #include <linux/types.h> #include <netinet/in.h> #define help() \ int sockfd; int main(int argc, char *argv[]){ lab: } 很多人在read操作里面判断phy的link状态, if(mii->val_out& 0x0004){ printf("linkup\n"); }else{ printf("linkdown\n"); } 其实这个做法是比较通用可行的。 解释一下,关于mii->val_out& 0x0004 寄存器3和4为

【Java NIO】系统基础

匿名 (未验证) 提交于 2019-12-02 21:53:52
系统硬件 CPU - 中央处理单元 ALU - 算术逻辑单元 PC - 程序计数器 USB - 通用串行总线 总线 总线,贯穿整个系统的一组电子管道,在各个部件间传递字节流信息。 传送定长的字节块,称为字;字中的字节数,称为字长。 处理器 CPU,中央处理单元,是解释/执行存储在主存中指令的引擎。 PC,程序计数器,在任何时间点上,都指向主存中某条机器语言指令(内含其地址)。 寄存器文件,存储设备,CPU的核心。它是一个小的存储设备,由一些字长大小的寄存器组成,这些寄存器每个都有唯一的名字。 ALU计算新的数据和地址值。 从系统通电开始,直到系统断电,处理器一直重复指向相同的基本任务:从PC指向的存储器处读取指令,解析指令,执行指令指示的简单操作,然后更新PC指向下一条指令。 加载 - 从主存中拷贝一个字节或一个字到寄存器,覆盖寄存器原来的内容。 存储 - 从寄存器拷贝一个字节或一个字到主存的某个位置,覆盖这个位置上的原来的内容。 与(And)、或(Or)、非(Not) 组合电路本质上不存储任何信息。它们只是简单地响应输入信号,输出等于输入的某个函数转换。 大多数时候,寄存器都保持在稳定状态(x), 产生的输出等于它的当前状态。信号沿着寄存器前面的组合逻辑传播,产生了一个新的寄存器输入(y), 但只要时钟是低电位,寄存器的输出就保持不变。当时钟变成高电位的时候

嵌入式开发笔记(三)ARM基础知识

纵饮孤独 提交于 2019-12-02 21:00:53
1. ARM的编程模式 1.1当 ARM 采用的是32位架构. ARM 约定: Byte : 8 bits Halfword (半字) :16 bits (2 byte) Word : 32 bits (4 byte) 联想: 数据位宽4 byte,地址映射数据线32条 注意:Word在VC下是16bit,原因早期微软16位时就定义为16bit,后来32位时候未改换成DWord. 1.2 大部分ARM core 提供: (2) ARM 指令集(32-bit) (1) Thumb 指令集(16-bit ) (3) Thumb2指令集(16 & 32bit) 小计:早期时候Thumb指令集,每条指令16bit。缺点:有时需要两个指令完成,效率,时间。之后ARM指令集每条指令32bit,缺点:浪费资源。随后Thumb2(armV7)[16&32]。 1.3 Jazelle cores 支持 Java bytecode (支持JAVA加速) 2. ARM处理器工作模式 2.1 ARM 有7个基本工作模式: (1) User : 非特权模式,大部分任务执行在这种模式 (2) FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式 (3) IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式 (4) Supervisor :当复位或软中断指令执行时将会进入这种模式

STM32第一周复习

Deadly 提交于 2019-12-02 14:45:58
资料可以去意法半导体官网 最底层(了解)CM3权威指南/CM4权威指南 芯片参考手册(了解)STM32F10x中文参考手册 官方其他资源教程(了解)固件库包(含参考源码),官方培训PPT 熟练掌握C语言 熟练掌握一种开发环境 库函数和寄存器对比学习 入门一款单片机的学习目标 基本外设 GPIO输入输出, 外部中断 定时器 串口 基本外设接口 SPI IIC WDG FSMC ADC/DAC SDIO 高级功能 UCOS FATFS EMWIN 外什么选择STM32 什么是STM32 Cortex-M3属于ARMv7架构 A系列 面对尖端的基于虚拟内存系统的操作系统和用户 R系列 针对于实时系统 M系列 对微控制器 性价比高,更稳定,所以可以替换ARM7 芯片有哪些资源 ZET6 144个引脚 112个IO 512K 64K RCT6 64个引脚 51个IO 256K 48K 强大的时钟系统 上电复位,掉电复位 低功耗 AD 3个12位 内置参考电压 内置温度 DA 2个12位 DMA 12个DMA通道 定时器 多达11个定时器 通信接口 2个I2C 5个串口 3个SPI 1个CAN2.0 1个USB FS 1个SDIO 最小系统 供电 复位 时钟 boot启动模式选择 下载电路 后备电池 程序下载 串口下载 STM32的ISP下载只能通过串口1,也就是对应的PA9,PA10

你说的曾经没有我的故事 提交于 2019-12-02 08:09:12
  不是科班毕业,直接学了Java入行,最近打算学C语言,了解一些入门级的语言,就看了一点入门的东西,这一篇汇编语言也是拾人牙慧,这里贴上原文地址,尊重原创。    《汇编语言》- 来自底层的较量 - 温故而知新 https://www.cnblogs.com/yougewe/p/8011911.html 。   百科的汇编语言定义:汇编语言(assembly language)是一种用于 电子计算机 、 微处理器 、 微控制器 或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用 助记符 代替 机器指令 的 操作码 ,用地址符号或标号代替指令或 操作数 的地址。在不同的设备中,汇编语言对应着不同的机器语言 指令集 ,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。 一、汇编语言能干什么?仅次于机器语言?   计算机工作是由一系列的机器指令进行驱动工作的,这些指令是一系列二进制数字 0101000110,对应计算机的高低电平,而这些机器指令的集合就是机器语言,这已经是最底层,和硬件一对一了已经。   很明显,这样的机器语言是反人类的。只有天才和疯子才有能力去把控他。   于是汇编语言产生了。汇编语言就是将一些难于记忆的0100100转换为便于记忆的格式,让人能够稍微理解点。如 将寄存器bx的内容送到ax中

操作系统第五章

北战南征 提交于 2019-12-02 06:51:05
输入输出设备分为块设备(硬盘)和字符设备(鼠标,键盘) 硬盘的输入输出以磁盘块(扇区)为单位 鼠标键盘以字符为单位,通过中断机制输入 ----------------------------------------------------------------------------------------------------------------------------------------------- IO设备由 机械部件和电子部件 两部分组成,电子部件就是电路板,也就是IO控制器。IO控制器作为CPU控制IO设备机械部件的中介。它含有控制寄存器(存放CPU命令的参数),状态寄存器(设备是否能进行读写操作),数据寄存器(数据中转站)。由于IO控制器中含有多个寄存器,当CPU发出命令后,IO控制器要进行地址转换(由IO控制器的IO逻辑部分完成),找到对应的寄存器。 IO控制器由三部分组成,分别为 CPU与控制器的接口,IO逻辑,以及控制器与设备的接口 CPU与控制器的接口: 数据寄存器,状态寄存器,控制寄存器位于这里 IO逻辑: CPU 通过控制线告诉IO逻辑指令类型,通过地址线告诉IO逻辑要操作的设备地址,IO逻辑通过访问控制寄存器和状态寄存器得出指令。如果是输出指令的话,IO逻辑将数据寄存器中的数据 转移到 控制器与设备的接口。 控制器与设备的接口:输出命令的话

计算机处理器基础原理笔记

被刻印的时光 ゝ 提交于 2019-12-02 06:43:50
1. 计算机每执行一条指令的过程,可以分解成这样几个步骤。 (1) Fetch (取得指令) ,也就是从PC寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把PC寄存器自增,在未来执行下一条指令。 (2) Decode (指令译码) ,也就是根据指令寄存器里面的指令,解析成要进行什么样的操作,是MIPS指令集的R、I、J中哪一种指令,具体要操作哪些寄存器、数据或者内存地址。 (3) Execute (执行指令) ,也就是实际运行对应的 R、I、J 这些特定的指令,进行算术逻辑操作、数据传输或者直接的地址跳转。 (4)重复进行(1)~(3)的步骤。 这其实就是一个永不停歇的“Fetch - Decode - Execute”的循环,这个循环称之为 指令周期 (Instruction Cycle)。 在取指令的阶段,指令是放在 存储器 里的,实际上, 通过 PC 寄存器和指令寄存器取出指令的过程,是由控制器(Control Unit )操作的。指令的解码过程,也由控制器进行 。到了执行指令阶段,无论是进行算术操作、逻辑操作的R型指令,还是进行数据传输、条件分支的I型指令,都是由 算术逻辑单元 (ALU)操作的,也就是由 运算器 处理的。不过,如果是一个简单的无条件地址跳转,那么我们可以直接在 控制器 里面完成,不需要用到运算器,如下所示:

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) 又称 数据/ 指令 缓冲寄存器 数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之