问题标签 [cpu-registers]

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 投票
5 回答
2320 浏览

c++ - cout 可以以某种方式改变变量吗?

所以我有一个看起来像这样的函数:

在某些时候,这个函数溢出并返回一个非常大的负值。为了尝试准确追踪发生这种情况的位置,我添加了一条 cout 语句,使函数看起来像这样:

它奏效了!当然,我通过使用 double 完全解决了这个问题。但是我很好奇为什么当我计算它时该功能可以正常工作。这是典型的,还是我在其他地方遗漏了一个错误?

(如果有帮助的话,存储在浮点数中的值只是一个整数值,并不是特别大的值。我只是将它放在浮点数中以避免强制转换。)

0 投票
5 回答
6698 浏览

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

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

代码是 x86,32 位:

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

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

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

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

0 投票
3 回答
47935 浏览

assembly - 为什么没有包含 EAX 高字节的寄存器?

%AX = (%AH + %AL)

那么为什么不%EAX = (%SOME_REGISTER + %AX)注册一些%SOME_REGISTER呢?

0 投票
2 回答
597 浏览

.net - 你能在 VS2008 IDE 中修改 CPU 寄存器吗?

只是想知道是否有一种方法可以从 Visual Studio IDE 中编辑 CPU 寄存器(即 EAX、EBX、ECX 等)或标志(OV、UP、erc)。我知道您可以使用“寄存器”窗格 (ctrl-shift-G)查看它们,并且可以使用 TAB 或 ENTER 循环浏览它们,但我似乎无法在调试时更改它们中的任何一个(是的,程序执行是停止:))。

我真的没有强烈的需要这样做,只是:我可以看到程序集......我曾经能够做到这一点(VC ++ 6)......为什么我现在不能,善良'一个东西!

谢谢!

0 投票
5 回答
1646 浏览

c++ - 在主要 C/C++ 编译器生成的代码中注册分配规则

我记得以前的一些规则(32 位之前的英特尔处理器),当时(至少对我而言)非常频繁地必须分析 C/C++ 编译器(在我的情况下,当时是 Borland/Turbo)生成的汇编输出找到性能瓶颈,并安全地将汇编程序与 C/C++ 代码混合。诸如将 SI 寄存器用于this指针、将 AX 用于返回值、在汇编例程返回时应保留哪些寄存器等。

现在我想知道是否有更流行的 C/C++ 编译器(Visual C++、GCC、Intel ...)和处理器(Intel、ARM、...)的参考,如果没有,在哪里可以找到要创建的部分一。想法?

0 投票
1 回答
1372 浏览

windows - 为什么 Windows 64 选择要求保存/恢复 xmm6 和 xmm7?

为什么 Windows 64 选择要求保存/恢复 xmm6 和 xmm7?

在 Windows 32 中,您可以编写破坏 xmm0...xmm7 的汇编程序。但是如果你使用相同的汇编代码并在 Windows 64 中运行它,它通常会导致应用程序错误,因为 VS2007 将双精度值存储在 xmm6 和 xmm7 中。

在我看来,既然 X64 有 16 个 xmm 寄存器 xmm0...xmm15(而 X32 只有 8 个 xmm 寄存器),那么微软本可以选择允许用户破坏 xmm0..xmm7(这样他们就可以重用 Win32 中的汇编程序)无需考虑)但要求用户保存/恢复 xmm8...xmm15。

那么,为了满足我自己的好奇,为什么 Windows 64 选择要求保存/恢复 xmm6 和 xmm7?

0 投票
6 回答
31198 浏览

c - 什么是 C 中寄存器变量使用的好例子?

我正在阅读 K&R 并来到关于寄存器变量的小部分,并且想知道这里的人们是否有一些很好的实践示例。

从 K&R 的第 4.7 节:

寄存器声明看起来像
register int x;
注册字符 c;

需要明确的是,我只是希望看到一些很酷的代码示例。我(很确定我)理解主题,所以不需要输入详细的解释(除非你愿意)。

0 投票
1 回答
451 浏览

visual-studio - 调试托管代码:查看返回值

在 Win32 上,对于非托管代码,返回值通常存储在 EAX 寄存器中。当程序不将返回值保存在变量中时,这很有用。这可以在 Visual Studio 调试器中轻松看到。

托管代码是否有等价物?

0 投票
3 回答
3840 浏览

optimization - 我可以在 g++ 中控制寄存器分配吗?

我对 C++ 进行了高度优化,即使在远离热点的地方进行微小的更改,也可以将性能提高 20%。经过更深入的调查,结果证明(可能)在热点中使用的寄存器略有不同。我可以使用 always_inline 属性控制内联,但我可以控制寄存器分配吗?

0 投票
6 回答
6608 浏览

java - Java相当于寄存器int?

在 C 中,我可以为变量分配寄存器,例如:

我知道 Java 是一种解释性语言,并且与 CPU 有许多抽象。

是否有任何机制可用于请求(如果架构不允许,那又怎样)我的变量保留在寄存器中而不是移动到缓存或主内存?

我不认为有什么办法,但我之前一直很惊喜。

谢谢,