我正在做一些涉及MIPS
程序集的工作,我一直遇到这四个浮点加载/存储伪指令:l.s
,l.d
,s.s
, s.d
。我在网上找到了一些文档,并发现有四条“实际”说明似乎做同样的事情:lwc1
,ldc1
,swc1
和sdc1
。< / p>
我唯一的问题是,有什么区别?据我所知,两组指令完全相同。这些伪可能只是因为它们更易于阅读而存在吗?
提前感谢任何见解。
答案 0 :(得分:8)
我唯一的问题是,有什么区别?据我所知,两组指令完全相同。
是的,你是对的。可能出现的唯一区别是伪指令被转换为多个“真实”指令。
伪也可能因为它们更容易阅读而存在吗?
再次,是的。这是为什么它们存在。他们给出了一个更具表现力的指令集的幻觉。引用Computer organization and design / Patterson & Hennessy:
...汇编程序还可以处理机器语言指令的常见变体,就好像它们本身就是指令一样。硬件不需要实现这些指令;然而,它们在组装语言中的出现简化了翻译和编程。 ...
根据你的例子,它更“清楚”地说:
l.s $f2, 24(t1) # Load Single contained in 24(t1) to $f2
大于
lwc1 $f2, 24(t1) # Load Word into Coprocessor 1 from 24(t1) to $f2
以及你可以更好地理解:
move $7, $18 # move contents of $18 to $7
大于
add $7, $18, $0
对我来说,只需要助记符来帮助我们获得更好的清晰代码。
答案 1 :(得分:2)
实际上我认为,
LWC1 is Load Word to Co-processor 1
LDC1 is Load Double Word to Co-processor 1
等...
猜猜是什么,我点击专利页面试图记住这些。
US Patent 5555384 - 通过将一条冲突的指令延迟到与第三条非冲突指令相同的流水线阶段来重新安排冲突的已发布指令
FPC 20实施了两种类型的加载指令:
LWC1(加载字协处理器1,如图4所示)和
LDC1(加载双字协处理器1,如图8所示)。LWC1将一个32位字从存储器子系统加载到FPC通用寄存器中 LDC1将一个64位双字从存储器子系统加载到FPC通用寄存器中。
证实了这一点 (顺便说一下:除非你这样做,否则不要费心去搜索这里提到的数字 有权访问该网站。)