回答編集履歴
3
コードを追加
answer
CHANGED
@@ -46,4 +46,26 @@
|
|
46
46
|
|
47
47
|
**追記**
|
48
48
|
配列の中に負の値を入れておくべきでした。
|
49
|
-
5 と 6 を -5 と -6 に変えて試してください。
|
49
|
+
5 と 6 を -5 と -6 に変えて試してください。
|
50
|
+
|
51
|
+
**追記2**
|
52
|
+
「C言語で書き直す」というのは、アセンブリ言語と一対一という意味ではなく、
|
53
|
+
次のように書き直すということかもしれません。
|
54
|
+
```C
|
55
|
+
int array[] = { 1, 2, 3, 4, -5, -6, 7, 8, 9, 10 };
|
56
|
+
int s1 = 10, s2, s3, s4, s5, *s6 = array, s7;
|
57
|
+
|
58
|
+
int main(void)
|
59
|
+
{
|
60
|
+
s2 = s3 = s4 = 0;
|
61
|
+
for (s5 = 0; s5 < s1; s5++) {
|
62
|
+
s7 = s6[0];
|
63
|
+
s2 += s7;
|
64
|
+
if (0 < s7) s3 += s7;
|
65
|
+
if (s7 < 0) s4 += s7;
|
66
|
+
s6++;
|
67
|
+
}
|
68
|
+
}
|
69
|
+
```
|
70
|
+
何をしているか分かりますよね。
|
71
|
+
コメントをお願いします。
|
2
負の値
answer
CHANGED
@@ -42,4 +42,8 @@
|
|
42
42
|
printf("t0 = %d\n", t0);
|
43
43
|
}
|
44
44
|
```
|
45
|
-
何をしているかは実行結果から考えてみてください。
|
45
|
+
何をしているかは実行結果から考えてみてください。
|
46
|
+
|
47
|
+
**追記**
|
48
|
+
配列の中に負の値を入れておくべきでした。
|
49
|
+
5 と 6 を -5 と -6 に変えて試してください。
|
1
コードのコメント修正
answer
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
L1:
|
16
16
|
t0 = s5 < s1; // slt $t0, $s5, $s1
|
17
17
|
if (t0 == zero) goto L4; // beq $t0, $zero, L4
|
18
|
-
s7 = s6[0]; // lw $
|
18
|
+
s7 = s6[0]; // lw $s7 = 0($s6)
|
19
19
|
s2 = s2 + s7; // addu $s2, $s2, $s7
|
20
20
|
t0 = zero < s7; // slt $t0, $zero, $s7
|
21
21
|
if (t0 == zero) goto L2; // beq $t0, $zero, L2
|
@@ -23,12 +23,12 @@
|
|
23
23
|
goto L3; // j L3
|
24
24
|
L2:
|
25
25
|
t0 = s7 < zero; // slt $t0, $s7, $zero
|
26
|
-
if (t0 == zero) goto L3; //
|
26
|
+
if (t0 == zero) goto L3; // beq $t0, $zero, L3
|
27
27
|
s4 = s4 + s7; // addu $s4, $s4, $s7
|
28
28
|
L3:
|
29
29
|
s5 = s5 + 1; // addi $s5, $s5, 1
|
30
30
|
s6 = (int *)((char *)s6 + 4); // addi $s6, $s6, 4
|
31
|
-
goto L1;
|
31
|
+
goto L1; // j L1
|
32
32
|
L4:
|
33
33
|
for (int i = 0; i < 10; i++)
|
34
34
|
printf("array[%d] = %d\n", i, array[i]);
|