问题描述
我目前正在学习计算机组织方面的课程,并且一直在研究 MIPS-32 架构。我注意到我们使用的这本书以小写形式列出了操作码,而教授则以大写形式列出了操作码。我在不同的网站上查了一下,发现有些网站的操作码全部为大写,而其他网站的操作码全部为小写。我在 Stack Overflow 上寻找了类似的问题,但没有找到。
例如,要添加,我们可以这样:
ADD $s2,$s1,$s0
但是,其他网站和本书将其描述为:
add $s2,$s0
谁能澄清哪种操作码格式更传统?我还没有构建汇编语言程序,所以我不确定操作码是否区分大小写;是吗?
解决方法
那些不是 opcodes(二进制机器码的一部分),它们只是 asm mnemonics,汇编器的文本输入。 (请注意,“操作码”有时用于表示整个二进制指令,包括对操作数进行编码的部分,但这很愚蠢,因为我们已经有了“指令”这个词。)
大多数汇编程序(以及所有 MIPS 汇编程序 AFAIK)对助记符和寄存器名称不区分大小写。
一种很好的现代风格约定是使用小写字母表示真正的助记符,大写字母表示宏。
所有大写字母(包括操作数)曾经很常见,特别是对于 8 位 / 16 位 CPU 和微控制器(甚至是较旧的早期计算机),但肯定被某些人用于其他系统,包括更现代的
在文档中,您想自由地将指令名称与文本混合并谈论关于指令,通常在所有大写字母中编写助记符,尽管 bold 或 code
也可以。考虑到印刷格式的书籍和材料通常有利于大写字母。网上的东西,例如Stack Overflow 的答案通常使用 code
,但在包含太多指令或寄存器名称的段落中它可能看起来很混乱。大写字母往往保持可读性,而不会从段落中的其他地方(如这个)吸引眼球,并且根据系统可以更容易输入。 (所以降价使 code
变得容易)。
AND、OR 和 ADD 是常见的指令,如果您没有采取任何措施使它们不同,那么它们在句子中会非常混乱。不那么 ADDIU。
在实际的 asm 源文件中,每一行的格式都相当严格,注释通常从一致的列开始从右侧缩进,并且总是由特殊字符分隔(标准 MIPS 汇编中的 #
)。这避免了任何歧义,尽管在评论中我可能会在与自由格式文本混合时使用大写约定;
addu $t0,$t1,$t2 # not ADD because we don't want to fault on signed overflow