8
我似乎无法理解bx lr的作用,以及它与bl(标签)的不同之处。我知道bl(标签)将该函数的返回地址存储在链接寄存器中,但我不知道bx lr是什么。bx lr在ARM汇编语言中做了什么?
我似乎无法理解bx lr的作用,以及它与bl(标签)的不同之处。我知道bl(标签)将该函数的返回地址存储在链接寄存器中,但我不知道bx lr是什么。bx lr在ARM汇编语言中做了什么?
bx
代表branch and exchange instruction set这意味着根据要分支到的地址的LSB(最低有效位),处理器将把下一个指令视为ARM或拇指。
作为lr
通常保存了返回地址,这意味着这是从一个函数的返回,并且如果LSB的lr
是1时,它会在那个地址作为拇指处理代码,否则,它将把它作为臂。
你可能简化这个解释,我对ARM架构的知识并不那么先进。 – user2177940 2014-11-23 02:21:03
https://en.wikipedia.org/wiki/ARM_architecture#Thumb – MByD 2014-11-23 02:36:49
@ user2177940第1部分:模式切换。 ARMv7 CPU工作在两种模式之一(称为ARM或Thumb)中,指令编码方面有所不同(主要是“完整”,但较大的4字节指令与“受限制”但较小的2字节指令)。根据跳转到的地址是偶数还是奇数(这导致分别转换为ARM或Thumb模式),通过'bx/blx' **在通话时间确定**切换到下一个模式。 – 2014-11-23 02:38:42