【问题标题】:How can I realize a Mars program while Extended (pseudo) instruction or format not permitted is deactivated using the Operation NOT, ADDI and ADDIU?在使用非操作、ADDI 和 ADDIU 禁用扩展(伪)指令或格式不允许的情况下,如何实现 Mars 程序?
【发布时间】:2019-06-02 18:40:14
【问题描述】:

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

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

【问题讨论】:

  • 使用addu 避免溢出。目前还不清楚你想做什么,所以它可能不正确,但它会避免溢出。要模拟 not,您可以从 -1 中减去。
  • 指令not是一个“伪指令”。这意味着这实际上不是一条指令,而是一条或两条指令的缩写。 not $x,$ynor $x,$y,$0 的缩写。
  • 我无法使用 addu。我收到错误消息扩展(伪)指令或格式不允许。请参阅设置。 i.stack.imgur.com/sWzCa.png这是我必须做的。
  • 您必须将addi $21, $15, 1 替换为addiu $21, $15, 1
  • 第 27 行溢出。你的任务毫无意义。如果忽略溢出,则与上一行 26 相同。

标签: assembly mips sql-server-mars


【解决方案1】:

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

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

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


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

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2021-04-07
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多