teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コードを追加

2020/08/04 01:40

投稿

kazuma-s
kazuma-s

スコア8222

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

負の値

2020/08/04 01:40

投稿

kazuma-s
kazuma-s

スコア8222

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

コードのコメント修正

2020/08/03 01:11

投稿

kazuma-s
kazuma-s

スコア8222

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 $s8 = 0($s6)
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; // beq $t0, $zero, 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]);