x86 Assembly Language Reference Manual

Data Transfer Instructions

The data transfer instructions move data between memory and the general-purpose and segment registers, and perform operations such as conditional moves, stack access, and data conversion.

Table 3–1 Data Transfer Instructions

Solaris Mnemonic 

Intel/AMD Mnemonic 

Description 

Notes 

bswap{lq}

BSWAP

byte swap 

bswapq valid only under -xarch=amd64

cbtw

CBW

convert byte to word 

 

cltd

CDQ

convert doubleword to quadword 

%eax -> %edx:%eax

cltq

CDQE

convert doubleword to quadword 

%eax -> %rax

cltq valid only under -xarch=amd64

cmova{wlq}, cmov{wlq}.a

CMOVA

conditional move if above 

cmovaq valid only under -xarch=amd64

cmovae{wlq}, cmov{wlq}.ae

CMOVAE

conditional move if above or equal 

cmovaeq valid only under -xarch=amd64

cmovb{wlq}, cmov{wlq}.b

CMOVB

conditional move if below 

cmovbq valid only under -xarch=amd64

cmovbe{wlq}, cmov{wlq}.be

CMOVBE

conditional move if below or equal 

cmovbeq valid only under -xarch=amd64

cmovc{wlq}, cmov{wlq}.c

CMOVC

conditional move if carry 

cmovcq valid only under -xarch=amd64

cmove{wlq}, cmov{wlq}.e

CMOVE

conditional move if equal 

cmoveq valid only under -xarch=amd64

cmovg{wlq}, cmov{wlq}.g

CMOVG

conditional move if greater 

cmovgq valid only under -xarch=amd64

cmovge{wlq}, cmov{wlq}.ge

CMOVGE

conditional move if greater or equal 

cmovgeq valid only under -xarch=amd64

cmovl{wlq}, cmov{wlq}.l

CMOVL

conditional move if less 

cmovlq valid only under -xarch=amd64

cmovle{wlq}, cmov{wlq}.le

COMVLE

conditional move if less or equal 

cmovleq valid only under -xarch=amd64

cmovna{wlq}, cmov{wlq}.na

CMOVNA

conditional move if not above 

cmovnaq valid only under -xarch=amd64

cmovnae{wlq}, cmov{wlq}.nae

CMOVNAE

conditional move if not above or equal 

cmovnaeq valid only under -xarch=amd64

cmovnb{wlq}, cmov{wlq}.nb

CMOVNB

conditional move if not below 

cmovnbq valid only under -xarch=amd64

cmovnbe{wlq}, cmov{wlq}.nbe

CMOVNBE

conditional move if not below or equal 

cmovnbeq valid only under -xarch=amd64

cmovnc{wlq}, cmov{wlq}.nc

CMOVNC

conditional move if not carry 

cmovncq valid only under -xarch=amd64

cmovne{wlq}, cmov{wlq}.ne

CMOVNE

conditional move if not equal 

cmovneq valid only under -xarch=amd64

cmovng{wlq}, cmov{wlq}.ng

CMOVNG

conditional move if greater 

cmovngq valid only under -xarch=amd64

cmovnge{wlq}, cmov{wlq}.nge

CMOVNGE

conditional move if not greater or equal 

cmovngeq valid only under -xarch=amd64

cmovnl{wlq}, cmov{wlq}.nl

CMOVNL

conditional move if not less 

cmovnlq valid only under -xarch=amd64

cmovnle{wlq}, cmov{wlq}.nle

CMOVNLE

conditional move if not above or equal 

cmovnleq valid only under -xarch=amd64

cmovno{wlq}, cmov{wlq}.no

CMOVNO

conditional move if not overflow 

cmovnoq valid only under -xarch=amd64

cmovnp{wlq}, cmov{wlq}.np

CMOVNP

conditional move if not parity 

cmovnpq valid only under -xarch=amd64

cmovns{wlq}, cmov{wlq}.ns

CMOVNS

conditional move if not sign (non-negative) 

cmovnsq valid only under -xarch=amd64

cmovnz{wlq}, cmov{wlq}.nz

CMOVNZ

conditional move if not zero 

cmovnzq valid only under -xarch=amd64

cmovo{wlq}, cmov{wlq}.o

CMOVO

conditional move if overflow 

cmovoq valid only under -xarch=amd64

cmovp{wlq}, cmov{wlq}.p

CMOVP

conditional move if parity 

cmovpq valid only under -xarch=amd64

cmovpe{wlq}, cmov{wlq}.pe

CMOVPE

conditional move if parity even 

cmovpeq valid only under -xarch=amd64

cmovpo{wlq}, cmov{wlq}.po

CMOVPO

conditional move if parity odd 

cmovpoq valid only under -xarch=amd64

cmovs{wlq}, cmov{wlq}.s

CMOVS

conditional move if sign (negative) 

cmovsq valid only under -xarch=amd64

cmovz{wlq}, cmov{wlq}.z

CMOVZ

conditional move if zero 

cmovzq valid only under -xarch=amd64

cmpxchg{bwlq}

CMPXCHG

compare and exchange 

cmpxchgq valid only under -xarch=amd64

cmpxchg8b

CMPXCHG8B

compare and exchange 8 bytes 

 

cqtd

CQO

convert quadword to octword 

%rax -> %rdx:%rax

cqtd valid only under -xarch=amd64

cqto

CQO

convert quadword to octword 

%rax -> %rdx:%rax

cqto valid only under -xarch=amd64

cwtd

CWD

convert word to doubleword 

%ax -> %dx:%ax

cwtl

CWDE

convert word to doubleword in %eax register

%ax -> %eax

mov{bwlq}

MOV

move data between immediate values, general purpose registers, segment registers, and memory 

movq valid only under -xarch=amd64

movabs{bwlq}

MOVABS

move immediate value to register 

movabs valid only under -xarch=amd64

movabs{bwlq}A

MOVABS

move immediate value to register {AL, AX, GAX, RAX}

movabs valid only under -xarch=amd64

movsb{wlq}, movsw{lq}

MOVSX

move and sign extend 

movsbq and movswq valid only under -xarch=amd64

movzb{wlq}, movzw{lq}

MOVZX

move and zero extend 

movzbq and movzwq valid only under -xarch=amd64

pop{wlq}

POP

pop stack 

popq valid only under -xarch=amd64

popaw

POPA

pop general-purpose registers from stack 

popaw invalid under -xarch=amd64

popal, popa

POPAD

pop general-purpose registers from stack 

invalid under -xarch=amd64

push{wlq}

PUSH

push onto stack 

pushq valid only under -xarch=amd64

pushaw

PUSHA

push general-purpose registers onto stack 

pushaw invalid under -xarch=amd64

pushal, pusha

PUSHAD

push general-purpose registers onto stack 

invalid under -xarch=amd64

xadd{bwlq}

XADD

exchange and add 

xaddq valid only under -xarch=amd64

xchg{bwlq}

XCHG

exchange 

xchgq valid only under -xarch=amd64

xchg{bwlq}A

XCHG

exchange 

xchgqA valid only under -xarch=amd64