ARM汇编
ARM汇编
诺谦
热爱生活 活在当下
展开
-
arm裸板驱动总结(makefile+lds链接脚本+裸板调试)
在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示:然而此时的SDRAM、nandflash的控制时序等都还没初始化,所以我们就只能使用前0~4095地址,在前4k地址里来初始化SDRAM,nandflash,初始化完成后,才能将nandflash的4096至后面的地址内容存放到SDRAM里去.而裸板驱动的步骤如下所示:1.写make...原创 2017-12-01 11:35:00 · 569 阅读 · 0 评论 -
LDMIA、LDMIB、LDMDB、LDMDA、STMIA、LDMFD、LDMFA、LDMED、LDMEA指令详解
简介:ARM指令中多数据传输共有两种:LDM:(load much)多数据加载,将地址上的值加载到寄存器上STM:(store much)多数据存储,将寄存器的值存到地址上主要用途:现场保护、数据复制、参数传送等,共有8种模式(前面4种用于数据块的传输,后面4种是堆栈操作)如下:(1)IA:(Increase After) 每次传送后地址加4,其中的寄存器从左到右执行,例如:STMI...原创 2017-08-15 09:12:00 · 483 阅读 · 0 评论 -
汇编指令-adr与ldr伪汇编区别(8)
adr :相对寻址,与当前位置有关ldr :绝对寻址,与当前位置无关在初始化SDRAM时就会用到adr,代码如下: /* 初始化SDRAM */ ldr r0,=BWSCON //r0=SDRAM寄存器基地址,获取绝对地址 adr r1,SDRAM_CONFIG //使用adr相...原创 2017-08-09 16:22:00 · 166 阅读 · 0 评论 -
汇编指令-MOV与ldr区别(7)
MOV1.可以寄存器与寄存器之间传递数据2.可以常数传递到寄存器中(常数不能超过32位)LDR1.可以地址与寄存器之间的数据传递2.也可以常数传递到寄存器中实例:1.r1与r2之间传递就只能用MOV: MOV r1,r22.常数传递到寄存器可以使用MOV和ldr: MOV r0,#0 ldr r0,=03.寄存器与地址0X00000000之间传递数据只能用ldr:...原创 2017-08-09 09:20:00 · 162 阅读 · 0 评论 -
协处理器CP15介绍—MCR/MRC指令(6)
概述:在基于ARM的嵌入式应用系统中,存储系统的操作通常是由协处理器CP15完成的。CP15包含16个32位的寄存器,其编号为0~15。而访问CP15寄存器的指令主要是MCR和MRC这两个指令。例如协处理器15(CP15),ARM处理器使用协处理器15的寄存器来控制cache、TCM和存储器管理。而访问CP15寄存器的指令主要是MCR和MRC这两个指令:MRC:协处理器寄存器到ARM处...原创 2017-07-19 08:16:00 · 202 阅读 · 0 评论 -
R0~R16寄存器作用
R0-R3 用作传入函数参数,传出函数返回值。在子程序调用之间,可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。R4-R10被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。R11-fp(frame pointer)寄存器即可以用来记录回...原创 2017-07-18 11:52:00 · 189 阅读 · 0 评论 -
汇编指令-CMP、TEQ(5)
cmp:(compare)指令进行比较两个操作数的大小格式:cmp oprd1,oprd2比较oprd1和oprd2操作数,然后通过助记符来实现想要的判断。teq: (test equal)测试相等,该指令通常用于比较操作数1和操作数2是否相等。格式:teq oprd1,oprd2TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新C...原创 2017-07-15 17:55:00 · 287 阅读 · 0 评论 -
汇编指令-str存储指令(4)
str-(Store Register)存储指令格式:str{条件} 源寄存器,<存储器地址>将源寄存器中数据存到存储器地址中。实例1:str r1,[r2] ; 将r1中的值存到r2所指定的地址中str r1,[r2,#4] ;将r1中的值存到r2+4所指定的地址中str r1,[r2],#4 ;将r1中的值存到r2所指定的地址中, 同...原创 2017-07-14 17:53:00 · 501 阅读 · 0 评论 -
汇编指令-bic(位清除)、orr(位或)(3)
1. bic (Bit Clear)位清除指令bic指令的格式为:bic{条件}{S} Rd,Rn,operandbic指令将Rn 的值与操作数operand2 的反码按位逻辑”与”,结果存放到目的寄存器Rd 中。指令示例:bic R0,R0,#0x1F ; //将R0最低5位清零,其余位不变。2.orr 位或指令orr指令的格式为:orr{条件}{S} Rd,Rn...原创 2017-07-14 10:14:00 · 2040 阅读 · 0 评论 -
汇编指令-位置无关码(BL)与绝对位置码(LDR)(2)
位置无关码即该段代码无论放在内存的哪个地址,都能正确运行。究其原因,是因为代码里没有使用绝对地址,都是相对地址。位置相关码即它的地址与代码处于的位置相关,是绝对地址BL :带链接分支跳转指令,也是位置无关码(相对位置),用于调用函数用的。B:分支跳转指令,指目标不能太远,一般用于同一个文件下的目标地址跳转。LDR:通常都是作加载指令的,但是它也可以作伪指令,通常有两种不同的表示:...原创 2017-07-06 11:49:00 · 209 阅读 · 0 评论 -
汇编指令-MRS(读)和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用(1)
1.MSR和MRS指令介绍MRS 指令: 对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。MSR指令: 对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/...原创 2017-07-01 11:05:00 · 484 阅读 · 0 评论