ARMv6-M架构BL指令中J1、J2与异或配合计算立即数的原因
ARMv6-M架构BL指令解码中imm32计算的疑问
我正尝试理解ARMv6-M架构中BL指令的解码过程,疑惑点在于imm32的计算环节:I1和I2的值由J1和J2推导而来,但计算方式涉及与符号位S进行异或操作。
ARMv6-M参考手册中BL指令描述下的注释:
注释
在Thumb-2技术引入前,编码T1和T2中的J1和J2均大于1,导致分支范围更小。这些指令可拆分为两条独立的16位指令执行,第一条指令instr1将LR设置为PC + SignExtend(instr1<10:0>:'000000000000', 32),第二条指令完成剩余操作。在ARMv6T2、ARMv6-M和ARMv7中,BL指令无法再拆分为两条16位指令。
ARMv6-M参考手册相关摘录

对比:ARMv4T架构的BL指令
作为对比,以下是仅支持原始16位Thumb编码的ARMv4T(ARM DUI 0100B)中的同一条指令定义:
内容的提问来源于stack exchange,提问作者zenprogrammer
相关产品推荐
相关产品推荐

