2016-10-26 112 views
0

我在Mars MIPS Simulator中編寫了一個程序,查找所有質數達到65,025,然後以Ulam Spiral的形式在256x256位圖顯示中創建像素點像素表示。MARS - 地址超出範圍

我的程序的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 

我試圖在這個data段要做的就是儲備:

  • 65536字對應於每個像素
  • 3用於存儲'65,536'的字和用於黑白的十六進制代碼
  • 用於整數的65,025字1 - 65,025
  • 1個字以存儲數'65,025'
在於給定的順序

該程序的工作原理是使用Sieve of Eratosthenes遍歷primeArray並將素數存儲爲1,非素數存儲爲0。到目前爲止,我有細獨立工作的兩個功能:

  • 首先掃清通過每65,536像素的迭代和他們的每一個顏色設置爲白色的位圖顯示。

  • 第二遍歷primeArray,並存儲對應的索引的,以01數量,如果它是通過使用埃拉託塞尼的篩的算法素或沒有。

如果我自己運行這些函數中的每一個,程序將執行時沒有錯誤。但是,如果我嘗試之後calcPrimesclearDisplay執行,我得到以下內存錯誤:

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.