0
では& Y(意味スワップ*(& y)と*(& X)の値と& xの値を入れ替える次機能を有するアセンブリ - スワップ機能 - なぜ機能しないのですか?
スワップ:
push EBP
mov EBP,ESP
mov EBX, [EBP+12] ; ebx = *x
mov EAX, DWORD [EBX] ;eax = ebx = *x
mov DWORD [EBP-4], EAX ; [ebp-4] = eax =*x
mov EDX, [EBP+8] ; edx = *y
mov EAX, DWORD [EDX] ; eax = *edx = *y
mov DWORD [EBX], EAX ; ebx = eax = *y
mov EAX, DWORD [EBP-4] ; eax = *x
mov DWORD [EDX], EAX ; edx = *x
pop EBP ; ebx = *y and edx = *x
ret
// call Swap
push x
push y
call swap
Iそれは働いていない理由を理解していなかった。 を私は。いただきましworngそれを理解する方法を説明したマークを追加しました?ありがとう。(私はそれの正しい実装を必要としない)。
これは非アトミックメモリアクセスです。これはスレッド環境で発生している可能性はありますか? –
fwiw、スワップは 'xchg'で、あるいはすべてのregを保存したい場合でもスタック上でさえできます:' 'push [x]' '' '[' 'pop [x]' 'pop [y]' – Martin