cal*_*tas 19 x86 assembly operating-system
我对所有这些低级别的东西,汇编语言相对较新.并且想要了解更多细节.为什么Linux,Windows汇编语言之间存在差异?
据我所知,当我编译C代码时,操作系统并不真正生成纯机器或汇编代码,它会生成依赖于操作系统的二进制代码.但为什么呢?
例如,当我使用x86系统时,CPU只能理解x86 ASM我是对的?.为什么我们不编写纯x86汇编代码以及为什么基于操作系统有不同的汇编变体?如果我们编写纯ASM或OS生成纯ASM,那么操作系统之间是否存在二进制兼容问题?
我真的很想知道他们背后的所有原因.任何详细的答案,文章,书都会很棒.谢谢.
Sto*_*ica 22
没有区别.如果处理器相同,则汇编代码相同.在Windows上编译的x86代码与Linux上的x86代码二进制兼容.编译器不会生成依赖于操作系统的二进制代码,但它可能会以不同的格式打包代码(例如PE与ELF).
不同之处在于使用了哪些库.为了使用OS东西(例如I/O),您必须链接到操作系统的库.不出所料,Windows系统库在Linux机器上不可用(除非你当然有Wine),反之亦然.
好吧,你没有直接组装.代码必须采用某种可执行格式:windows使用PE,大多数Unices现在都使用ELF(尽管还有其他的,比如a.out).
基本组装说明是相同的,您使用它们创建的功能是相同的.
问题在于访问其他资源.处理器非常擅长计算,但无法访问硬盘,或者无法在屏幕上打印字符或连接到蓝牙手机.这些元素总是以某种方式依赖于操作系统.它们是根据系统调用实现的,其中处理器通知操作系统执行某项任务.linux上的任务号17不一定是Windows上的任务17; 他们甚至可能没有等价物.
由于大多数库都有一些最低级别的系统调用,这就是为什么不能在每种情况下重新编译代码的原因.
| 归档时间: |
|
| 查看次数: |
11558 次 |
| 最近记录: |