Я пишу программу в Mars MIPS Simulator, которая находит все простые числа до 65 025, а затем создает пиксельное представление их на 256x256 растровом дисплее в виде Ulam Spiral.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
. До сих пор у меня есть две функции, которые работают независимо друг от друга отлично:
Первое, что очищает дисплей растровый по переборе каждого из 65536 пикселей и настройки каждого из своих цветов на белом фоне.
Второй итерации через
primeArray
и сохраняет номер соответствующего индекса к0
или1
, если он является простым или нет, используя алгоритм решета Эратосфена.
Если я запускаю каждую из этих функций самостоятельно, программа выполняется без ошибок. Однако, если я пытаюсь выполнить clearDisplay
с последующим calcPrimes
, я получаю следующее сообщение об ошибке памяти:
line 63: Runtime exception at 0x0040009c: address out of range 0x10400000
, где линия 63 находится внутри цикла, который устанавливает primeArray[i] = 0
, если этот элемент не является простым.
В чем причина этой ошибки? Является ли сегмент данных достаточно большим, чтобы хранить все, на что я надеюсь до выполнения?
Инструкции по назначению просят включить подпрограмму, которая clears a block of memory
- относится ли это к моей проблеме?
сообщение соответствующий код. – Michael