Loops 使用PC的ARM装配回路?
我目前正在学习手臂组装,我有一些问题。在读取文档时,我发现寄存器nº15是存储下一条指令地址的程序计数器,当一条指令完成时,它会增加4(字节,或在thumb模式下增加2) 所以,我的问题是,如果我运行一条指令,它自身改变PC的字节数少于4字节,它会返回到之前的指令吗?然后一次又一次地重复,这将是一个无限循环 谢谢,如果这是个明显的问题,我很抱歉。 当做Loops 使用PC的ARM装配回路?,loops,assembly,arm,Loops,Assembly,Arm,我目前正在学习手臂组装,我有一些问题。在读取文档时,我发现寄存器nº15是存储下一条指令地址的程序计数器,当一条指令完成时,它会增加4(字节,或在thumb模式下增加2) 所以,我的问题是,如果我运行一条指令,它自身改变PC的字节数少于4字节,它会返回到之前的指令吗?然后一次又一次地重复,这将是一个无限循环 谢谢,如果这是个明显的问题,我很抱歉。 当做 Pedro.您必须逐个指令查看,因为有些人对PC的修改是不可预测的,但对于那些合法的程序计数器修改实际上会导致跳转到您保存在程序计数器中的地址。
Pedro.您必须逐个指令查看,因为有些人对PC的修改是不可预测的,但对于那些合法的程序计数器修改实际上会导致跳转到您保存在程序计数器中的地址。你不必担心前面的两条指令(它是8字节和4字节,而不是4字节和2字节,前面有两条指令)。是的-跳转/分支指令正是你所描述的-它是一条修改PC的指令。如果你安排跳转的结果,将程序计数器放回原来的位置,是的,您将当场循环。请注意,这实际上不是下一条指令的地址,而是当前指令+4(拇指模式)或+8(ARM模式)的地址。因此,在ARM中,这是2条之后的指令,但在Thumb中可能不是(因为指令可以是16位或32位)是的,您可以编写一个无限循环。您可以在调试器中尝试这种方法。