请问:
1、Cortex-R4F是ARMv7R架构,而手册中提到ARMv7支持EncodingT1,T2,T3,A1,A2,且ARMv7R支持ARM和Thumb-2指令集。
所以,Cortex-R4F支持的指令格式应该是EncodingT2对吗,那支持的ARM指令是A1还是A2呢?我没找到相应说明。
2、ARM指令格式A1和A2都无法将32-bit立即数通过MOV指令装入寄存器R2。我应该用什么指令或什么方法实现呢?
谢谢
Hi!
>1、Cortex-R4F是ARMv7R架构,而手册中提到ARMv7支持EncodingT1,T2,T3,A1,A2,且ARMv7R支持ARM和Thumb-2指令集。
>所以,Cortex-R4F支持的指令格式应该是EncodingT2对吗,那支持的ARM指令是A1还是A2呢?我没找到相应说明。
根据ARM ARM 0406C.b,A8.1.3节:
==================================
This is a list of one or more instruction encodings. Each instruction encoding is labelled as:
• T1, T2, T3 … for the first, second, third and any additional Thumb encodings
• A1, A2, A3 … for the first, second, third and any additional ARM encodings
所以A或T后面的数字代表的是第几种编码形式。
>2、ARM指令格式A1和A2都无法将32-bit立即数通过MOV指令装入寄存器R2。我应该用什么指令或什么方法实现呢?
可以用以下伪指令实现:
LDR r2, =0x12345678
编译器会自动生成一条PC relative LDR指令,从literal pool里取数。即:
LDR r2, [pc, xxx] // 偏移量由编译器自动计算
...
DCD 0x12345678 // Literal pool
BR
Xingguang
手册中提到Cortex-R4F支持Thumb-2和ARM指令集,那它支持哪种指令编码格式呢?
我是想确认一下是不是如Cortex-R4F,只支持特定的编码类型?还是说使用哪种编码类型是可以我自己选择的??如何选择??
我也在手册中看到A或T后边代表的是编码形式编号。所以我想Cortex-R4F的Thumb-2指令级应该是对应T2编码,可是它的ARM指令的编码格式是A1还是A2呢?
请参考:Which instruction format does Cortex-R support,encoding A1 orA2?
请问你为什么要关心指令编码?对于software来说,C只要指定正常的编译项目,汇编只要指定 Thumb 还是ARM就可以了
因为看到不同的编码格式有不同的操作数范围啊。我得知道我用的ARMv7R的汇编指令能操作的立即数是ARM扩展格式还是Zero扩展格式,从而立即数的数值范围是多大啊。这样不对吗?我是新接触ARM,请各位指教。
不好意思,英文的我看了但怕自己理解错误。还想请确认:
1、Thumb-2指令集是不是与编码格式T2是相对应的?如果是的话,那ARMv7-R支持Thumb-2指令集,就意味着它的指令编码格式就是固定的T2,而不支持T1和T3等其他Thumb编码格式??
2、各手册只提到ARMv7-R支持ARM指令集,没提到是哪个编号,所以想知道它确切支持A1还是A2编码??
还是说,两种编码都支持,编译器根据我写MOV还是MOVW去自动编码?
如果A1和A2都支持,那是不是Thumb-2指令的编码就不仅仅是支持T2编码了?也是根据我写的指令符号去识别编码格式?
3、如果编译器自动识别指令符,那我使用MOV应该是只能操作12bitARM扩展立即数,可是我用MOV操作16bit立即数,编译器并没有报错。又是怎么回事?