问题标签 [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 投票
4 回答
2416 浏览

c - 多操作数表达式的编译器设计代码生成

我正在为类似 C 的语言编写编译器。

我已经完成了语法和语义检查,并且开始了代码生成阶段。

我必须生成的最终代码必须在 3 地址加载/存储架构中。我可以假设一组无限制的寄存器和 32 M 的内存空间用于堆栈和系统内存。

现在,当我开始生成代码时,我首先假设一个非常大的 int 数组int R[2000000]来表示寄存器集。当我遇到变量声明(通过解析器/语义分析器)时,我为该特定变量分配一个寄存器。

现在在程序过程中,当我再次遇到这个变量时,我从那个寄存器号中取回它。我将每个变量的寄存器号保存在符号表中。

我现在的问题是:假设,我们有这样的声明——

我已经分别在 R1、R2、R3、R4、R5、R6 中保存了 a、b、c、e、f、h,最终生成的代码将是(假设下一个可用的 regs 从 R7 开始......)

“记住”之前的寄存器和操作的方法是什么?

如果这不是正确的方法,任何人都可以给我一些关于如何实现它的指示吗?

任何建议都会很棒。谢谢

0 投票
3 回答
1754 浏览

loops - MIPS汇编,寄存器遍历?

您好,在此先感谢您,

我的问题是,是否可以通过寄存器,例如在一个指针 ($t0) 中使用指针并将指针移动到另一个指针 ($t1)。

我真正想做的是在一个循环中读取 8 个整数并将它们存储在 ($s0-$s7)

0 投票
3 回答
11380 浏览

assembly - 我在哪里可以找到 x86 寄存器名称?

在哪里可以找到 80x86 寄存器全名?我知道 EAX 意味着扩展 AX。

那么,AX 的含义是什么?即 AX 是首字母缩略词吗?

0 投票
3 回答
4228 浏览

mips - 八个已保存寄存器的功能 (MIPS)

我在我的计算机组织和设计(Patterson & Hennessy)一书中看到了这个声明:

$s0-$s7:在过程调用中必须保留的八个已保存寄存器(如果使用,被调用者保存并恢复它们)

我不明白“保留在过程调用中”是什么意思。

0 投票
3 回答
744 浏览

word - ISA 的字长是如何在硬件和软件中实现的?

我了解到字长是 ISA 的一项功能,必须在硬件和软件中都实现。我对答案只有一个模糊的想法。我需要更正或确认。字长是否成为 CPU 中通用寄存器的大小?对于编译器,字长是否变成了“int”的大小(只是普通的 int,不是长或短)?

0 投票
1 回答
136 浏览

stack - 关于堆栈指针的简单汇编程序问题

我目前正在学习汇编程序并在实模式下编写一些程序。我在堆栈理解方面遇到了一些麻烦。如果 SS 不为零且 SP = 0,是否可以将值推入堆栈。(如果可能,那么 cpu 在推入后如何更改寄存器的值)

0 投票
1 回答
572 浏览

gcc - 修改 gcc 以容纳更多寄存器

我已经使用 PTLSIM 构建了一个处理器,并想对其进行测试,以用于教育目的。处理器的主要特点是它有 100 多个可用于代码的寄存器,这只是概念验证。但为了适应代码,我想使用 gcc 编译一个基准,但我想告诉 gcc 我有 100 个寄存器。

那么是否有任何编译器,即使除了 gcc 允许我修改寄存器?如果 gcc 有我该如何修改它?

0 投票
3 回答
10546 浏览

arrays - 将数组内容复制到程序集中的另一个数组

我正在寻找将数组的一些元素复制到 Assembly 中的另一个元素。两个数组都通过存储在寄存器中的指针访问。因此, edx 将指向一个数组,而 eax 将指向另一个数组。基本上, edx 指向从文本文件中读取的字符数组,我希望 eax 只包含 32 个字符。这是我正在尝试做的事情:

使用 NASM 的 I386 组装

同样,我希望将前八个字符之后的 32 个字符放在第二个数组中。问题是我对如何做到这一点感到困惑。非常感谢任何帮助。

0 投票
5 回答
711 浏览

assembly - 为什么英特尔不提供其 CPU 寄存器的高阶部分?

当在汇编中编程并进行某种字符串操作时,我使用alah有时还使用其他来保存字符,因为这使我可以在寄存器中保存更多数据。我认为这是一个非常方便的功能,但英特尔的工程师似乎不同意我的看法,因为他们没有使寄存器的两个高位字节可访问(或者我错了吗?)。我不明白为什么。我想了一会儿,我的猜测是:

  1. 它们会使 CPU 过于复杂
  2. 他们将毫无用处
  3. 也许以上两者

我想出了第二个,因为我从未见过编译程序(比如 gcc)使用albh其中任何一个。

0 投票
7 回答
305904 浏览

gdb - 如何在 GDB 中打印寄存器值?

如何打印和的%eax%ebp