介绍ARM机器码
首先我们来看一条ARM指令:
00001BD0 BEQ loc_1c04
如果说这条指令切换为16进制如何表示:
00001BD0 0B 00 00 0A
如果说这条指令切换为2进制如何表示:
0000 101 0 000000000000000000001011
是不是觉得特别神奇,那么小编是怎么来计算的呢,接下来就跟着小编一起来学习一下吧。
首先我们前面讲过一个ARM指令是32位的,格式是: {} {s} , {,}
这里B 的跳转指令可以拆分为这样的格式:
31-28位就是cond,这里的意思就是条件码。例如ne、eq等。
它们对应的机器码格式:
第二个就是25-27位了 这里由于是B指令101即可
第三个24位可以这样理解L我们前面也讲过 带有连接的如果是BL指 令对应的二进制操作数就是1 无条件跳转B指令就是0。
0-23位就是目标地址与该指令的相对偏移,这里如何计算的勒,我们需 要记住一个公式。
(目标跳转的地址-(当前这条指令的地址+8))/4
这里+8的原因就是因为arm指令有3级流水线的原因,/4是因为要做对 其处理
这里我们带入到一开始我们举例的arm指令来试试
00001BD0 BEQ loc_1c04
我们先利用上面讲的格式切换