我在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
,並存儲對應的索引的,以0
或1
數量,如果它是通過使用埃拉託塞尼的篩的算法素或沒有。
如果我自己運行這些函數中的每一個,程序將執行時沒有錯誤。但是,如果我嘗試之後calcPrimes
clearDisplay
執行,我得到以下內存錯誤:
line 63: Runtime exception at 0x0040009c: address out of range 0x10400000
,其中第63行是一個循環,將primeArray[i] = 0
如果該元素是不是素數裏。
什麼是造成此錯誤?數據段是否足夠大以存儲我希望執行前的所有內容?
作業指導要求包含一個子程序clears a block of memory
- 這與我的問題有關嗎?
郵政相關的代碼。 – Michael