MARS - 地址超出范围

MARS - Address out of range

我正在 Mars MIPS 模拟器中编写一个程序,它可以找到最多 65,025 个素数,然后在 256x256 位图显示器上以 Ulam Spiral 的形式逐个像素地表示它们。

我程序的 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 部分中试图做的是保留:

按照给定的顺序。

该程序通过使用 Sieve of Eratosthenes 迭代 primeArray 并将素数存储为 1,将非素数存储为 0。到目前为止,我有两个独立运行良好的函数:

如果我 运行 这些函数中的每一个都有自己的功能,则程序执行时不会出现错误。但是,如果我尝试执行 clearDisplay 后跟 calcPrimes,我会收到以下内存错误:

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

第 63 行位于一个循环内,如果该元素不是质数,则设置 primeArray[i] = 0

导致此错误的原因是什么?数据段是否足够大以存储我希望在执行前存储的所有内容?

作业说明要求包含一个子例程,clears a block of memory - 这与我的问题相关吗?

您的数据段中有错字:

numPixels:  .word   655536

256*256 是 65536,不是 655536。