我们必须扩展代码。通过这些操作。
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
答案 0 :(得分:0)
除非特别想捕获签名溢出,否则请不要使用addi
或add
。
使用addu
或addiu
来进行带符号环绕(因为MIPS是2的补码机)。
2的补码有符号加法与无符号整数加法是相同的二进制操作,因此addiu
是图像中“有符号”和“无符号”加法的正确指令。
很明显,如果其中一个操作数是立即数,则必须使用addiu
。
addu $t1, $t2, 1
仅作为伪指令支持,可能是通过在1
指令的寄存器中创建常量addu
或将其汇编为addiu
来实现的。
MIPS没有not
指令。您可以根据nor
指令使用零寄存器nor $dst, $src, $0
来实现按位逆运算。