# 习题（K.4）
<!-- source: p1368 -->

### 习题 K.1 {#exercise-k-1}

[3] <K.4> 下面的 VAX 指令把寄存器 `r5` 指向的存储器单元减一：

```asm
decl (r5)
```

哪一条 MIPS 指令能完成相同操作？如果单条指令无法实现，请给出最短的 MIPS 指令序列。两种机器上相应指令的长度分别是多少？

### 习题 K.2 {#exercise-k-2}

[5] <K.4> 要求与习题 K.1 相同，但改用以下 VAX 指令；它采用自动递增间接寻址，把一个存储器单元清零：

```asm
clrl @(r5)+
```

### 习题 K.3 {#exercise-k-3}

[5] <K.4> 要求与习题 K.1 相同，但改用以下 VAX 指令；它给 `r5` 加一并将结果写回 `r5`，再与 `r6` 比较，若 `r5 < r6` 则分支到 `L1`：

```asm
aoblss r6, r5, L1
```

其操作为 `r5 = r5 + 1; if (r5 < r6) goto L1`。原题用 `#` 引出这一说明；为避免与 VAX 的立即数符号混淆，这里将说明独立列出。

### 习题 K.4 {#exercise-k-4}

[5] <K.4> 给出实现以下 C 语句的单条 VAX 指令，若不能用一条实现，则给出最短指令序列：

```c
a = b + 100;
```

假设 `a` 对应寄存器 `r3`，`b` 对应 `r4`。

### 习题 K.5 {#exercise-k-5}

[10] <K.4> 给出实现以下 C 语句的单条 VAX 指令，若不能用一条实现，则给出最短指令序列：

```c
x[i + 1] = x[i] + c;
```

假设 `c` 对应寄存器 `r3`，`i` 对应 `r4`，`x` 是一个 32 位字数组，起始存储器地址为十进制 4,000,000。
