[英]sub-routines on Assembly
我可以在Assembly bne jsr swap
上做這樣的事情,如果沒有,我怎么能從C解決這個問題,提前謝謝
if(start!=pivot_index){
swap(board,start,pivot_index);
}
我被教導我必須編寫jsr
和sub-routine
但是我可以做這樣的bne sub-routine
在匯編中通常會被翻譯成這樣的東西(偽裝配):
load [start]
compare [pivot_index]
branch-if-equal label1
push [pivot_index]
push [start]
push [board]
call swap
add-stack-pointer 12
label1:
即。 if
控制表達式不為真, if
語句轉換為跳過if
的主體的跳轉。
當然你可以做到這一點。 在x86上,您需要兩個分支:
# assume EAX = start, EBX = pivot_index
cmp eax, ebx
beq .SkipSwap
call swap
.SkipSwap:
對於ARM程序集,它更容易,因為您可以使用條件分支:
# assume r0 = start, r1 = pivot_index
cmp r0, r1
blne swap
不,你不能用bne subroutine
代替jsr subroutine
,因為jsr
意味着“跳轉設置返回”。
它與條件分支指令之間的區別在於jsr
將返回地址壓入堆棧,因此子例程知道返回的位置。 如果您只是使用bne
轉到子例程,則沒有保存返回地址,因此子例程在完成時不知道返回的位置。
caf的答案向您展示了處理這種情況的典型方式,您只需將其轉換為PDP-11操作即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.