Practice5 - 2024年度 システムプログラミング
課題内容
アセンブラによる配列の実現について理解します.
Practice5-1: 100個の素数を求める
素数を最初から100番目まで求めてプリントする MIPSのアセンブリ言語プログラムを作成してテストせよ.素数を求めるためには, 下記の2つのルーチンを作成する必要がある.
- test_prime(n)
- nが素数であれば,1を返し,そうでなければ0を返す.
- main()
- 整数を順々に繰り返し調べて,素数であるかどうかを判定する.得られた素数を最初から100個までプリントする.
C言語で記述した例は以下の通り:
int test_prime(int n) { int i; for (i = 2; i < n; i++){ if (n % i == 0) return 0; } return 1; } int main() { int match = 0, n = 2; while (match < 100){ if (test_prime(n) == 1){ print_int(n); print_string(" "); match++; } n++; } print_string("\n"); }
実行例は,以下の通り(改行は調整してある):
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541
解答例
Practice5-2: 配列の利用
素数を最初から100番目まで求めてプリントするMIPSのアセンブリ言語プログラムを作成してテストせよ.
ただし,配列に実行結果を保存するように main
部分を改造して,
ユーザの入力によって任意の番目の配列要素を表示できるようにせよ.
C言語で記述した例は以下の通り:
int primes[100]; int main() { int match = 0, n = 2; while (match < 100){ if (test_prime(n) == 1){ primes[match++] = n; } n++; } for (;;){ print_string("> "); print_int(primes[read_int() - 1]); print_string("\n"); } }
実行例は,以下の通り:
> 15 47 > 100 541