ARM指令的基本格式如下: |
|
其中<>号内的项是必须的,{}号内的项是可选的。各项的说明如下: |
|
ARM指令集――第2个操作数 ARM指令的基本格式如下:
|
|
灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式: (1)#immed_8r――常数表达式; (2)Rm――寄存器方式; (3)Rm,shift――寄存器移位方式; 关于“#immed_8r――常数表达式” 该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。 |
|
关于“Rm――寄存器方式”: 在寄存器方式下,操作数即为寄存器的数值。 例如: SUB R1,R1,R2 MOV PC,R0 关于“Rm,shift――寄存器移位方式”:将寄存器的移位结果作为操作数,但Rm值保持不变,移位方法如下:
|
|
|
关于“Rm,shift――寄存器移位方式”: 例如: ADD R1,R1,R1,LSL #3 ;R1=R1+R1*8=9R1 SUB R1,R1,R2,LSR R3 ;R1=R1-(R2/2R3) 关于“ARM指令集――条件码”;ARM指令的基本格式如下:
|
|
使用条件码“cond”可以实现高效的逻辑操作,提高代码效率。 所有的ARM指令都可以条件执行,而Thumb指令只有B(跳转)指令具有条件执行 功能。如果指令不标明条件代码,将默认为无条件(AL)执行。
|
|
关于“ARM指令集――条件码”: |
|
关于“ARM指令集――存储器访问指令”:ARM处理器是典型的RISC处理器,对存储器的访问只能使用加载和存储指令实现。ARM处理器是冯・诺依曼存储结构,程序空间、RAM空间及I/O映射空间统一编址,除对RAM操作以外,对外围IO、程序数据的访问均要通过加载/存储指令进行。 存储器访问指令分为“单寄存器操作指令”和“多寄存器操作指令”。
|
|
LDR/STR指令用于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作等。若使用LDR指令加载数据到PC寄存器,则实现程序跳转功能,这样也就实现了程序散转。 所有单寄存器加载/存储指令可分为“字和无符号字节加载存储指令”和“半字和有符号字节加载存储指令。 下面讲讲,LDR和STR――字和无符号字节加载/存储指令:LDR指令用于从内存中读取单一字或字节数据存入寄存器中,STR指令用于将寄存器中的单一字或字节数据保存到内存。指令格式如下: LDR{cond}{T} Rd,<地址> ;将指定地址上的字数据读入Rd STR{cond}{T} Rd,<地址> ;将Rd中的字数据存入指定地址 LDR{cond}B{T} Rd,<地址> ;将指定地址上的字节数据读入Rd STR{cond}B{T} Rd,<地址> ;将Rd中的字节数据存入指定地址 其中,T为可选后缀。若指令有T,那么即使处理器是在特权模式下,存储系统也将访问看成 是在用户模式下进行的。T在用户模式下无效,不能与前索引偏移一起使用T。
|
-
标签: