在学校,我们被教导编译器将计算机程序编译为机器语言。我们还被告知机器语言包含对硬件的直接指令。然后,如何在具有不同硬件的多个计算机配置上运行相同的编译程序?
答案 0 :(得分:11)
如果它是相同的处理器(或同一系列,例如Intel x86),则取决于“不同硬件”的含义,那么机器代码指令是相同的。
如果额外的硬件是不同的外围设备(屏幕,磁盘打印机等),那么操作系统通过为您提供一致的指令集来隐藏这些细节
如果您的意思是,如何在Intel x86上运行ARM cpu程序,那么您不能 - 除了某种虚拟机模拟器读取每个ARM指令并将它们转换为x86或运行与一组x86函数相同的功能,然后返回与ARM相同的答案。
编辑:我认为你的意思是具有不同hw的电脑 - 即不同的外围设备但处理器系列相同?
与硬件交谈并不涉及具体的指令 - 主要是将内存移动到操作系统和/或设备驱动程序专门为进入该设备的数据保留的特定位置。在DOS和BIOS的旧时代,您将触发中断以调用BIOS中的特定位代码来对该数据执行操作并将其发送到HW。
答案 1 :(得分:4)
使用模拟器或虚拟机,其中任何一个都可以实时有效地翻译机器语言。
答案 2 :(得分:0)
我认为将本机编译器编译为处理器的特定指令集更为准确。由于有一系列处理器保持向后兼容性:8086 - 80386 - 80486 - 80586 - 双核 - 四核......;然后每个处理器运行其祖先的指令。如果您希望跨处理器体系结构移植代码,那么您需要确保虚拟机或模拟器,就像之前提到的那样。