问题标签 [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.
c - 多操作数表达式的编译器设计代码生成
我正在为类似 C 的语言编写编译器。
我已经完成了语法和语义检查,并且开始了代码生成阶段。
我必须生成的最终代码必须在 3 地址加载/存储架构中。我可以假设一组无限制的寄存器和 32 M 的内存空间用于堆栈和系统内存。
现在,当我开始生成代码时,我首先假设一个非常大的 int 数组int R[2000000]
来表示寄存器集。当我遇到变量声明(通过解析器/语义分析器)时,我为该特定变量分配一个寄存器。
现在在程序过程中,当我再次遇到这个变量时,我从那个寄存器号中取回它。我将每个变量的寄存器号保存在符号表中。
我现在的问题是:假设,我们有这样的声明——
我已经分别在 R1、R2、R3、R4、R5、R6 中保存了 a、b、c、e、f、h,最终生成的代码将是(假设下一个可用的 regs 从 R7 开始......)
“记住”之前的寄存器和操作的方法是什么?
如果这不是正确的方法,任何人都可以给我一些关于如何实现它的指示吗?
任何建议都会很棒。谢谢
loops - MIPS汇编,寄存器遍历?
您好,在此先感谢您,
我的问题是,是否可以通过寄存器,例如在一个指针 ($t0) 中使用指针并将指针移动到另一个指针 ($t1)。
我真正想做的是在一个循环中读取 8 个整数并将它们存储在 ($s0-$s7)
assembly - 我在哪里可以找到 x86 寄存器名称?
在哪里可以找到 80x86 寄存器全名?我知道 EAX 意味着扩展 AX。
那么,AX 的含义是什么?即 AX 是首字母缩略词吗?
mips - 八个已保存寄存器的功能 (MIPS)
我在我的计算机组织和设计(Patterson & Hennessy)一书中看到了这个声明:
$s0-$s7:在过程调用中必须保留的八个已保存寄存器(如果使用,被调用者保存并恢复它们)
我不明白“保留在过程调用中”是什么意思。
word - ISA 的字长是如何在硬件和软件中实现的?
我了解到字长是 ISA 的一项功能,必须在硬件和软件中都实现。我对答案只有一个模糊的想法。我需要更正或确认。字长是否成为 CPU 中通用寄存器的大小?对于编译器,字长是否变成了“int”的大小(只是普通的 int,不是长或短)?
stack - 关于堆栈指针的简单汇编程序问题
我目前正在学习汇编程序并在实模式下编写一些程序。我在堆栈理解方面遇到了一些麻烦。如果 SS 不为零且 SP = 0,是否可以将值推入堆栈。(如果可能,那么 cpu 在推入后如何更改寄存器的值)
gcc - 修改 gcc 以容纳更多寄存器
我已经使用 PTLSIM 构建了一个处理器,并想对其进行测试,以用于教育目的。处理器的主要特点是它有 100 多个可用于代码的寄存器,这只是概念验证。但为了适应代码,我想使用 gcc 编译一个基准,但我想告诉 gcc 我有 100 个寄存器。
那么是否有任何编译器,即使除了 gcc 允许我修改寄存器?如果 gcc 有我该如何修改它?
arrays - 将数组内容复制到程序集中的另一个数组
我正在寻找将数组的一些元素复制到 Assembly 中的另一个元素。两个数组都通过存储在寄存器中的指针访问。因此, edx 将指向一个数组,而 eax 将指向另一个数组。基本上, edx 指向从文本文件中读取的字符数组,我希望 eax 只包含 32 个字符。这是我正在尝试做的事情:
使用 NASM 的 I386 组装
同样,我希望将前八个字符之后的 32 个字符放在第二个数组中。问题是我对如何做到这一点感到困惑。非常感谢任何帮助。
assembly - 为什么英特尔不提供其 CPU 寄存器的高阶部分?
当在汇编中编程并进行某种字符串操作时,我使用al
,ah
有时还使用其他来保存字符,因为这使我可以在寄存器中保存更多数据。我认为这是一个非常方便的功能,但英特尔的工程师似乎不同意我的看法,因为他们没有使寄存器的两个高位字节可访问(或者我错了吗?)。我不明白为什么。我想了一会儿,我的猜测是:
- 它们会使 CPU 过于复杂
- 他们将毫无用处
- 也许以上两者
我想出了第二个,因为我从未见过编译程序(比如 gcc)使用al
或bh
其中任何一个。
gdb - 如何在 GDB 中打印寄存器值?
如何打印和的%eax
值%ebp
?