2016-10-26 19 views
0

Я пишу программу в 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 - относится ли это к моей проблеме?

+0

сообщение соответствующий код. – Michael

ответ

1

У вас есть опечатка в вашем сегменте данных:

numPixels: .word 655536 

256 * 256 65536, а не 655536.