汇编语言有多不可移植,/真的/?

2023-11-22

我知道用汇编语言编写任何内容或将汇编语言添加到任何程序都会损害其可移植性。但是,有多糟糕呢?我的意思是,现在基本上所有 PC 都是 x86 或 x64,对吧?那么,如果我将汇编嵌入到 C 程序中,为什么无论它去了哪里它仍然无法编译?

这种不可移植性的概念是否仅指当您really深入研究特定处理器的特定怪癖,从一段代码中榨取每一点性能下降?

如果我没记错的话,PC 游戏“过山车大亨”几乎完全是用汇编语言编写的。那么...它到底有多不方便携带呢?


除了处理器本身之外,当然还总是有其他考虑因素:目标平台上的调用约定是什么?怎样struct传递给其他(例如:API)函数的值?哪些寄存器可能会被被调用者破坏?保证为调用者保留哪些内容?如何进行系统调用?进程启动时操作系统为您准备的内存布局是什么?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编语言有多不可移植,/真的/? 的相关文章

  • ARM 调用约定是否允许函数不将 LR 存储到堆栈中?

    正如标题所示 我在理解 ARM 架构的调用约定时遇到问题 特别是 我仍然很难知道当你调用子程序时 LR 寄存器会发生什么 我认为 当您进入子程序时 处理 LR 寄存器的最明显 最安全的方法是将其存储到堆栈中 但该行为没有出现在文档中 因此我
  • 如何在 Windows 8 上安装 sqlite 或 postgresql 以进行 ruby​​ on Rails 设置?

    我一直在尝试安装数据库作为 ruby on Rails 设置的一部分 我正在运行 64 位 Windows 8 基于 x64 的计算机 我的ruby版本是2 1 3p242 rails版本是4 0 0 sqlite3版本是3 8 6 pos
  • PhysicsFS 是否独立于平台?

    我正在考虑在我的游戏引擎项目中使用PhysicsFS 但我想首先确保它完全独立于平台 这是因为我想在完成 Windows 代码后将我的引擎移植到一些相当不起眼的平台 例如 Wii Homebrew 根据开发者提供的官方规格他们的网站 htt
  • 破坏/分解函数的函数

    我以前有过 here https stackoverflow com questions 4920610 c class function in assembly 已经表明 C 函数不容易用汇编表示 现在我有兴趣以一种或另一种方式阅读它们
  • C++ 进程管理 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一个众所周知的 可移植的 好的 C 进程管理库 我发现了一个很有前途的图书馆叫做升压过程 htt
  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • orpd等SSE2指令有什么意义?

    The orpd指令是 压缩双精度浮点值的按位逻辑或 这不是做完 全相同的事情吗por 按位逻辑或 如果是这样 拥有它还有什么意义呢 请记住 SSE1orps https www felixcloutier com x86 orps首先 实
  • 取消的分支与常规分支有何不同?

    特别是对于 SPARC Assembly 取消的分支与常规分支有何不同 我一直认为 当我需要填充分支指令的 nop 延迟槽时 需要取消分支指令 但是 我认为我在这一部分上是不正确的 因为您可以在不取消分支的情况下填充 nop 如果不采用分支
  • 内联 asm 中不支持的指令“mov”将控制寄存器移动到 uint32_t

    我在 C 函数中使用汇编代码 但海湾合作委员会给出unsupported instruction mov 以下代码的错误 uint32 t faulting address asm volatile mov cr2 0 r faulting
  • 为什么不能执行 mov [eax], [ebx] [重复]

    这个问题在这里已经有答案了 我可以做这个 mov eax ebx 和这个 mov eax ebx 甚至这个 mov eax ebx 但不是这个 错误C2415 mov eax ebx 只是wtf 为什么 它与 ptr1 ptr2 相同 为什
  • 在 Python 3.5 64 位上通过 pip 安装 OpenCV

    我尝试安装 OpenCV 但找不到任何合适的 pip 软件包 我决定上网查找有关如何安装它的官方文档 并发现this https opencv python tutroals readthedocs io en latest py tuto
  • 奇怪的 MSC 8.0 错误:“ESP 的值未在函数调用中正确保存...”

    我们最近尝试将一些 Visual Studio 项目分解为库 并且在测试项目中一切似乎都编译和构建得很好 其中一个库项目作为依赖项 然而 尝试运行该应用程序给我们带来了以下令人讨厌的运行时错误消息 运行时检查失败 0 ESP 的值未在函数调
  • 汇编基础知识:输出寄存器值

    我刚刚开始学习汇编语言 我已经陷入了 在屏幕上显示存储在寄存器中的十进制值 的部分 我使用 emu8086 任何帮助将不胜感激 model small Specifies the memory model used for program
  • 近调用/跳转表并不总是在引导加载程序中工作

    一般问题 我一直在开发一个简单的引导加载程序 并在某些环境中偶然发现了一个问题 在这些环境中 此类指令不起作用 mov si call tbl SI Call table pointer call call tbl Call print c
  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 汇编8086监听键盘中断

    我有与此完全相同的问题 边画边听键盘 https stackoverflow com questions 13970325 8086 listen to keyboard while drawing 但第一个答案 接受的答案 只听键盘一次
  • 为什么当大小大于 50 时,该程序花费的时间会呈指数级增长?

    所以我正在为类编写一个 ARM 汇编快速排序方法 我对大部分内容都有了解 除了复杂性没有意义 我们将其与我们制作的另一种冒泡排序方法进行比较 它对于具有 1 个参数和 10 个参数的示例表现更好 然而 我什至无法比较 100 个参数测试 因
  • 用于预乘 ARGB 的 SSE alpha 混合

    我正在尝试编写一个支持 SSE 的 alpha 合成器 这就是我想出的 首先 混合两个 4 像素向量的代码 alpha blend two 128 bit 16 byte SSE vectors containing 4 pre multi
  • directshow.net 视频输入设备过滤器枚举是否已损坏(在较新的环境中)?

    directshow net 示例文件夹 标记为 2010 February 中的每个示例都可以正常编译 并且那些从文件播放视频的示例效果也很好 但是 每个尝试枚举 FilterCategory VideoInputDevices 的示例始
  • 如何知道寄存器是否是“通用寄存器”?

    我试图了解寄存器必须具备什么标准才能被称为 通用寄存器 我相信通用寄存器是一个可以用于任何用途的寄存器 用于计算 将数据移入 移出等 并且是一个没有特殊用途的寄存器 现在我读到了ESP寄存器是通用寄存器 我猜是ESP寄存器可以用于任何事情

随机推荐

  • 角度单元测试失败,但不是本地测试

    升级到 Angular 版本 11 后 Travis CI 上的单元测试现在失败 在本地 它们确实成功了 即使在使用相同的节点 nvm 和 npm 版本进行全新安装之后 所有单元测试的错误都是相同的 Failed fn bind is no
  • Java Regex 从 HTML 锚点 (...) 标记获取文本

    我正在尝试获取某个标签内的文本 所以如果我有 a href http something com Found a a 我希望能够检索Found text 我正在尝试使用正则表达式来做到这一点 我能够做到 如果 a href a a gt 我
  • 显示 w.r.t. 的语义转义字符

    考虑以下示例 gt ghci 外壳 gt writeFile d show d cat d d gt writeFile d d cat d d gt writeFile backslash show cat backslash gt wr
  • Python - 不支持的类型:范围和范围

    我在尝试运行脚本时遇到这个奇怪的错误 代码似乎是正确的 但似乎 python 3 不喜欢这部分 def function x if integer return int x else return x non nil randrange 2
  • 避免内存泄漏/使用 Javascript

    我是 jQuery 的新手 我有点困惑这是否正常或可能导致内存泄漏 代码如下 在某些日期过滤器上为每个新值调用此方法 function preapreTooltip chart var tickLength chart xAxis 0 ti
  • linux uinput:简单的例子?

    我在获取时遇到一些问题both代码的两侧使用uinput在职的 Based on Getting started with uinput the user level input subsystem dead link archived I
  • 如何将PictureBox.Image保存到文件?

    我使用以下命令将 jpgImage 写入 PictureBox Image var jpgImage new Byte jpgImageSize pictureBox Image new Bitmap new MemoryStream jp
  • 如何使用 Spring 通过 OAuth2 保护 MVC 应用程序?

    对不起 我的英语 我有一个可以以通常方式登录的应用程序 Configuration EnableWebSecurity public class LoginSecurityConfig extends WebSecurityConfigur
  • 无法编译android studio项目

    我想在我的项目中添加一个materialdrawer库 当我添加依赖项时 我的 build gradle 看起来像这样 dependencies compile fileTree dir libs include jar compile c
  • Dockerized Rails 5 RC1 应用程序未获取正在开发的控制器和模型的更新

    我在 Mac OS X Docker Machine Docker Compose 上开发 Rails 4 应用程序有相当多的经验 但是 Rails 5 在开发环境中缓存文件的方式发生了一些变化 目前正在使用 RC1 进行测试 启动应用程序
  • 围绕零值自动构建色彩图

    我经常想绘制一张范围从负数到正数的差异图像 问题在于 matlab 的颜色图仅从最小值到最大值缩放 但不关心某些中间值 本例为零 例如 我制作了peaks具有单个像素不同的图像 原来的样子是这样的 所以零值在顶部图像是蓝色的 在底部是绿色的
  • 当 help() 列出方法签名时,斜杠意味着什么?

    什么是 Python 3 4 中的意思help输出为range右括号之前 gt gt gt help range Help on class range in module builtins class range object range
  • 三角形连接区域

    考虑以下形状 灰色区域是外部容器 忽略这一点 白色区域是一个链接 a tag 红色三角形区域是另一个链接 a tag 我使用以下代码为红色区域创建了一个 CSS 三角形 ribbon position absolute right 0 bo
  • 从简单 HTTP 服务器中的每个文件中删除 .html 扩展名

    我想做到这一点 以便当有人访问我的 Go HTTP 服务器上的页面时 他们不会看到 html扩大 例如 当他们访问时https example org test他们会看到的内容https example org test html My c
  • 创建/获取自定义 kubernetes 资源

    我想用 go 创建一个自定义的 kubernetes 资源 该应用程序部署在kubernetes集群中 我想创建例如以下资源 apiVersion configuration konghq com v1 kind KongPlugin me
  • CouchDB从XMLHttpRequest跨域访问?

    目前 Web 应用程序需要提供某种跨域 HTTP 标头来访问其他域上的数据 http openfontlibrary org wiki Web Font linking and Cross Origin Resource Sharing 有
  • Xcode 6.1 上架构 x86_64 的未定义符号

    突然 Xcode 在编译时抛出了这个错误 Undefined symbols for architecture x86 64 OBJC CLASS Format referenced from objc class ref in WOExe
  • 如何在 C 中将无符号字符数组转换为十六进制字符串

    是否可以将无符号字符数组表示为字符串 当我搜索它时 我发现只有 memset 能够做到这一点 但是逐个字符 假设这不是正确的方法 有没有办法进行转换 上下文 我试图存储加密哈希函数的输出 该函数恰好是一个无符号字符数组 eg unsigne
  • Eclipse 中如何自动删除尾随空格?

    这个问题有两个部分 其中之一我已经有了答案 如何自动删除尾随空格从正在编辑的整个文件 gt 答案 使用任意编辑插件 可以设置为在任何保存到文件时执行此操作 如何自动删除尾随空格仅从我改变的线条来看 gt 这我不知道 希望得到任何帮助 我假设
  • 汇编语言有多不可移植,/真的/?

    我知道用汇编语言编写任何内容或将汇编语言添加到任何程序都会损害其可移植性 但是 有多糟糕呢 我的意思是 现在基本上所有 PC 都是 x86 或 x64 对吧 那么 如果我将汇编嵌入到 C 程序中 为什么无论它去了哪里它仍然无法编译 这种不可