arm指令一般编码格式和一般语法格式 | 您所在的位置:网站首页 › 在指令的操作码编码方式中 › arm指令一般编码格式和一般语法格式 |
https://blog.csdn.net/carlyll/article/details/49209651
参考文章一: arm指令一般编码格式和一般语法格式 1、编码格式: 2、语法格式: 3、解释: 3.1、内的项是必须的,{}内的项是可选的 3.2、opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器;Rn:第1个操作数的寄存器;operand2:第2个操作数; 3.3、大多数时候可以根据CPSR的条件标志位觉得是否该执行指令。当条件满足时才执行,否则不执行。 3.4、arm指令的16个条件码,如下: 3.5、示例代码说明使用条件码以实现高效的逻辑操作: C代码: if(a> b) a++; else b++; 对应的汇编代码: CMP R0,R1 ;R0(a)与R1(b)比较 ADDHI R0,R0,#1 ;若R0>R1,则R0=R0+1 ADDLS R1,R1,#1 ;若R0≤1,则R1=R1+1 123456789 arm指令寻址方式1、寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。 2、数据处理指令的操作数寻址方式归纳如下: 指令格式: 2.1、立即数方式,必须遵循规则:每一个立即数由一个8位的常数循环右移偶数位得到。公式表达为:立即数 =8位常数循环右移2*4位二进制数 即immediate=const_8 ROR 2*bin_4。 比如,0x104为合法的立即数,而0x101 不是合法的立即数。是不允许在指令中使用的。 2.2、寄存器方式,操作数即为寄存器里的数值 2.3、寄存器移位方式,操作数是寄存器里的数值移位而得到,有如下移位操作:ASR,LSR,LSL,ROR,RRX等。 3、字及无符号字节的load/store指令寻址方式 3.1、load指令从内存读取数据放入寄存器,store指令用于将寄存器中的数据保存到内存。 3.2、以LDR指令为例说明: LDR指令的编码格式如下: LDR指令的语法格式如下: 注释:cond是指令执行的条件码,Rd是目的寄存器的编码,Rn和Address_mode一起构成了第二个操作数的内存地址。 3.3、寻址方式由基址寄存器Rn和地址偏移量address_mode两部分组成,其中地址偏移量有三种格式:立即数,寄存器,寄存器及一个移位常数。 3.4、寻址方式的地址计算方法有三种:偏移量方法,事先更新方法(即在指令的内存访问完成后进行基址寄存器内容更新的方式),事后更新方法(在指令的内存访问完成计算新地址的方式)。 3.5、根据寻址方式的地址计算方法和地址偏移量可知第二个操作数的内存地址共有如下9种格式: 以第一种格式为例说明第二个操作数的内存地址的计算方法: [, #+/- ]表示基址寄存器Rn值加或减偏移量,它的指令编码为: 使用偏移量方法计算内存地址,它的伪代码表示为: if U == 1 then address = Rn + offset_12 else /*U = 0*/ address = Rn - offset_12 12344、杂类Load/Store指令的寻址方式 4.1、指令的语法格式如下: 4.2、指令中内存单元的寻址方式有以下6种: 4.2、以第三种寻址方式说明内存地址的计算方法 使用该寻址方式[, #+/-]! 的指令编码格式如下: 使用事先更新方法计算内存地址,它的伪代码如下: offset_8 = (immedH |
CopyRight 2018-2019 实验室设备网 版权所有 |