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

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

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

1 Ответ

0 голосов
/ 04 июня 2019

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

Используйте addu или addiu для получения подписанного переноса (поскольку MIPS является машиной дополнения в 2).

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


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

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


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

...