Chinaunix首页 | 论坛 | 博客
  • 博客访问: 384857
  • 博文数量: 200
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-07 12:12
文章分类

全部博文(200)

文章存档

2015年(2)

2013年(198)

发布时间:2013-01-07 14:16:53

我们知道ARM CPU中有一条被广泛使用的指令LDR,它主要是用来从存储器(确切地说是地址空间)中装载数据到通用寄存器。但不论是ARMASM还是GNU ARM AS,都提供了一条与之同名的伪指令LDR,而在实际中使用该伪指令的情况也较多,那他们有什么不同呢?下面我谈谈我的理解。    由于我使用GNU工具链,所以以下的内容都以GNU AS的ARM语法为准。    LDR伪指令的语法形式如下:       LDR <reg>, = <constant-expressio......【阅读全文】

阅读(745) | 评论(0) | 转发(0)

发布时间:2013-01-07 14:16:43

ARM中LDR伪指令与LDR加载指令 LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。 COUNT EQU 0x40003100 …… LDR R1,=COUNT MOV R0,#0 STR R0,[R1] COUNT是我们定义的一个变量,地址为0x40003100。这中定义方法在汇编语言中是很常见的,如果使用过单片机的话,应该都熟悉这种用法。 LDR R1,=COUNT是将COUNT这个变量的地址,也就是0x40003100放到R1中。 MOV R0,#0是将立即数0放到R0中。最后一句STR R0,[R1]是一个典型的存储指令,将R0中的值放到以R......【阅读全文】

阅读(652) | 评论(0) | 转发(0)

发布时间:2013-01-07 14:16:18

RO段、RW段和ZI段             要了解RO,RW和ZI需要首先了解以下知识:ARM程序的组成            此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。            一个ARM程序包含3部分:RO,RW和ZI。RO是程序中的指令和常量;R......【阅读全文】

阅读(634) | 评论(0) | 转发(0)

发布时间:2013-01-07 14:14:53

在ARM模式下,任何一条数据处理指令可以选择是否根据操作的结果来更新CPSR寄存器中的ALU状态标志位。在数据处理指令中使用S后缀来实现该功能。 不要在CMP,CMN,TST或者TEQ指令中使用S后缀。这些比较指令总是会更新标志位。 在Thumb模式下,所有数据处理指令都更新CPSR中的标志位。有一个例外就是:当一个或更多个高寄存器被用在MOV和ADD指令时,此时MOV和ADD不能更新状态标志. 几乎所有的ARM指令都可以根据CPSR中的ALU状态标志位来条件执行。参见表2-1条件执行后缀表。 在ARM模式下,你可以: · 根据数据操作的结果更新CPSR中的ALU状态标志; ·......【阅读全文】

阅读(693) | 评论(0) | 转发(0)

发布时间:2013-01-07 14:12:00

Linux kernel里面从来就不缺少简洁,优雅和高效的代码,只是我们缺少发现和品味的眼光。在Linux kernel里面,简洁并不表示代码使用神出鬼没的超然技巧,相反,它使用的不过是大家非常熟悉的基础数据结构,但是kernel开发者能从基础的数据结构中,提炼出优美的特性。kfifo就是这样的一类优美代码,它十分简洁,绝无多余的一行代码,却非常高效。关于kfifo信息如下:本文分析的原代码版本:2.6.24.4kfifo的定义文件:kernel/kfifo.ckfifo的头文件:  include/linux/kfifo.h1. kfifo概述kfifo是内核里面的一个First ......【阅读全文】

阅读(702) | 评论(0) | 转发(0)
给主人留下些什么吧!~~
留言热议
请登录后留言。

登录 注册