[英]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.