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:
すなわち。ステートメントは、制御式が true でない場合、if
本体を飛び越えるジャンプに変換されます。if
確かにこれはできます。x86 では、次の 2 つのブランチが必要です。
# 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's answer は、それを処理する一般的な方法を示しています。それを PDP-11 操作に変換するだけです。