Ich kann mir nicht vorstellen, was bx lr macht und wie es sich von bl (label) unterscheidet. Ich weiß, dass bl (label) die Rückgabeadresse dieser Funktion im Linkregister speichert, aber ich weiß nicht, was bx lr tut.
bx
steht für Zweig und Austausch-Befehlssatz Dies bedeutet, dass der Prozessor den nächsten Befehl entsprechend dem LSB (niederwertigstes Bit) der Adresse, zu der verzweigt werden soll, als ARM oder als Daumen behandelt.
Da lr
normalerweise die Rückgabeadresse enthält, bedeutet dies, dass es sich um eine Rückgabe von einer Funktion handelt. Wenn das lsb von lr
1 ist, behandelt es den Code unter dieser Adresse als thumb, sonst wird es behandle es als ARM.