mirror of
https://gitlab.os-k.eu/os-k-team/kvisc.git
synced 2023-08-25 14:05:46 +02:00
149 lines
2.6 KiB
Plaintext
149 lines
2.6 KiB
Plaintext
# The OS/K Team licenses this file to you under the MIT license.
|
|
# See the LICENSE file in the project root for more information.
|
|
|
|
#---------------------------------------------------------------------------#
|
|
# Jump instructions #
|
|
#---------------------------------------------------------------------------#
|
|
|
|
#
|
|
# Jump (JMP) instruction
|
|
#
|
|
# RIP = $1
|
|
#
|
|
jmp ri
|
|
|
|
#
|
|
# RCX-dependent jump (LOOP) instruction
|
|
#
|
|
# IF (RCX > 0) THEN
|
|
# RCX = RCX - 1
|
|
# RIP = $1
|
|
# FI
|
|
#
|
|
loop ri
|
|
|
|
#
|
|
# Conditional absolute jumps (B)
|
|
#
|
|
# COMPARE(SignExtend($1), $2)
|
|
#
|
|
# IF (COND) THEN
|
|
# RIP = $3
|
|
# FI
|
|
#
|
|
# Sets CF, OF, ZF and SF according to the comparison's results
|
|
#
|
|
# This instruction is special in that the COND field specified is not evaluated
|
|
# before the instruction is executed, but after the comparison it effectuates
|
|
#
|
|
# Suffixing B with the REP suffix results in undefined behavior
|
|
#
|
|
b rm ri ri
|
|
|
|
|
|
#---------------------------------------------------------------------------#
|
|
# Stack manipulation instructions #
|
|
#---------------------------------------------------------------------------#
|
|
|
|
#
|
|
# Unconditional jump with possible return (CALL)
|
|
#
|
|
# PUSH(RIP)
|
|
# JMP(RIP)
|
|
#
|
|
call ri
|
|
call i ri
|
|
call i ri ri
|
|
|
|
#
|
|
# Return to caller (RET)
|
|
#
|
|
# POP(RIP)
|
|
#
|
|
ret
|
|
|
|
#
|
|
# Make new stack frame (ENTER)
|
|
#
|
|
# PUSH(RBP)
|
|
# RBP = RSP
|
|
# RSP = RSP - $1
|
|
#
|
|
enter i
|
|
|
|
#
|
|
# Leave stack frame (LEAVE)
|
|
#
|
|
# RSP = RBP
|
|
# POP(RBP)
|
|
#
|
|
leave
|
|
|
|
#
|
|
# PUSH value onto stack
|
|
#
|
|
# RSP = RSP - 8
|
|
# *RSP = $1
|
|
#
|
|
push rim
|
|
|
|
#
|
|
# POP value from stack
|
|
#
|
|
# $1 = *RSP
|
|
# RSP = RSP + 8
|
|
#
|
|
pop r
|
|
|
|
#---------------------------------------------------------------------------#
|
|
# Movement instructions #
|
|
#---------------------------------------------------------------------------#
|
|
|
|
#
|
|
# Load Effective Address (LEA) instruction
|
|
#
|
|
# $1 = ADDR($2)
|
|
#
|
|
# For instance:
|
|
# LEA RAX, [RBX + RCX * 2 + 4]
|
|
# will result in:
|
|
# RAX = RBX + RCX * 2 + 4
|
|
#
|
|
# Preserves all flags
|
|
#
|
|
lea r m
|
|
|
|
#
|
|
# Move data (MOV) instruction
|
|
#
|
|
# $1 = SignExtend($2)
|
|
#
|
|
mov r rim
|
|
mov m ri
|
|
|
|
#
|
|
# Load from memory with zero-extension (MOVSX/MOVZX) instruction
|
|
#
|
|
# $1 = ZeroExtend($2)
|
|
#
|
|
movzx r m
|
|
|
|
#
|
|
# Move with sign-extension (MOVSXx) instruction
|
|
#
|
|
# $1 = SignExtend($2 & (2^(8 * sizeof(x)) - 1)
|
|
#
|
|
movsxb r r
|
|
movsxw r r
|
|
movsxd r r
|
|
|
|
#
|
|
# Exchange (XCHG) instruction
|
|
#
|
|
# $_ = $1
|
|
# $1 = $2
|
|
# $2 = $_
|
|
#
|
|
xchg r rm
|
|
|