說我有以下彙編代碼:在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彙編程序有效地做到這一點?
這裏是我結束瞭解決這個問題,它可能會幫助別人的某一天(僞下面的代碼):
我宣佈大會陣列來存儲所有的子程序標籤(它們的內存地址):
.global my_arr
my_arr:
.long subroutineA
.long subroutineB
.long subroutineC
.......
我在Assembly(LFSR)中也有一些隨機數發生器。說我有有隨機數R0
(當然,使0和子程序的總數之間確定的隨機數),那麼我會做這樣的事情:
ldr R4, =my_arr
ldr R5, [R4, R0]
然後在R5
,我有一個隨機地址子程序。然後我可以簡單地做:
blr R5
去子例程。
@OliverCharlesworth我猜你在暗示什麼,先是生成一個數字,然後做一個比較,如果number是1,那麼執行bl subroutineA,如果number是2,執行bl subroutineB,依此類推。但是如果我有很多子程序,這會變得非常低效嗎?也許我不明白你在說什麼? – JJackJi 2014-09-29 23:00:18
@GregHewgill我是新來的大會,我只是想了解什麼是最好的方式去做這樣的事情。用C語言(或其他語言)說,我會將所有子例程存儲在某個結構中,並生成一個隨機數,然後跳轉到結構中該索引處的子例程。 – JJackJi 2014-09-29 23:01:56
你可以在彙編語言中做幾乎完全相同的事情。創建一個函數地址數組,並根據隨機數對數組中的某個函數進行間接調用。 – 2014-09-29 23:21:43