首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不同操作系统上的汇编代码是相同的还是不同的?

不同操作系统上的汇编代码是相同的还是不同的?
EN

Stack Overflow用户
提问于 2013-02-24 18:08:20
回答 2查看 89关注 0票数 1

编译C/C++代码时,它会生成汇编代码。如果我有Windows和Linux双启动(即完全相同的处理器),并且我在Windows和Linux上用C++写了一个程序,那么

编译后的汇编代码(链接前)会不会对不同的?

我的意思是,可执行文件之间的区别是链接器,写吗?但我不是在说可执行文件...我说的是链接前的汇编代码。

如果这两个汇编代码是不同的,那么它们为什么和如何不同?

库是预编译的,所以这可能是我认为的不同之处(如果不是,请纠正我)。但是如果我不使用库呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-24 18:45:12

不同的OSes使用不同的可执行文件格式。

它们还通过不同的API提供其功能(fopen()最终将在32位Windows上使用int 0x2Esysenter调用CreateFileA(),在32位Linux上使用int 0x80调用open() ),这些API在内部以不同的方式运行。所以在你程序的fopen()中会有不同的代码。

不同的编译器可以使用不同的默认调用约定,或者相同的编译器可以对不同的目标OSes使用不同的调用约定。即使在同一个编译器上,不同的优化和调试选项也会影响代码生成。

最后,不同的编译器也可以生成非常不同的代码,即使其他一切都是一样的,即使您不使用任何库(这通常是一件没有意义的事情)。这很简单,因为它们不使用完全相同的算法,也不是由相同的人编写的,并且没有人强制要求所有编译器的行为都相同。

不管怎样,你的问题的意义是什么?

票数 4
EN

Stack Overflow用户

发布于 2013-02-24 18:18:25

汇编代码将是相同的,只要你不必使用系统调用-这意味着你不能读取输入,也不能执行输出,甚至不能结束程序-什么都不能。

所以,除了一个完全无用的程序,它不能做输入和输出,你必须手动杀死它,你不能创建一个在几个操作系统上通过相同代码的二进制程序,在任何地方都做同样的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15050662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档