The CIL (also known as MSIL) language is very similar to RISC assembly languages. However, it doesn't include any registers, and all the variables, classes, fields, methods, and so on are accessed through their ID in the streams and their tables. Local variables are also accessed through their ID in methods. Most of the code is based on loading variables, constants, and so on into the stack, performing an operation (whose result is stored on the stack), and popping this result back into a local variable or field in an object.
This language consists of a set of opcodes and arguments for these opcodes (if necessary). Most of the opcodes take up 1 byte. Let's take a look at the instructions of this language.