问题标签 [x86]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1777 浏览

assembly - Grub 并进入实模式(低级汇编语言编程)

我一直在开发一个玩具操作系统,并且一直在使用 grub 作为我的引导加载程序。最近在尝试使用 VGA 时,我发现我无法使用硬件中断。我发现这是因为我被 grub 置于保护模式。

有谁知道如何在不必摆脱 grub 的情况下回到实模式?

0 投票
2 回答
8684 浏览

visual-studio - 如何禁用程序断点/断言?

我正在使用 Visual Studio 开发本机应用程序,我在使用 __asm int 3 或 __debugbreak 放置的代码中有一个程序断点(断言)。有时当我点击它时,我想禁用它,以便同一调试会话中的连续点击不再闯入调试器。我怎样才能做到这一点?

0 投票
7 回答
4614 浏览

optimization - 将 3D 数学转换为 SSE 或其他 SIMD 的速度提高了多少?

我在我的应用程序中广泛使用 3D 数学。通过将我的向量/矩阵库转换为 SSE、AltiVec 或类似的 SIMD 代码,我可以实现多少加速?

0 投票
5 回答
6698 浏览

assembly - GCC 内联汇编器,混合寄存器大小 (x86)

有谁知道我怎样才能摆脱以下汇编程序警告?

代码是 x86,32 位:

如果我编译它,我会收到以下(非常有效的)警告:

我正在寻找的是一种告诉编译器/汇编器我想要访问 %0 的低 16 位子寄存器的方法。访问字节子寄存器(在本例中为 AL 和 AH)也很高兴知道。

我已经选择了“q”修饰符,所以编译器被迫使用 EAX、EBX、ECX 或 EDX。我已经确保编译器必须选择一个具有子寄存器的寄存器。

我知道我可以强制 asm 代码使用特定的寄存器(及其子寄存器),但我想将寄存器分配工作留给编译器。

0 投票
2 回答
2438 浏览

gcc - 使用内部函数时如何让 GCC 使用两个以上的 SIMD 寄存器?

我正在编写一些代码并尝试使用 SIMD 内在函数 SSE2/3 来加速它。我的代码具有这样的性质,以至于我需要将一些数据加载到 XMM 寄存器中并对其进行多次操作。当我查看生成的汇编代码时,似乎 GCC 不断将数据刷新回内存,以便重新加载 XMM0 和 XMM1 中的其他内容。我正在为 x86-64 编译,所以我有 15 个寄存器。为什么 GCC 只使用两个,我该怎么做才能让它使用更多?有什么方法可以“固定”寄存器中的某个值吗?我在变量定义中添加了“register”关键字,但生成的汇编代码是相同的。

0 投票
2 回答
6275 浏览

assembly - 为什么我不能更改段寄存器的值?(MASM)

我决定自学汇编语言。

我意识到如果我尝试更改任何段寄存器的值,我的程序将无法编译。

我发现的每一篇文章都说我确实可以改变至少 4 个段寄存器的值,那么给出了什么?

我真的只对为什么在这一点上感兴趣,我没有任何真正的目的来更改这些地址。

0 投票
3 回答
62197 浏览

.net - 从 64 位进程调用 32 位代码

我有一个我们正在尝试从 32 位迁移到 64 位的应用程序。它是 .NET,使用 x64 标志编译。但是,我们有大量用 FORTRAN 90 编写的 DLL,为 32 位编译。FORTRAN DLL 中的函数相当简单:你把数据放进去,你把数据拉出来;没有任何状态。我们也不会花很多时间在那里,总共可能 3%,但它执行的计算逻辑是无价的。

我可以以某种方式从 64 位代码调用 32 位 DLL 吗?MSDN 建议我不能,期间。我做了一些简单的黑客攻击并验证了这一点。一切都会抛出一个无效的入口点异常。到目前为止,我发现的唯一可能的解决方案是为所有 32 位 DLL 函数创建 COM+ 包装器并从 64 位进程调用 COM。这似乎很让人头疼。我们也可以在 WoW 仿真中运行该过程,但内存上限不会增加,上限约为 1.6gb。

有没有其他方法可以从 64 位 CLR 进程调用 32 位 DLL?

0 投票
13 回答
9007 浏览

operating-system - 为 x86 架构开发操作系统

我正计划为 x86 架构开发一个操作系统。

  • 我有哪些编程语言选项?
  • 有哪些类型的编译器可用,最好是在 Windows 环境中?
  • 有什么好的资源可以帮助我更多地了解操作系统开发吗?
  • 在虚拟机或物理硬件上测试我的操作系统更好吗?

有什么建议么?

0 投票
8 回答
7374 浏览

c# - .NET 的汇编程序库,将运行时变量字符串组装成机器代码以进行注入

有没有可以通过 C# 调用的 x86 汇编器之类的东西?我希望能够将 x86 指令作为字符串传递并返回一个字节数组。如果一个不存在,我如何制作自己的?

明确一点——我不想从 C#调用汇编代码——我只想能够从指令中汇编代码并在字节数组中获取机器代码。

我将注入此代码(将即时生成)以完全注入另一个进程。

0 投票
19 回答
70673 浏览

c++ - 奇怪的 MSC 8.0 错误:“ESP 的值未在函数调用中正确保存......”

我们最近尝试将我们的一些 Visual Studio 项目分解为库,并且在一个测试项目中,一切似乎都可以很好地编译和构建,其中一个库项目作为依赖项。但是,尝试运行该应用程序给了我们以下令人讨厌的运行时错误消息:

运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是调用使用不同调用约定声明的函数指针的结果。

我们甚至从未为我们的函数指定调用约定(__cdecl 等),将所有编译器开关保留为默认值。我检查了项目设置对于跨库和测试项目的调用约定是一致的。

更新:我们的一位开发人员将“Basic Runtime Checks”项目设置从“Both (/RTC1, equiv. to /RTCsu)”更改为“Default”,运行时消失了,程序显然运行正常。我完全不相信这一点。这是一个适当的解决方案,还是一个危险的黑客攻击?