如何将大数据类型(双精度/浮点型)加载到用于算术运算的寄存器中? 寄存器可以容纳一个字大小的数据吗? 如果只能添加2个寄存器以将结果加载到第三个寄存器,那么数据类型大于单个寄存器会发生什么?

===============>>#1 票数:0

例如,在SPARCv8 ABI中,将64位双精度加载到两个32位寄存器中,并且在两个寄存器上进行FP操作的时间相同。 fsqrtd %f10, %f8采用%f10:%f11中的值,并将根结果写入%f8:%f9。 在x86_32上,执行32x32-> 64乘法时可以观察到类似的结果,其结果将在edx:eax中(等等)。 实际上与286模式下的16x16-> 32乘法相同,结果进入dx:ax。

===============>>#2 票数:0

首先,CPU通常具有分别用于整数和浮点数的寄存器文件。

在80年代,一些CPU尝试使用统一的寄存器空间,但发现这是带宽瓶颈。 由于浮点运算几乎总是多周期的,并且总是混有大量基于整数的流控制,因此同时访问单独的寄存器空间会更有效。

其次,对于某些体系结构,浮点寄存器文件都是80位扩展浮点数(C语言中为“ long double”)。 双精度和浮点型在加载时会扩展为该格式,扩展格式在存储时会四舍五入。

对于整数运算,这取决于体系结构。 由于64位是x86的后代,因此它将8位(AL和AH),16位(AX),32位(EAX)和64位(RAX)覆盖在同一物理寄存器上,每个都可以通过不同的寻址模式进行访问。 另一方面,某些RISC架构将寄存器中的数字视为64位以进行MOST操作,只关心加载和存储中的字长。

  ask by Carbonizer translate from so

未解决问题?本站智能推荐:

1回复

为什么x86_64 CPU上的通用寄存器没有融合乘法加法?

在Intel和AMD x86_64处理器上,SIMD矢量化寄存器具有特定的融合乘法 - 加法功能,但通用(标量,整数)寄存器不具备 - 你基本上需要乘法,然后加法(除非你能把东西放到一个lea )。 这是为什么? 我的意思是,它是否无用,以至于不值得开销?
2回复

15字节指令如何从存储器转移到CPU?

假设我们使用的是x86-64机器,这意味着其通用寄存器的长度为64位,其数据总线一次可以处理64位,其ALU可以处理最多64位(对吗?)。 像这样的简单指令 通过64位数据总线将32位数字移入CPU寄存器。 我已阅读以下内容: 我的问题是,如果数据总线最大为64位,这
1回复

在执行指令和读/写数据时,x86如何处理字节和字寻址?

因此,我正在学习x86的工作原理,并遇到人们说x86是字节可寻址的,但可以读取字,双字等。处理器如何确定何时使用哪种方法? 例如,用于访问下一条指令,以及当用户想要对存储器进行读/写时,使用哪种寻址模式?
2回复

MIPS和ARM数据路径之间的区别

我刚刚在课堂上学习了MIPS架构。 我正在阅读其他指令集架构(目前是ARM ),并发现ARM和MIPS之间存在一些差异。 两者都有不同的指令格式,寄存器组等。 ARM与MIPS的数据路径有什么不同吗? 因为数据路径涉及获取,解码和执行指令,并且它对于所有指令集架构必须是相同的。
1回复

使用加法和一组受限指令相乘

我正在用Logisim构建CPU电路。 我的CPU只有2个通用寄存器和16字节RAM。 我已经对以下指令集进行了编码(Rxy表示两个寄存器之一) 我以为我可以减少第二个加数,直到它达到0,然后在每个步骤中,将第一个加数添加到自身。 但是我不确定我的指令是否可以允许该程序...
1回复

MIPS左载入字(LWL)和右载入字(LWR)指令有什么作用?

最近,当我遇到两个我在其他指令集中没有看到的异常指令时,我一直在阅读MIPS指令集。 我环顾四周,以找到对这些指令的确切作用的恰当解释,但是我能弄清的是,它们在某种程度上与未对齐的内存访问相关。 例如, 维基百科说 : MIPS I要求所有内存访问都必须与其自然字边界对齐,
1回复

在8位字段上比在32位字段上使用CMPXCHG指令在任何方面是否更糟?

我想问一下,在8位存储字段上使用CMPXCHG指令是否比在32位字段上使用CMPXCHG指令在任何方面都要差。 我正在使用C11 stdatomic.h来实现一些同步方法。
1回复

x86函数调用类型

我是x86的新手。 我的问题是关于函数调用的。 据我所知,有三种函数调用类型:短调用(0xe8),远调用(0x9a)和近调用(0x ??)。 有些呼叫短呼叫是相对呼叫(ip + = arg / cs = inv),而远距离呼叫是绝对呼叫(ip = arg / cs = arg),但是近距离
1回复

LSL,LSR,ASR和ROR是什么类型的ARMv8指令?

我正在学习Armv8的基础知识,并且对转换操作属于哪一类感到困惑。 数据处理说明包括: 与,EOR,SUB,RSB,ADD,ADC,SBC,RSC,TST,TEQ,CMP,CMN,ORR,MOV,BIC和MVN。 分支流程: B,BL 转移过程: STR,STRB,LDR和LDRB
1回复

MIPS:当我们已经有加载字时,为什么我们需要加载字节?

在RISC MIPS指令集中,我们有加载字节( lbu ),加载半字( lhu )和加载字( lw )指令。 在我看来, lbu和lhu可以做的一切都可以用lw实现。 那么为什么MIPS设计师会介绍lbu和lhu ? 在什么情况下(最好是非模糊的)它们可能有用吗? 也许lw需要比lb