ARM/Thumb指令集的汇编程序
ARM/Thumb指令集的汇编程序start后为什么要➕1,代表了什么?如果不➕1又是什么原因?...
ARM/Thumb指令集的汇编程序start后为什么要➕1,代表了什么?如果不➕1又是什么原因?
展开
1个回答
展开全部
ARM处理器运行分ARM状态和Thumb状态,启动时从ARM状态启动。
ARM状态和Thumb状态两种不同状态,通过PC指针的最bit0来区分,bit0=0表示ARM状态,bit0=1表示Thumb状态。运行在不同状态下时,PC的bit0必须按照此规则来,否则处理器会报异常。
不论是ARM指令还是Thumb指令都没有单数字节的,那么ARM处理器的代码就都不会定位到单字节对齐,也就是说一段程序的起始地址的bit0必定是0,也就是说bit0其实没有真正用到,所以就可以用来标识状态,所以这里在地址上加一个1,也就是让bit0=1来标识Thumb状态的程序地址,然后用BX指令来跳转到该地址即可。
ps:ARM的跳转指令有B, BL, BX, BLX,其中带X的可以实现在跳转时状态切换,X应该就是Exchange这样单词的取意(个人猜测),跳转地址应当事先按规则将bit0标识好,这样ARM处理器就能够在跳转时切换到地址所标识的状态。
ARM状态和Thumb状态两种不同状态,通过PC指针的最bit0来区分,bit0=0表示ARM状态,bit0=1表示Thumb状态。运行在不同状态下时,PC的bit0必须按照此规则来,否则处理器会报异常。
不论是ARM指令还是Thumb指令都没有单数字节的,那么ARM处理器的代码就都不会定位到单字节对齐,也就是说一段程序的起始地址的bit0必定是0,也就是说bit0其实没有真正用到,所以就可以用来标识状态,所以这里在地址上加一个1,也就是让bit0=1来标识Thumb状态的程序地址,然后用BX指令来跳转到该地址即可。
ps:ARM的跳转指令有B, BL, BX, BLX,其中带X的可以实现在跳转时状态切换,X应该就是Exchange这样单词的取意(个人猜测),跳转地址应当事先按规则将bit0标识好,这样ARM处理器就能够在跳转时切换到地址所标识的状态。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询