将指令中包含的8位有符号数左移一位。
· 将结果符号扩展为32位。
· 将得到的值加到PC寄存器中,即得到跳转的目标地址。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
· 将指令中包含的11位有符号数左移一位。
des=PC+{SignExtend(Signed_immed_11)<<1}
des = 0x00005e5c+((0xe015&0x7ff)<<1) = 0x5e86
1. PC 的概念,0x5e58是正在执行的指令,0x5e5a是正在译码指令,0x5e5c是正在取指阶段,才是PC的指向。
2.SignExtend是为了正负值,是为了确认向前跳,还是向后跳,现在这个计算很明显是向后跳。
3.左移一位,thumb是2字节对齐,左移一就是乘以2。arm是4字节对齐,需要左移二就是乘以4。这么做是为了表达更大的跳转范围。