MIPS和ARM差异

MIPS和ARM差异,arm,mips,computer-architecture,instructions,Arm,Mips,Computer Architecture,Instructions,我刚开始学习架构,我对MIPS和ARM架构有一些混淆 我知道MIPS主要有两种指令格式:I和R(以及J)。我读过这些表示格式,rs,rt,操作码和相关的东西。我还看了COA的Patterson书(第四版),该书关注ARM ISA。该版本中的指令表示形式不同。这些差异是由于不同的体系结构造成的吗?ARM汇编代码与我在MIPS ISA中使用的书略有不同 帕特森的第四版说 LDR r5,[r3,#32] STR r1,[r4,#48] 而我读到的另一个MIPS说 lw r5,[r3,#32] sw

我刚开始学习架构,我对MIPS和ARM架构有一些混淆

我知道MIPS主要有两种指令格式:I和R(以及J)。我读过这些表示格式,rs,rt,操作码和相关的东西。我还看了COA的Patterson书(第四版),该书关注ARM ISA。该版本中的指令表示形式不同。这些差异是由于不同的体系结构造成的吗?ARM汇编代码与我在MIPS ISA中使用的书略有不同

帕特森的第四版说

LDR r5,[r3,#32]
STR r1,[r4,#48]
而我读到的另一个MIPS说

lw r5,[r3,#32]
sw r1,[r4,#48]

这种差异是因为他们遵循的ISA,还是因为他们是同一ISA的两个不同版本?您能解释一下MIPS和ARM之间的主要区别吗?

是的,lw和sw是MIPS的加载和存储字。ldr和str为arm加载和存储一个单词。对于x86,您使用mov

Mips的语法通常使用$0-$31或更恶心的$v0,等等。Arm和许多其他人使用r和数字R0RN(一些人试图用别名来丑化这一点)

ARM和MIPS是竞争对手,它们不是同一家公司,也不是相同的体系结构。MIPS机器编码属于您提到的少数几类,ARM有很多,无论原因是好是坏,它们都在MIPS或ARM文档中有很好的文档记录

因此,对于指令集的发明者所决定的指令编码,不管他们选择什么原因,好的,坏的,或者其他,他们都可以做他们想做的事情


就汇编语言语法而言,isa inventor通常会创建一个与指令集文档一起使用的语法,并且他们通常会创建或雇佣人员来制作汇编程序。但是汇编程序(采用汇编语言并从中生成机器代码的软件)的作者最终决定了汇编语言的语法,他们不必遵守isa文档中的语法。任何两个单独创建的汇编器都没有理由使用相同的语法。例如,随着时间的推移,十六进制数有一个美元符号$12或尾随的h 12h,但现在您经常看到支持或首选的C语法0x12。有时,您会将间接加上偏移量视为12(r3)或[r3,#12]或描述完全相同的事物

没有这样的MIPS汇编语法,也没有r5或r1。您只有$0到$32或注册名称,如$s0、$t1、$a0、$v0、$k0。。。您需要编写类似于
lw$5,32($t3)
sw$a0,48($t4)
MIPS和ARM是不同的体系结构和不同的isa。它们不是另一个的变体,所以称“变化”是不恰当的。所以lw、sw表示MIPS和ldr的加载和存储,str表示ARM相同?可能值得注意的是,大多数ISA将包含一些非常相似的基本指令,这些指令在asm中可能看起来非常相似。就像ldr/lw和str/sw一样,所有的算术运算都是类似的,比如add、and、or等(ARM和MIPS似乎都使用3寄存器/值方法,不像x86)。这背后的原因是,这些操作在某种程度上是硬件工作原理的基础。当您了解到一些ISA时,您所了解到的是,它们既相似又不同,加载、存储、添加或,通常还有其他基本操作,但asm的细微差别和语法差异很大……非常正确,语法完全依赖于汇编程序(例如,AT&T与Intel针对x86的语法);但是这些结构都非常相似,只是通读一下。虽然这些细微差别也可以很有趣,比如MIPS中的分支延迟时隙和ARM.yep的典型执行,这只是其中的典型例子,我只是希望大家理解汇编语言不是标准的,比如Python或C++或java等。在某种程度上,它完全是由程序的作者发明的,尽管第n个工具的作者通常明智地遵循现有工具的兼容性模式,以便人们可以移动他们的代码,但这并不总是发生。