繁体   English   中英

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

[英]x86 - swap contents of 2 registers

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

您的问题是“ 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

如果要避免在ax已经拥有最大值的情况下跳转(并且您知道大多数时间都将保持跳转,并且要避免根据cpu的实现而可能发生的跳转引起的指令流水线重装...),或者您只想保存一个字节(xchg ax,bx是一个单字节操作码):

    cmp  ax, bx
    jb   bx_is_bigger
    xchg ax, bx
bx_is_bigger:
    xchg ax, bx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM