0

我们必须扩展我们的代码。有了这些操作。运营

Ziel=目标寄存器

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

当我评论第 14 行时。(#not $9, $9)我收到此错误 第 27 行:0x00400064 处的运行时异常:算术溢出 Go:执行因错误而终止。

#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
4

1 回答 1

0

切勿使用addior add,除非您特别想捕获签名溢出。

使用adduaddiu获得签名环绕(因为 MIPS 是 2 的补码机器)。

2 的补码有符号加法与无符号整数加法相同的二进制运算,因此addiu对于图像中的“有符号”和“无符号”加法来说,这是正确的指令。


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

addu $t1, $t2, 1只能作为伪指令支持,可能是通过1在寄存器中为addu指令创建常量,或者将其组装为addiu.


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

于 2019-06-04T03:52:26.373 回答