汇编指令,通常有两部分构成:助记符和寻址方式。
据我所知(在哪看的忘了),最早的汇编,跟机器码是严格一一映射的关系。基本就是:把机器码中的操作码,起一个人类好记的名字,通常是一个英语中的动词——助记符。再约定各种寻址方式的表示方式,跟在助记符后面。由助记符和寻址方式,确定了一条汇编指令。然后写一段程序,然后把汇编指令翻译成机器码。
随着计算机技术的发展,汇编指令也出现了一些微妙的变化。比如汇编指令与机器码,不再是严格的一一映射的关系。一条机器码,可能会对应着多条汇编指令;一条汇编指令也可能对应着多条机器码。(计算机体系结构的发展,指令端出现了微代码,汇编出现了宏代码,大体上仍然是一一映射的,只是不再是单指令的一一对应而已)。
除了极少量指令指令,绝大多数汇编指令,都有确定的寻址方式,只不过有的寻址方式,是显式的(比如加法指令),有的寻址方式是隐式的(比如中断返回指令),有的寻址方式是显式 + 隐式(比如相对跳转指令)。
表 3‑1 龙芯架构汇编指令的分类(按照指令中是否显式包涵寻址方式)
寻址方式 | 举例指令 | 说明 |
显式寻址 | add.w rd, rj, rk | rd = rj + rk |
隐式寻址 | eret | pc = CSR.ERA |
显式 + 隐式 | b offs26 | pc = sig(offs26 << 2) + pc |