Assembly 什么是未使用的内存地址?

Assembly 什么是未使用的内存地址?,assembly,6502,commodore,Assembly,6502,Commodore,读这篇文章是因为我对旧的计算机硬件感兴趣,我偶然发现表中的一个单元格声称内存地址未使用。这究竟意味着什么?这是否意味着,如果你想在那个地址放点什么,你可以放任何你想要的东西?我很困惑,希望你能回答。谢谢 内存映射通常应指定哪些程序使用此内存。如果他们说未使用,这意味着这些指定的程序不使用这个地址。在这里你可以看得更清楚:: 这些零页地址在编程中非常有用和重要 C64-非常有用,内部内核和基本系统ROM 使用其中的大多数,只剩下少数是完全安全的 对于机器语言程序员来说,为了他们自己的目的, 不冒系

读这篇文章是因为我对旧的计算机硬件感兴趣,我偶然发现表中的一个单元格声称内存地址未使用。这究竟意味着什么?这是否意味着,如果你想在那个地址放点什么,你可以放任何你想要的东西?我很困惑,希望你能回答。谢谢
内存映射通常应指定哪些程序使用此内存。如果他们说未使用,这意味着这些指定的程序不使用这个地址。在这里你可以看得更清楚::

这些零页地址在编程中非常有用和重要 C64-非常有用,内部内核和基本系统ROM 使用其中的大多数,只剩下少数是完全安全的 对于机器语言程序员来说,为了他们自己的目的, 不冒系统崩溃的风险

因此,内存映射仅对内核和基本内存有效

其他程序(包括您的程序)可以访问未使用的地址而不存在风险。如果加载了其他程序,您必须找出它们访问了哪些地址。您也可以访问其他地址-即使它们被其他程序使用-如果您确切知道会发生什么…

LT;博士

它指的是工作ram地址,它不被基本或内核例程使用,并且可供通用编程使用

详细解释:

您所指的页面是一个非常好的资源,但是如果您不熟悉系统本身,它就太详细了。我建议在深入了解这些细节之前先了解一般内存布局

下面是从中获取的通用内存映射

c64内存映射是高度可配置的。您可以看到I/O和ROM区域位于RAM区域的顶部。在C64体系结构中,ROM区域下面总是隐藏着RAM。您可以关闭不需要到达下面RAM的ROM区域,并在需要时切换回ROM或I/O。您还可以将屏幕ram移动到您想要的任何位置

只有$0000到$0400之间的区域(称为工作ram)是固定的,因为该区域由操作系统基本解释器和内核例程使用。如果你想使用工作ram中的内存而不产生奇怪的副作用,你必须关闭BASIC或内核ROM

e、 g:如果您关闭基本rom,您可以安全地使用从$2到$90的零页地址

不过,有一些聪明的解决方案。和实用工具一样,假设您不使用数据集,则驻留在数据集缓冲区$033C-$03FB中,或者使用屏幕ram作为临时缓冲区,并有效地用乱码字符填充屏幕

我还必须提醒大家,从$0000到$00FF的第一页内存对于6502系列CPU非常重要。此区域称为零页。在零页上工作的指令占用内存中的字节更少,执行速度更快一个周期。此外,索引间接和间接索引内存模式仅在零页中可用

如果需要保留默认内存配置,并且仍然需要一些零页变量,则需要在零页中查找未使用的地址。这是在详细内存映射中被称为“未使用”的主要原因


还请注意:用户编写的ML程序通常放在$C000-$D000中,基本解释器不会触及它,称之为“免费Ram”

基本和内核使用大多数零页地址$0000到$00FF,几乎没有留给您自己的程序使用。未使用的地址是$0002和$00FB到$00FE

零页在6502和相关CPU上是特殊的。考虑指令:

LDA $1234
这将向累加器加载一个寄存器,其中包含地址$1234的内容。对于零页地址,此指令有一个更快的版本:

LDA $02
到目前为止,这没什么大不了的,但是有两种间接寻址模式需要零页。例如:

LDA ($FB),y
读取$FB和$FC的内容,将其视为16位地址,将Y寄存器的值添加到此16位地址,然后从此地址加载累加器。注意,这在零页中使用了两个相邻的字节。这使得零页末尾附近的四个未使用字节比$02处的一个未使用字节更有用

如果你刚刚开始,你只需要四个字节的零页面就可以了。稍后,您可以考虑保存和恢复BASIC所使用的零页的一部分。如果从程序中调用任何内核例程,您将希望避免内核使用的部分


如果你是用BASIC编程,这些都不重要。您可能只会使用PEEK和POKE来控制视频、音频和I/O。您可以使用基本变量和数组来存储程序的数据。

如果源是权威的和确定的,请阅读:您可以信任它,它知道关于内存映射的一切,而不是yes,假设代码可读且可访问,则可以使用它。@Amy可能会问得更好@