使用NOT,ADDI和ADDIU操作停用不允许的扩展(伪)指令或格式时,如何实现Mars程序?

时间:2019-06-02 18:40:14

标签: assembly mips mars

我们必须扩展代码。通过这些操作。 Operations

Ziel =目标寄存器

在第14行中出现错误:第14行第2列:不允许扩展(伪)指令或格式。请参阅设置。

当我在第14行注释时。(#not $ 9,$ 9)我收到此错误 第27行:运行时异常位于0x00400064:算术溢出 继续:执行由于错误而终止。

#code from previous question
1 .text 
2 addi $8, $0, 1
3 addi $9, $0, 11
4 addi $10, $0, 0x1000
5 addi $11, $0, -1
6 addi $12, $0, -0x8000
7 addi $13, $0, 0x8000
8 addi $14, $0, 0xffff0000
9 addi $15, $0, 0x7fffffff
10 addi $24, $0, 5322
11 addi $25, $0, 75

#code with operations
12 add  $2, $10, $9
13 sub  $3, $10, $9
14 not $9, $9 
15 add  $4, $9, $10
16 addi $4, $4, 1
17 sll  $5, $13, 5
18 sra  $6, $13, 5
19 sra  $7, $12, 5
20 srl  $16, $12, 5
21 srlv $17, $13, $9
22 div  $24, $25
23 mflo $18
24 div  $24, $25
25 mfhi $19
26 addiu $20, $15, 1
27 addi  $21, $15, 1
28 clo   $22, $11
29 clo   $23, $14

1 个答案:

答案 0 :(得分:0)

除非特别想捕获签名溢出,否则请不要使用addiadd

使用adduaddiu来进行带符号环绕(因为MIPS是2的补码机)。

2的补码有符号加法与无符号整数加法是相同的二进制操作,因此addiu是图像中“有符号”和“无符号”加法的正确指令。


很明显,如果其中一个操作数是立即数,则必须使用addiu

addu $t1, $t2, 1仅作为伪指令支持,可能是通过在1指令的寄存器中创建常量addu或将其汇编为addiu来实现的。


MIPS没有not指令。您可以根据nor指令使用零寄存器nor $dst, $src, $0来实现按位逆运算。