4

Assembly bne jsr swapでこのようなことを行うことはできますか?そうでない場合は、Cからこの問題を解決するにはどうすればよいですか?事前に感謝します

if(start!=pivot_index){
  swap(board,start,pivot_index);
 }

書かなきゃいけないって教わったけどjsrsub-routineこんなことできる?bne sub-routine

4

3 に答える 3

4

通常、次のようなものに変換されるアセンブリ (疑似アセンブリ):

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

于 2010-05-23T11:44:51.533 に答える
2

確かにこれはできます。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
于 2010-05-23T11:44:46.073 に答える
0

bne subroutineいいえ、の代わりにはできません。 は「ジャンプ設定復帰」を意味するjsr subroutineためです。jsr

それと条件付き分岐命令の違いはjsr、リターンアドレスをスタックにプッシュするため、サブルーチンはどこに戻るかを知っていることです。を使用してサブルーチンに分岐しただけではbne、戻りアドレスが保存されないため、サブルーチンは完了時にどこに戻るかを知りません。

caf's answer は、それを処理する一般的な方法を示しています。それを PDP-11 操作に変換するだけです。

于 2010-05-23T12:03:08.737 に答える