Mel*_*kor 8 c assembly processor
据我所知,C代码被编译为某人机器上的机器(汇编)代码,它变成了一个可以在许多不同处理器(机器)上运行的exe文件.但是由于不同的处理器有自己独特的汇编代码,这个代码怎么运行?编译后的exe只能在一种处理器上运行吗?
Ker*_* SB 15
将程序编译为机器代码时,必须选择机器代码指令集,可能是运行机器的模式(如果适用),以及存储结果代码的格式.
所有这些选择限制了可以执行代码的目标平台.
指令集大致取决于CPU的类型:x86("IBM兼容"),PowerPC,ARM,MIPS,DEC Alpha,Motorola 68k,......在每个CPU系列中,有许多子功能和几代可供选择from(例如对于x86,有i386,SSE,AVX,......).较新的CPU可能能够执行仅限于较旧代的代码,因此可能存在共同的子集.
x86上的处理器模式取决于环境:MS-DOS程序的实模式以及在启动时运行的任何内容,保护模式,在某些情况下可能会使用不同的寻址模式(虚幻模式)......
二进制格式需要被操作系统识别,或者更普遍地通过你拥有的加载机制来识别:用于Windows的PE,用于当代Linux的ELF,在过去的a.out中,...操作系统可以提供加载器用于多种二进制格式.
这只是您在编译时选择的最基本级别的平台参数,并且您的程序将仅在同意此选择的平台上运行.但是,对于真实世界的程序存在许多实际限制,例如OS系统接口和框架库的可用性,这些也需要匹配.例如,虽然在Linux中读取和运行Windows PE二进制文件并不困难,但其中包含的代码在Linux上没有意义,因为它使用Windows特定的软件中断.但是,通过拦截和翻译它们,毕竟很可能在Linux上运行这些二进制文件.