Difference between revisions of "Instruction set: CIL"
From ScienceZero
| 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. |