2つの16ビットの符号なしレジスタを比較し、最初のものが大きい場合は内容を入れ替えたいと思います。たとえば、ax
に00FFが含まれ、bx
にFFFFが含まれている場合は、その内容を交換したいと考えています。これを行うコマンドか、スワッピングに使用される簡単な手順がありますか?x86 - 2つのレジスタの内容を交換する
答えて
"2つのレジスタのx86 - スワップの内容"です。あなたはケースの斧でジャンプを回避したい場合、すでに最大値を保持している(そして、あなたはそれをする時間のほとんどを知っている、とあなたはジャンプ誘発命令を避けたい
.model small
.stack 100h
.data
.code
mov ax, @data
mov ds, ax
mov ax, 0ffffh
mov bx, 0ffh
cmp ax, bx
ja swap ;IF AX > BX...
jmp continue
swap:
xchg ax, bx ;◄■■■ AX BECOMES 0FFH, BX BECOMES 0FFFFH.
continue:
mov ax, 4c00h
int 21h
これはタイトルかもしれませんが、質問そのものは明らかです(OPを例に挙げます):_ 2つの16ビット符号なしレジスタを比較し、最初のものが大きい場合はその内容を入れ替えたい@ –
@MichaelPetch、簡単です修正する。 –
:あなたはXCHG
指示、例を使用することができますパイプラインCPUの実装によって発生する可能性があるリフィル...)、またはあなただけのバイトを保存する(、BXは単一バイトのオペコードXCHG斧です):
cmp ax, bx
jb bx_is_bigger
xchg ax, bx
bx_is_bigger:
xchg ax, bx
Better: 'xchg'をスキップする' jnb'なので、 'xchg'は2回または1回ではなく0回または1回実行されます。スピードを最適化している場合は、実際にスワップする必要はありません。例えばあなたがそれらを 'ax'と' bx'に入れる前に 'dx'と' ax'でそれらを持っているかもしれないので、あなたは2つの 'mov'命令を飛ばしてそれを行うことができます。 ( 'xchg'は3 uopsにデコードされるので、最新のCPUでは' mov'命令と同じくらいです)。 [code golf](https://codegolf.stackexchange.com/questions/77270/greatest-common-divisor/77364#77364)や他の純粋なコードサイズの状況の外では、通常使う価値はありません。 –
- 1. 2次元配列内の2つの値を交換する
- 2. 内容を交換するod div(3つ以上のdivを持つ)
- 3. PHP:同じstr_replace内の2つのアイテムを交換する
- 4. C#2つのリストを交換 - 交換可能な内部/外部ループ
- 5. Android:2つのオーバーラップビューを交換する
- 6. 内容モデル交換用MathMLとOpenMath
- 7. トラブル理解レジスタx86
- 8. 2つのマーカーの間のファイル内の内容を置換する
- 9. 2つのアプリケーション間のデータ交換(ニーズパターン)
- 10. 2つのウィンドウ間の情報交換
- 11. 1つのリンクリストで2つのノードを交換する
- 12. Djangoでデータベース内の2つのオブジェクトを交換するためのフォーム
- 13. LLVM IRによるx86レジスタの制御?
- 14. のJavascript/CSSメニュー特定の領域の内容を交換する
- 15. MySQLの2つのフィールドの値を交換するDjango update()?
- 16. AVXレジスタの内容を無効にする
- 17. 文字列の2つの単語を交換する
- 18. SwiftでRealm.ioデータベースの2つのオブジェクトを交換する
- 19. ツリー2つのノードを交換するためのトラバーサル
- 20. 2つのコントロール間の不透明度を交換するストーリーボード
- 21. C:リンクされたリストの2つのノードを交換する
- 22. R:ネストされたリストの2つの値を交換する
- 23. JQuery - 2つのDIVのhtmlコンテンツを交換する
- 24. x86の余分なレジスタ64ビット
- 25. Vimのファイル内の他の場所にあるレジスタや行の内容で置き換えます
- 26. notepad ++と2つの値を交換する
- 27. 2つのディレクトリの内容の違い
- 28. webdev - div内のデータを交換する
- 29. 内外のモナドを交換する
- 30. ファイル内のバイトを交換する
は、私の知る限りでは、何もありませんこれを行う単一の命令。 'cmp'' jb''xchg'を実行するだけです。 –
'cmovCC'命令を使うこともできます。 – fuz
アーロン、あなたの質問に答えがあります。それをチェックしてください。 –