汇编语言和平台独立性

qre*_*0ct 7 assembly

我对平台依赖感到困惑.我想直截了当.因此,如果我理解正确,特定的硬件架构将具有特定的指令集.

对?例如.如果我们谈论英特尔8086处理器,那么这个处理器就有一个特定的指令集.如果我在这个指令集中编码,则意味着我使用Intel 8086支持的汇编语言进行编码.对吗?

现在,这种特定的处理器架构可以被各种机器和操作系统使用.例如.使用Mountain Lion OSX的MAC,使用Ubuntu作为其操作系统的Lenovo机器和使用Windows 7作为其操作系统的Sony VAIO机器,所有这些机器都可以将其底层处理器架构作为Intel 8086.对吗?

所以现在如果我用英特尔8086处理器的汇编语言编写代码(比如添加2个数字),这个代码应该在上面提到的所有3台机器上运行没有任何问题.一个普通的汇编程序应该能够将这些代码转换为所有这三台机器上的机器级代码.对?

那么现在,平台依赖在哪里出现?由于asm代码是针对相同的底层处理器架构编写的,它是否应该只在所有平台上运行?

我只想弄清楚我哪里出错并且感到困惑.我在这里错过了什么?如果问题听起来令人困惑或愚蠢,请耐心等待.

Pet*_*r M 11

我会给你一个坏车类比,说明为什么会有问题.

所有品牌的汽车均采用相同类型的螺钉和螺栓(8086代码)

虽然您可以从福特(Windows)中取出螺丝并将其拧入丰田(OSX),但您不能从福特(Internet Explorer)中取出车身面板并将其固定在丰田(OSX)上.

面板可以使用相同类型的螺钉和螺栓连接,但面板永远不会适合两个品牌.

因此,虽然您可以在Windows和OSX之间使用相同的基本指令来构建基本内容,但是一旦您开始以OS的风格构建内容,就无法再交换它们.这将引领你走平台依赖的道路.

(我告诉过你这将是一个不好的比喻)


Ign*_*ams 7

不幸的是,如果不使用API​​和ABI进行输入和输出,那么汇编语言程序就不会走得太远.而API和ABI 依赖于平台.

  • 从另一个角度来看:[Wine](http://www.winehq.org/) 实现了 Windows 平台 ABI(包括可执行加载程序等),以允许 Windows 程序在其他平台上运行。也就是说,不同的平台(操作系统)实现不同的 ABI,但这并没有什么神奇之处,是的,底层机器代码是“平台无关的”,它是特定于平台的组件之间的接口。 (2认同)