# The OS/K Team licenses this file to you under the MIT license. # See the LICENSE file in the project root for more information. #---------------------------------------------------------------------------# # Movement instructions # #---------------------------------------------------------------------------# # # Load Effective Address (LEA) instruction # # $1 = ADDR($2) # # For instance: # LEA RAX, [RBX + RCX + 4] # will result in: # RAX = RBX + RCX + 4 # # Preserves all flags # lea r m # # Movement with sign-extension (MOV) instruction # # $1 = $2 # mov r rim mov m ri # # Movement with sign-extension (MOVSXx) instruction # # $1 = SignExtend($2 & (2^(8 * sizeof(x)) - 1) # movsxb r r movsxw r r movsxl r r # # Movement with zero-extension (MOVZX) instruction # # $1 = ZeroExtend($2) # movzx r m # # Exchange (XCHG) instruction # # $_ = $1 # $1 = $2 # $2 = $_ # xchg r rm # # Compare-and-exchange (CMPXCHG) instruction # # IF ($1 == RAX) THEN # $1 = $2 # ZF = 1 # ELSE # RAX = $1 # ZF = 0 # FI # # Preserves CF, OF and SF # cmpxchg rm r # # 3-operand rotation (ROTd) # # $3 -> $2 -> $1 -> $3 (KROTL) # $1 -> $2 -> $3 -> $1 (KROTR) # rotr rm r r rotl rm r r # # Load argument #N (LDARG) # # $1 = AX$2 # # Throws: # #ILL if $2 ≥ 16 # ldarg r r