其实我在看《汇编原理》这本书,其中所指语言应是指C/C++语言吧。。。
微软的中间语言应为MSIL(Microsoft Intermediate Language)可能是您手误吧。
不过您所提的诸多语言都需要转换成汇编或伪汇编语言(java的虚拟机码在下不是很清楚),但上述语言为何均不能直接转换为机器码呢?
直接转换就实现不了,或比较困难实现一些语法上的功能了,比如命名约定,UNICODE支持
C的命名约定,函数名+@+参数大小 比如Hex(LPCSTR dest ,LPCSTR source)就为Hex@8
C++的命名约定,函数名+@+参数大小+ 乱码 比如Hex(LPCSTR dest ,LPCSTR source)就为Hex@8A#0C
所以C不能重载函数,C++可以
C\C++先生成汇编清单(若不设置生成清单文件,只会留在内存中),
然后用汇编清单到汇编编译器(ml.exe)
16位生成omf对象文件(obj)
32位生成coff对象文件
再用对应的16\32\64位连接器(link.exe)连接各个对象文件
运行时调用对应系统的加载器..
这样做的原因是,已经花费巨大人力物力创造的ml.exe不能这样浪费了,可以节省开支,而且底层高手很难招聘