Difference between revisions of "Instruction set: CIL"

From ScienceZero
Jump to: navigation, search
Line 72: Line 72:
 
|}
 
|}
  
 +
==Load constants==
 +
{| class="wikitable"
 +
|-
 +
! Name !! Description
 +
|-
 +
|Ldc.I4 || Pushes a supplied value of type int32 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.0 || Pushes the integer value of 0 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.1 || Pushes the integer value of 1 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.2 || Pushes the integer value of 2 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.3 || Pushes the integer value of 3 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.4 || Pushes the integer value of 4 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.5 || Pushes the integer value of 5 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.6 || Pushes the integer value of 6 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.7 || Pushes the integer value of 7 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.8 || Pushes the integer value of 8 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.M1 || Pushes the integer value of -1 onto the evaluation stack as an int32. 
 +
|-
 +
|Ldc.I4.S || Pushes the supplied int8 value onto the evaluation stack as an int32, short form. 
 +
|-
 +
|Ldc.I8 || Pushes a supplied value of type int64 onto the evaluation stack as an int64. 
 +
|-
 +
|Ldc.R4 || Pushes a supplied value of type float32 onto the evaluation stack as type F (float). 
 +
|-
 +
|Ldc.R8 || Pushes a supplied value of type float64 onto the evaluation stack as type F (float). 
 +
|}
  
 
==Branching==
 
==Branching==

Revision as of 03:26, 9 October 2007

Arithmetic

Name Description
Add Adds two values and pushes the result onto the evaluation stack.
Add.Ovf Adds two integers, performs an overflow check, and pushes the result onto the evaluation stack.
Add.Ovf.Un Adds two unsigned integer values, performs an overflow check, and pushes the result onto the evaluation stack.
Div Divides two values and pushes the result as a floating-point (type F) or quotient (type int32) onto the evaluation stack.
Div.Un Divides two unsigned integer values and pushes the result (int32) onto the evaluation stack.
Mul Multiplies two values and pushes the result on the evaluation stack.
Mul.Ovf Multiplies two integer values, performs an overflow check, and pushes the result onto the evaluation stack.
Mul.Ovf.Un Multiplies two unsigned integer values, performs an overflow check, and pushes the result onto the evaluation stack.
Neg Negates a value and pushes the result onto the evaluation stack.
Rem Divides two values and pushes the remainder onto the evaluation stack.
Rem.Un Divides two unsigned values and pushes the remainder onto the evaluation stack.
Sub Subtracts one value from another and pushes the result onto the evaluation stack.
Sub.Ovf Subtracts one integer value from another, performs an overflow check, and pushes the result onto the evaluation stack.
Sub.Ovf.Un Subtracts one unsigned integer value from another, performs an overflow check, and pushes the result onto the evaluation stack.


Logical and shift

Name Description
And Computes the bitwise AND of two values and pushes the result onto the evaluation stack.
Or Compute the bitwise complement of the two integer values on top of the stack and pushes the result onto the evaluation stack.
Not Computes the bitwise complement of the integer value on top of the stack and pushes the result onto the evaluation stack as the same type.
Xor Computes the bitwise XOR of the top two values on the evaluation stack, pushing the result onto the evaluation stack.
Shl Shifts an integer value to the left (in zeroes) by a specified number of bits, pushing the result onto the evaluation stack.
Shr Shifts an integer value (in sign) to the right by a specified number of bits, pushing the result onto the evaluation stack.
Shr.Un Shifts an unsigned integer value (in zeroes) to the right by a specified number of bits, pushing the result onto the evaluation stack.


Compares

Name Description
Ceq Compares two values. If they are equal, the integer value 1 (int32) is pushed onto the evaluation stack; otherwise 0 (int32) is pushed onto the evaluation stack.
Cgt Compares two values. If the first value is greater than the second, the integer value 1 (int32) is pushed onto the evaluation stack; otherwise 0 (int32) is pushed onto the evaluation stack.
Cgt.Un Compares two unsigned or unordered values. If the first value is greater than the second, the integer value 1 (int32) is pushed onto the evaluation stack; otherwise 0 (int32) is pushed onto the evaluation stack.
Clt Compares two values. If the first value is less than the second, the integer value 1 (int32) is pushed onto the evaluation stack; otherwise 0 (int32) is pushed onto the evaluation stack.
Clt.Un Compares the unsigned or unordered values value1 and value2. If value1 is less than value2, then the integer value 1 (int32) is pushed onto the evaluation stack; otherwise 0 (int32) is pushed onto the evaluation stack.

Load constants

Name Description
Ldc.I4 Pushes a supplied value of type int32 onto the evaluation stack as an int32.
Ldc.I4.0 Pushes the integer value of 0 onto the evaluation stack as an int32.
Ldc.I4.1 Pushes the integer value of 1 onto the evaluation stack as an int32.
Ldc.I4.2 Pushes the integer value of 2 onto the evaluation stack as an int32.
Ldc.I4.3 Pushes the integer value of 3 onto the evaluation stack as an int32.
Ldc.I4.4 Pushes the integer value of 4 onto the evaluation stack as an int32.
Ldc.I4.5 Pushes the integer value of 5 onto the evaluation stack as an int32.
Ldc.I4.6 Pushes the integer value of 6 onto the evaluation stack as an int32.
Ldc.I4.7 Pushes the integer value of 7 onto the evaluation stack as an int32.
Ldc.I4.8 Pushes the integer value of 8 onto the evaluation stack as an int32.
Ldc.I4.M1 Pushes the integer value of -1 onto the evaluation stack as an int32.
Ldc.I4.S Pushes the supplied int8 value onto the evaluation stack as an int32, short form.
Ldc.I8 Pushes a supplied value of type int64 onto the evaluation stack as an int64.
Ldc.R4 Pushes a supplied value of type float32 onto the evaluation stack as type F (float).
Ldc.R8 Pushes a supplied value of type float64 onto the evaluation stack as type F (float).

Branching

Add ".S" for short form.

Name Description
Br Unconditionally transfers control to a target instruction.
Beq Transfers control to a target instruction if two values are equal.
Bge Transfers control to a target instruction if the first value is greater than or equal to the second value.
Bge.Un Transfers control to a target instruction if the first value is greater than the second value, when comparing unsigned integer values or unordered float values.
Bgt Transfers control to a target instruction if the first value is greater than the second value.
Bgt.Un Transfers control to a target instruction if the first value is greater than the second value, when comparing unsigned integer values or unordered float values.
Ble Transfers control to a target instruction if the first value is less than or equal to the second value.
Ble.Un Transfers control to a target instruction if the first value is less than or equal to the second value, when comparing unsigned integer values or unordered float values.
Blt Transfers control to a target instruction if the first value is less than the second value.
Blt.Un Transfers control to a target instruction if the first value is less than the second value, when comparing unsigned integer values or unordered float values.
Bne.Un Transfers control to a target instruction when two unsigned integer values or unordered float values are not equal.
Brfalse Transfers control to a target instruction if value is false, a null reference (Nothing in Visual Basic), or zero.
Brtrue Transfers control to a target instruction if value is true, not null, or non-zero.


Calling methods

Name Description
Call Calls the method indicated by the passed method descriptor.
Calli Calls the method indicated on the evaluation stack (as a pointer to an entry point) with arguments described by a calling convention.
Callvirt Calls a late-bound method on an object, pushing the return value onto the evaluation stack.
Ret Returns from the current method, pushing a return value (if present) from the callee's evaluation stack onto the caller's evaluation stack.
Jmp Exits current method and jumps to specified method.