The line is actually quite blurry ... the arguments that I saw against calling CIL
, the "assembler language" in practice can be applied practically to x86
/ x86-64
.
Intel and AMD did not make processors that follow the assembly instructions in exactly the same way as for decades (if ever), so even the so-called "native" code is not much different from working on a virtual machine, whose byte code specified in x86
/ x86-64
.
x86
/ x86-64
are typical low-level developers who have access, so if we had to put our foot and call something in our ecosystem “assembly language”, it will win, and since CIL
will end up requires that x86
/ x86-64
instructions can run on the processor in this family, then there is a pretty strong case for it to really not “feel” how it should calculate.
So, in a sense , perhaps none of them can be considered "assembly language". When it comes to x86
/ x86-64
, we almost never refer to processors that run x86
/ x86-64
without translating it to something else (that is, whatever the microcode does).
To add another wrinkle, the way the x86
/ x86-64
executes a given sequence of instructions can simply be changed by updating the microcode. A quick search reveals that Linux can even do this on its own in software !
So, I think, here are the criteria that can justify their placement in two separate categories:
- Does it matter that all the current machines that run the
CIL
are implemented in software? - Does it matter that the same hardware can interpret the same
x86
/ x86-64
instructions differently after they are instructed to do this in the software? - Does it matter that at present we have no way to bypass the microcode and issue commands directly to the physical units of
x86
/ x86-64
?
So regarding the question “is CIL
for assembler” the best answers I can give are “it depends” (for scientists) and “to a large extent” (for engineers).
source share