Questions tagged «cpu-registers»


3
为什么32位寄存器上的x86-64指令将整个64位寄存器的高位归零?
在x86-64英特尔手册之旅中,我阅读了 也许最令人惊讶的事实是诸如MOV EAX, EBX自动将RAX寄存器的高32位清零的指令。 同一来源引用的英特尔文档(手动基本体系结构中的3.4.1.1通用寄存器在64位模式下)告诉我们: 64位操作数在目标通用寄存器中生成64位结果。 32位操作数生成32位结果,并将其零扩展到目标通用寄存器中的64位结果。 8位和16位操作数生成8位或16位结果。目的通用寄存器的高56位或高48位(分别)不会被该操作修改。如果8位或16位运算的结果打算用于64位地址计算,则将寄存器显式符号扩展为完整的64位。 在x86-32和x86-64汇编中,16位指令例如 mov ax, bx 不要显示eax的高位字为零的这种“奇怪”行为。 因此:引入此行为的原因是什么?乍一看似乎是不合逻辑的(但是原因可能是我已经习惯了x86-32程序的怪癖)。

5
“ FS” /“ GS”寄存器的用途是什么?
因此,我知道以下寄存器及其用途是什么: CS =代码段(用于IP) DS =数据段(用于MOV) ES =目标段(用于MOVS等) SS =堆栈段(用于SP) 但是,以下寄存器打算用于什么? FS =“文件段”? GS = ??? 注意:我不是在问任何特定的操作系统,而是在问它们打算由CPU使用什么(如果有的话)。

3
为什么JVM基于堆栈,而Dalvik VM基于寄存器?
我很好奇,为什么Sun决定使JVM基于堆栈,而Google决定使DalvikVM基于寄存器? 我想JVM不能真正假设目标平台上有一定数量的寄存器可用,因为它应该独立于平台。因此,它只是将寄存器分配等推迟到JIT编译器。(如我错了请纠正我。) 所以Android的人想:“嘿,那效率低下,让我们马上去注册虚拟机吧……”?但是,等等,有多个不同的android设备,Dalvik瞄准了多少个寄存器?Dalvik操作码是否为一定数量的寄存器进行了硬编码? 市场上当前所有的Android设备是否都具有相同数量的寄存器?还是在dex加载期间执行了寄存器重新分配?所有这些如何融合在一起?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.