2016-10-26 3 views
0

私はMars MIPS Simulatorにすべての素数を見つけて最大65,025を見つけ、Ulam Spiralという形で256x256ビットマップディスプレイにそれらをピクセルごとに表現するプログラムを作成しています。MARS - アドレスが範囲外です

私のプログラムのdataセグメントは、次のようになります。私はこのdataセグメントでやろうとしています何

display: .word 0:65536   # allocates a memory address for each pixel, and initialises each to 0 (256 x 256) 
numPixels: .word 655536   # number of pixels on 256x256 display 
black:  .word 0x00000000  # hex code for black 
white:  .word 0x00FFFFFF  # hex code for white 

primeArray: .word 1:65025   # array of 65025 elements initialised to '1' (1 = prime, 0 = not prime) 
length:  .word 65025   # length of primeArray 

は予約することである:

  • 65,536各ピクセル
  • 3に対応する言葉'65,536 'を格納する単語と黒と白の16進コード
  • 65,025整数用ワード1 - 65,025
  • 1ワード数'65、025' は所定の順序で

を格納します。

プログラムはprimeArrayを反復処理するSieve of Eratosthenesを使用して動作し、0として1として素数、非素数を格納します。 65,536ピクセルの各々を反復して白にその色のそれぞれを設定することにより、ビットマップの表示をクリアし、最初の

  • :これまでのところ、私は独立して正常に動作二つの機能を持っています。それはエラトステネスのふるいのアルゴリズムを用いて素数であるかどうかprimeArrayスルー

  • 第反復

  • とは 0又は 1に対応するインデックスの数を格納します。

これらの機能をそれぞれ単独で実行すると、プログラムはエラーなしで実行されます。私はcalcPrimes続いclearDisplayを実行しようとする場合は、私は、次のメモリエラーを取得:

line 63: Runtime exception at 0x0040009c: address out of range 0x10400000 

ライン63は、その要素が素数でない場合primeArray[i] = 0を設定し、ループの内側です。

このエラーの原因は何ですか?データセグメントは実行前に私が望んでいるものすべてを格納するのに十分な大きさですか?

clears a block of memoryというサブルーチンを含めるように指示されています - これは私の問題と関連がありますか?

+0

郵便関連するコード。 – Michael

答えて

1

あなたのデータセグメントにタイプミスを持っている:

numPixels: .word 655536 

256 * 256は、65536ない655536.

関連する問題