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
部分中试图做的是保留:
- 每个像素对应65,536个词
- 3 个字来存储“65,536”和黑白的十六进制代码
- 65,025 个单词表示整数 1 - 65,025
- 1 个字来存储数字“65,025”
按照给定的顺序。
该程序通过使用 Sieve of Eratosthenes 迭代 primeArray
并将素数存储为 1
,将非素数存储为 0
。到目前为止,我有两个独立运行良好的函数:
第一个通过遍历 65,536 个像素中的每一个并将它们的每个颜色设置为白色来清除位图显示。
第二次遍历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
- 这与我的问题相关吗?
您的数据段中有错字:
numPixels: .word 655536
256*256 是 65536,不是 655536。
我正在 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
部分中试图做的是保留:
- 每个像素对应65,536个词
- 3 个字来存储“65,536”和黑白的十六进制代码
- 65,025 个单词表示整数 1 - 65,025
- 1 个字来存储数字“65,025”
按照给定的顺序。
该程序通过使用 Sieve of Eratosthenes 迭代 primeArray
并将素数存储为 1
,将非素数存储为 0
。到目前为止,我有两个独立运行良好的函数:
第一个通过遍历 65,536 个像素中的每一个并将它们的每个颜色设置为白色来清除位图显示。
第二次遍历
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
- 这与我的问题相关吗?
您的数据段中有错字:
numPixels: .word 655536
256*256 是 65536,不是 655536。