Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86_64 CPU寄存器RAX、EAX、AX、AH、AL_Assembly_X86 64_Cpu Registers - Fatal编程技术网

Assembly x86_64 CPU寄存器RAX、EAX、AX、AH、AL

Assembly x86_64 CPU寄存器RAX、EAX、AX、AH、AL,assembly,x86-64,cpu-registers,Assembly,X86 64,Cpu Registers,64位通用寄存器,例如:RAX可通过EAX(低32位)、AX(低16位)、AH、AL(b位)访问。我确实有以下问题 这些(EAX/AX/AH/AL)是真实的物理寄存器还是访问RAX的一部分的映射/符号 这些映射寄存器的用途是什么? 我理解,如果我们更改EAX/AX/AH/AL,这反过来会清除RAX并产生一个新值。 那么为什么要使用这些映射寄存器,在什么情况下它是有用的呢 我的理解是基于从16位到32位的转换,因此我无法具体说明64位的内容,但我的理解是,al/ah的微处理器电路只影响物理寄存器电

64位通用寄存器,例如:RAX可通过EAX(低32位)、AX(低16位)、AH、AL(b位)访问。我确实有以下问题

  • 这些(EAX/AX/AH/AL)是真实的物理寄存器还是访问RAX的一部分的映射/符号

  • 这些映射寄存器的用途是什么? 我理解,如果我们更改EAX/AX/AH/AL,这反过来会清除RAX并产生一个新值。 那么为什么要使用这些映射寄存器,在什么情况下它是有用的呢


  • 我的理解是基于从16位到32位的转换,因此我无法具体说明64位的内容,但我的理解是,al/ah的微处理器电路只影响物理寄存器电路中适当的8位,ax同样在处理器上硬连线,只影响较低的16位。我假设64位体系结构在同一原则下工作,但老实说,我没有对64位系统做过太多研究

    寄存器当然是一堆晶体管,以这样的方式排列,即有8/16/32/64行表示构成寄存器中值的位。读/写AL时,直接读/写AX寄存器下8行和EAX的下8行,可能是RAX寄存器下8行。像明智的AX对EAX,很可能是EAX对RAX

    90年代引入虚拟化技术,允许在使用v86模式的32位保护模式下运行的intel机器上进行16位处理,v86模式使用映射技术,而不是在实模式和保护模式之间切换,因为切换会导致严重的处理惩罚和多任务操作系统无法同时有效运行32位程序和16位程序

    警告-我对64位机器的写入不熟悉。

    1)它们是RAX的映射


    2) 它们的存在主要是为了向后兼容较短的字长体系结构。它们偶尔对比特旋转RAX有用。

    至于(1)这是一个实现细节。根据CPU和程序的状态,较低的部分可以保存在单独的寄存器中,也可以是同一寄存器的一部分。程序员无法观察到这种差异。(2) 它是x86体系结构遗留下来的产物,最初来自8086。不,只写入EAX零扩展到RAX。对16位和8位部分寄存器的写入合并到旧值中,根据微体系结构创建可能的错误依赖项或其他效果。RAX不是一个单一的物理寄存器;x86-64 CPU进行注册重命名(除了我认为有一个支持64位的有序Atom)。RAX是一个单一的体系结构寄存器,但是子寄存器是在内部实现的,如果您在写入AL后读取RAX,您必须看到更改。写入EAX隐式地将零扩展到RAX,避免了写入8位或16位寄存器时产生的错误依赖性或其他部分寄存器复杂性。/。此外,vm86模式和模式切换通常与使用8/16/32位操作数大小正交
    movsxd rcx,ah
    在64位模式下有效。非主题:您不需要在上删除答案。它有几个小错误,没有提到MIPS寻址模式的一般情况,但我认为这是最有帮助的。2)不完全正确。如果要存储寄存器的低位8位或16位,请
    mov[mem],ax
    。当像MIPS或ARM这样的ISA具有存储16位值的
    sh
    sth
    指令时,x86对相同的
    mov
    操作码使用不同的操作数大小。(或不同的操作码,但8位的助记符相同。)8位或16位操作数大小也是实现C
    uint8\t
    在操作之间自由截断为8位的方便方法。