ARM指令的一般编码格式如下
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARM指令的一般编码格式如下相关的知识,希望对你有一定的参考价值。
(0——11) shifter_operand 第二操作数
(12——15)RD 目标寄存器
(16——19)RN 第一个操作数的寄存器编码
(20) S 决定是否影响状态位
(21——24)opcode 指令操作符编码
(25——27)
(28——31)cond 指令执行的条件编码
问题是操作符编码为只有4位,能够区分的指令做多也就16条,但是汇编指令远不止这么点,那么处理器如何区分不同的指令呢???
你这个是ARM7 CPU的指令码格式,早期的ARM架构,是ARMV4T,而且只是其数据处理类指令的指令编码格式(4位编码,配合这其余位,如I位,Rn,Rm,第二操作数等编码位,可以编码出很多条数据处理指令。)。所以说,并不是25-27位没有使用。在其它类型的指令中就有使用25-27,如图2.
图1 ARM7 CPU数据处理指令的编码格式。
图2 ARM7 CPU的单字节传输(LAD,STR)指令编码格式
具体请自己查找官方手册,在arm官网可以找到对应资料。
ARM 体系结构参考手册ARMv7-A和ARMv7-R版:DDI0406C_C_arm_architecture_reference_manual.pdf 的A5章节,193页起都是讲这个的。
参考技术A [27:20]是指令代码部分,除指令编码外,还包括后缀编码和指令特征位.可以编码256中不同类型的指令码,实际上ARM没有这么多,它是精简指令集。本回答被提问者采纳(转)关于汇编ARM指令DCD
数据定义( Data Definition )伪指令
数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。
— DCD ( DCDU ) 用于分配一片连续的字存储单元并用指定的数据初始化。
3、 DCD(或DCDU)
语法格式:
标号 DCD (或 DCDU ) 表达式
DCD (或 DCDU )伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。 DCD 也可用 “ & ” 代替。
用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严格字对齐。
使用示例:
DataTest DCD 4 , 5 , 6 ;分配一片连续的字存储单元并初始化。
举例1:
SwiFunction
DCD TASK_SW ;0
DCD ENTER_CRITICAL ;1
DCD EXIT_CRITICAL ;2
DCD ISRBegin ;3
DCD ChangeToSYSMode ;4
DCD ChangeToUSRMode ;5
DCD __OSStartHighRdy ;6
DCD TaskIsARM ;7
DCD TaskIsTHUMB ;8
DCD OSISRNeedSwap ;9
DCD GetOSFunctionAddr ;10
DCD GetUsrFunctionAddr ;11
TASK_SW
MRS R3, SPSR ;保存任务的CPSR
MOV R2, LR ;保存任务的PC
举例2:
语句如下:
FiqStackSpace SPACE FIQ_Stack_Legth
FiqStack DCD FiqStackSpace + FIQ_Stack_Legth
最后一条语句,DCD的后面跟FiqStackSpace + FIQ_Stack_Legth,
DCD后面的FiqStackSpace,表示一串空字符,这好理解
但是再上FIQ_Stack_Legth,就不明白了,WHY?
FiqStackSpace是标号,相当与地址,实际上就是在FiqStackSpace SPACE FIQ_Stack_Legth 这个语句给分配的空间的首地址,FiqStackSpace+ FIQ_Stack_Legth 是这个地址空间的结束地址,将FiqStack指向这个地址,当做栈的顶部,该栈向下生长,长度FIQ_Stack_Legth
以上是关于ARM指令的一般编码格式如下的主要内容,如果未能解决你的问题,请参考以下文章