文章分类 - ARM
汇编知识、架构知识
摘要:在开始之前首先对字(Word)、半字(Half-Word)、字节(Byte)的概念作一个说明: (在计算机中数据都是以二进制的形式存储的,以下的位是指二进制数中的"位"。例如10转化为二进制是1010是四位的) 首先我们学习的ARM处理器是32位的,等于4个字节。 计算机中的位数指的是CPU一次能处理的最大位数。32位计算机的CPU一次最多能处理32位数据,例如它的寄存器就是32位的,当然32位计算机通常也可以处理16位和8位数据。字(Word):在32位ARM体系结构中把CPU的位数称为字长,字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位。(与c
阅读全文
摘要:ARM用ADS编译的话,用的是FD 满减 栈方式。顺便说下满减 FD方式,入栈是先移动SP,再存数据;出栈是先存数据,再移SP。我看的资料具体也就说到这里了。看下面的例子:STMFD SP!, {R0-R3, R12, LR}。。。。。。LDMFD SP!, {R0-R3, R12, PC}^STMFD之后,SP就指向LR了,LDMFD 就把LR 出栈给了R0了,若这么理解的话肯定不对了。肯定进栈和出栈的顺序是不一样的,虽然表达方式上可能为了直观都是从 低到高的寄存器。以前困惑的就是STMFD 命令 对于操作数 是按照什么顺序压栈的比如:STMFD sp!{R0-R5,LR} 进栈顺序是:高地
阅读全文
摘要:ARM中LDR伪指令与LDR加载指令ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。COUNT EQU 0x40003100……LDR R1,=COUNTMOV R0,#0STR R0,[R1]COUNT是我们定义的一个变量,地址为0x40003100。这中定义方法在汇编语言中是很常见的,如果使用过单片机的话,应该都熟悉这种用法。LDR R1,=COUNT是将COUNT这个变量的地址,也就是0x40003100放到R1中。MOV R0,#0是将立即数0放到R0中。最后一句STR R0,[R1]是一
阅读全文
摘要:伪指令:ARM 伪指令不是ARM 指令集中的指令,只是为了方便编译器编程而定义的指令,使用时可以像其他ARM 指令一样使用,但在编译时这些指令将被等效的ARM指令代替。ARM 伪指令有四条:ADR,ADRL,LDR,NOP 。ADR 用于小范围的地址读取伪指令,如:ADR R2, LOOP ;将LOOP 的地址放入R2ADRL 用于中等范围的地址读取,如:ADR R3, LOOP ;将LOOP 的地址放入R3LDR 用于大范围的地址读取伪指令,加载32 位的立即数或一个地址值到指定寄存器。常用于加载外围功能部件的寄存器地址(32 位立即数),以实现各种控制操作。LDR R0, =0X12345
阅读全文
摘要:接下来就要讲的就是NEON这个东西了.一开始见到它还觉得它是一个可有可无的技术,后来看了很多的文章以后发现这个才是优化的突破口.1.什么是SIMD ####其实这个术语我很久以前就已经听过了,可以一直只有表面的理解,不就是单指令多数据流吗.难道这个还能比MIMD还要牛逼吗,一直觉得这是一种可有可无的技术,就算就在今天我还是觉得这样的技术就是过渡性的技术.可是今天看了一篇文章以后才发现它都有用之处. 通常我们进行多媒体处理的时候,很多的数据都是16位或者8位的,如果这些程序运行在32位的机器上,那么计算机有一部分的计算单元是没有工作的.所以这是一种浪费.为了更好的使用那些被浪费的资源.SIMD就
阅读全文
posted @ 2013-10-16 16:14
general001