x86 - 交换2个寄存器的内容

时间:2016-10-25 19:17:38

标签: assembly x86

我想比较2个16位无符号寄存器,如果第一个寄存器更大,则交换它们的内容。例如,如果ax包含00FF且bx包含FFFF,我想交换其内容。是否有执行此操作的命令或用于交换的简单过程?

2 个答案:

答案 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