Как я могу реализовать программу Mars, когда расширенная (псевдо) инструкция или недопустимый формат деактивированы с помощью операций NOT, ADDI и ADDIU?

Мы должны расширить наш код. С этими операциями. Операции

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

person Can    schedule 02.06.2019    source источник
comment
Используйте addu, чтобы избежать переполнения. Непонятно, что вы хотите сделать, поэтому это может быть неправильно, но это позволит избежать переполнения. Чтобы смоделировать not, вы можете вычесть из -1.   -  person Jester    schedule 02.06.2019
comment
Инструкция not - это псевдо-инструкция. Это означает, что на самом деле это не инструкция, а сокращение одной или двух инструкций. not $x,$y - это сокращение от nor $x,$y,$0.   -  person Martin Rosenau    schedule 02.06.2019
comment
я не могу использовать адду. Я получаю сообщение об ошибке. Расширенная (псевдо) инструкция или формат недопустим. См. Настройки. i.stack.imgur.com/sWzCa.png вот что мне нужно сделать .   -  person Can    schedule 02.06.2019
comment
Вы должны заменить addi $21, $15, 1 на addiu $21, $15, 1   -  person Alain Merigot    schedule 02.06.2019
comment
Строка 27 будет переполнена. Ваше задание не имеет смысла. Если вы проигнорируете переполнение, оно будет таким же, как в предыдущей строке 26.   -  person Jester    schedule 03.06.2019


Ответы (1)


Никогда не используйте addi или add, если вы специально не хотите ловить подписанное переполнение.

Используйте addu или addiu, чтобы получить подписанный перенос (поскольку MIPS - это машина с дополнением до 2).

Дополнение 2 со знаком со знаком - это та же бинарная операция, что и сложение беззнаковых целых чисел, поэтому addiu является правильной инструкцией как для добавления «со знаком», так и для добавления «без знака» в вашем изображении.


Очевидно, что если один из операндов является непосредственным, вы должны использовать addiu.

addu $t1, $t2, 1 будет поддерживаться только как псевдо-инструкция, возможно, путем создания константы 1 в регистре для инструкции addu или путем сборки ее как addiu.


MIPS не имеет not инструкции. Вы реализуете побитовое обратное в терминах инструкции nor с нулевым регистром: nor $dst, $src, $0.

person Peter Cordes    schedule 04.06.2019