首页
社区
课程
招聘
[求助]请教下汇编指令转换
发表于: 2020-3-6 02:12 2881

[求助]请教下汇编指令转换

2020-3-6 02:12
2881
请教下各位大佬



B loc_5e86这条指令 对应的机器码是  15e0

查了手册  如下  

   将指令中包含的8位有符号数左移一位。

·  将结果符号扩展为32位。

·  将得到的值加到PC寄存器中,即得到跳转的目标地址。




那么计算方式是    0x15e0  对应的   
8位符号左移一位  也就是 0x1c0
然后再扩展32位  0xffffffc0     也就是负数 0x40
得到的  -0x40 加上PC  5e58  ,怎么也算不出来 5e86
是不是我哪里算的不对啊   ,请教各位大佬指点一下

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1096
活跃值: (374)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
是B,你找的是BL,不过差不多

·  将指令中包含的11位有符号数左移一位。

·  将结果符号扩展为32位。

·  将得到的值加到PC寄存器中,即得到跳转的目标地址。


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。这么做是为了表达更大的跳转范围。


2020-3-6 09:31
1
雪    币: 7
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢大佬
2020-3-6 10:19
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
感谢分享呵呵
2020-3-6 17:12
0
游客
登录 | 注册 方可回帖
返回
//