我想比较2个16位无符号寄存器,如果第一个寄存器更大,则交换它们的内容。例如,如果ax
包含00FF且bx
包含FFFF,我想交换其内容。是否有执行此操作的命令或用于交换的简单过程?
答案 0 :(得分:0)
您的问题是“x86 - 交换2个寄存器的内容”。您可以使用XCHG
指令,例如:
.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
答案 1 :(得分:0)
如果你想避免跳转,如果ax已经拥有最大的值(并且你知道大部分时间它会,并且你想避免跳跃引起的指令管道补充,这可能发生取决于cpu实现.. 。),或者你只想保存一个字节(xchg ax,bx是单字节操作码):
cmp ax, bx
jb bx_is_bigger
xchg ax, bx
bx_is_bigger:
xchg ax, bx