【问题标题】:MARS - Address out of rangeMARS - 地址超出范围
【发布时间】:2016-10-26 12:34:46
【问题描述】:

我正在 Mars MIPS Simulator 中编写一个程序,该程序查找所有最高为 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 段中尝试做的是保留:

  • 65,536 个字对应每个像素
  • 3 个单词来存储“65,536”和黑白的十六进制代码
  • 65,025 个字,用于整数 1 - 65,025
  • 1 个字存储数字“65,025”

按照给定的顺序。

程序通过使用Sieve of Eratosthenes 遍历primeArray 并将素数存储为1,将非素数存储为0。到目前为止,我有两个独立工作的函数:

  • 第一个通过迭代 65,536 个像素并将它们的颜色设置为白色来清除位图显示。

  • 第二个遍历primeArray并将对应索引的编号存储到01,如果它是素数或不是使用埃拉托色尼筛算法。

如果我单独运行这些函数中的每一个,程序将毫无错误地执行。但是,如果我尝试执行clearDisplay,然后执行calcPrimes,则会出现以下内存错误:

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

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

是什么导致了这个错误?数据段是否足够大,可以在执行前存储我希望存储的所有内容?

分配指令要求包含clears a block of memory 的子例程 - 这与我的问题有关吗?

【问题讨论】:

  • 贴出相关代码

标签: memory out-of-memory mips primes mars-simulator


【解决方案1】:

您的数据段中有错字:

numPixels:  .word   655536

256*256 是 65536,而不是 655536。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多