Including Common Intermediate Language to your .Net designer toolbox - the beginning
Include Common Intermediate Language to your .Net designer toolbox
Why?
See:
Abstraction stacks and multi-paradigm software design
https://blogs.msdn.com/marcod/archive/2004/02/19/76637.aspx
Simplistic program - straight start
Create a text file named uno.il
(“uno” has been the name of the very first program I have written for every programming language I have learned, uno means one in Spanish)
We want a .Net assembly, so start stating that:
.assembly uno {}
A .Net assembly contains interesting information known as metadata; also represent a logical group of .Net modules (separated files which contain actual CIL code), so we need at least one module containing our code:
.module uno.exe
This minimalist typical first program can be made of a single method that shows a string message on the screen, so state that with:
.method static void start()
As you see, individual methods can be used with CIL; the above line starts a method table in the assembly metadata, filled with:
Name of the method: start
Method arguments: none
Return type: void
Flag: static
There are many more entries in a metadata method table, which in out case get default values.
The grammar for a method definition is:
<method_def> ::=
.method <flags> <call_conv> <ret_type> <name>(<arg_list>) <impl>
{
<method_body>
}
Following with our method body, we type:
{
.entrypoint
To start the method body and to state that this method is the entry point for our assembly.
Now, CIL instructions for displaying a message on the screen, first we load the string message into the stack:
ldstr "here uno is executing"
then we make a method call to another assembly:
call void [mscorlib]System.Console::WriteLine(string)
to finish we state the end of our method and method body:
ret
}
That’s it, we have our first CIL source, the complete listing is:
.assembly uno {}
.module uno.exe
.method static void start()
{
.entrypoint
ldstr "here uno is executing"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
at this point you could save and compile with the following command line:
ilasm uno.il
the last line of the displayed output should be:
Operation completed successfully
And there must be a file named uno.exe, execute it and enjoy that special feeling that brought you to this profession of programming.
Just as Mr. Churchill said: "This is not the end, this is not even the beginning of the end; perhaps this is the end of the beginning"