跳转到主要内容

习题(K.4)

习题 K.1

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

decl (r5)

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

习题 K.2

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

clrl @(r5)+

习题 K.3

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

aoblss r6, r5, L1

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

习题 K.4

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

a = b + 100;

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

习题 K.5

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

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

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