跳转至

汇编指令

规定灵犀指令集汇编指令格式如下:

Opcode operand0,operand1,... {->destination}
  • Opcode是指令名称,是不同指令特有的标识符
  • Operand是指令的操作对象,可以是寄存器,立即数,或者标签
  • Opcode和Operand之间通过空格分隔,Operand可以有多个之间通过’,‘分隔,如Opcode operand0, operand1
  • 同一个指令中不能出现两个Opcode指令标识符
  • ...表示可能有0个或多个Operand
  • {->destination}表示当有输出时,需要用->表示输出到对应的全局或者块内寄存器,块内寄存器支持双输出,最多支持2个块内寄存器。

操作对象

Operand操作对象有三种形式:寄存器,立即数,标签

  • 寄存器的命名已经在前面的寄存器章节中说明。
  • 立即数的写法与其他架构相同:支持有/无符号立即数, 支持十进制(1234)/十六进制(0x4d2)/二进制(0b100 1101 0010)
  • 标签的用法已经在前面的标签章节中说明。

块头和微指令的汇编指令将在下文中介绍。在阅读下文的汇编指令时:{}符号表示使用{}中任意一个用','分割的字符串,<>表示<>内的内容可能缺省不写。

表达式

在汇编器中,立即数和标签类型的操作对象都被当做一个表达式来处理。汇编器会将立即数和标签转换为需要的数值。因此当一个汇编指令或者汇编伪指令需要整数时,我们通常可以写成立即数,标签两种操作对象的任意一种:
1. 直接使用以十进制、十六进制(带有 0x 前缀)或二进制(带有 0b 前缀)指定的立即数。(0)
2. 使用由标签和其他预定义值组成的数学和逻辑表达式。这些表达式产生绝对值或相对值。绝对值与位置无关且恒定。相对值是相对于某些链接器定义的地址指定的,这些地址是在生成二进制执行文件时确定的, 例如分支的目标地址。(1)

(0)

BSTART.STD COND, 0x200000     /* 当前块头的跳转目标地址为0x200000 */

(1)

BSTART.STD COND, .LBBO       /* 当前块头的跳转目标地址为标签LBBO所指示的地址,在生成二进制执行文件时确定*/