Разветвление для разных подпрограмм в сборке ARM?

Скажем, у меня есть следующий код сборки:

subroutineA:
   ....some assembly code....

subroutineB:
   ....some assembly code....

subroutineC:
   ....some assembly code....

Теперь, в другой подпрограмме, я хочу создать что-то, что будет случайным образом переходить к одной из 3 подпрограмм выше.

Что-то вроде:

subroutineD:
  ....some code to randomly branch to either 
       subroutineA, or subroutineB, or subroutineC ....

Как можно сделать это эффективно в ARM ассемблере?

Вот как я решил проблему, и это может помочь кому-то еще (псевдокод ниже):

Я объявил массив в Assembly для хранения всех меток подпрограммы (их адрес памяти):

.global my_arr
my_arr:
    .long subroutineA
    .long subroutineB  
    .long subroutineC
    .......

У меня также есть генератор случайных чисел в сборке (LFSR). Скажем, у меня есть случайное число вR0 (конечно, убедитесь, что случайное число от 0 до общего количества подпрограмм), тогда я бы сделал что-то вроде:

ldr R4, =my_arr
ldr R5, [R4, R0]

А потом вR5У меня есть адрес случайной подпрограммы. И тогда я могу просто сделать:

blr R5

перейти к подпрограмме.

Ответы на вопрос(1)

Ваш ответ на вопрос