另外,一个程序在内存中最少可以占用多少空间?我知道8086中每个寄存器的最大容量为16位
lsmepo6l1#
8086具有20位线性/物理地址空间,因此1MiB的RAM + ROM+设备内存。8086上唯一可用的模式是后来的CPU所称的"实模式",其中seg:off逻辑地址的两个16位的一半Map到线性地址(seg<<4) + off。该计算可以稍微超过1MiB,并且在后来的CPU/系统上,可以禁用到20位的回绕(A20门),尽管这对于设置不同的段基的其他模式非常有用,允许访问更多的内存。Michael Petch评论说,一些附加卡提供了一个64K的窗口到大量的物理内存,比如高达32MiB。所以这就像"银行切换"。为了访问该空间的不同部分,程序将不得不做一个I/O操作,比如out指令。逻辑上,这有点像分页到硬盘驱动器或SSD,除了存储直接进入额外的内存。因此,您可以从修改过的存储体切换出来,而无需先进行写回操作。当然,性能也有很大的不同,切换存储体的延迟大大低于在旋转硬盘上写入+读取64K。但它对软件并不透明,因此它的工作方式不像有大量RAM来运行不知道这种插入式内存扩展卡的程序。
(seg<<4) + off
out
C3
ret
.com
在裸机上,具有无限循环的2字节ROM(jmp $,即jmp rel8=-2)可能会执行,尽管您只能通过观察它重新获取代码时的地址行来了解它,因为它当然不能做任何事情。(您可能需要一个cli,尽管CPU启动时可能禁用了中断)。如果它是连接到8088的全部,则它只需要对地址线的低位进行解码,以便在8位总线上单独提供每个字节。如果连接到8086,则它不需要对任何地址线进行任何解码,只需对时钟和读取信号进行解码。或者你可以把8086的16个引脚硬连线到电源和地。
jmp $
jmp rel8=-2
cli
0x6upsns2#
8086处理器可以使用segmented memory model寻址1 MB的内存。内存段可以包含代码或数据(或两者),给定段最大可达64 K。实际上,memory space的一部分被中断向量表、BIOS和设备(如图形卡的内存缓冲区)占用。可寻址 RAM 的确切数量取决于硬件配置。虽然1 MB是8086(或以后的处理器的真实的模式)直接寻址的内存的极限,但可以使用存储体切换技术将额外的内存Map到该地址空间的窗口中。在MS-DOS中,第一个标准的存储体切换实现被称为LIM(Lotus、Intel、Microsoft),它允许切换Map到地址空间中4个最高16 KB存储器块中的每一个的物理存储器,这被称为上部存储区(UMA)。后来的扩展存储器规范(XMS)允许扩展的物理存储器在任何地方Map到可用的地址空间。当时的游戏机也使用了类似的技术。
2条答案
按热度按时间lsmepo6l1#
8086具有20位线性/物理地址空间,因此1MiB的RAM + ROM+设备内存。
8086上唯一可用的模式是后来的CPU所称的"实模式",其中seg:off逻辑地址的两个16位的一半Map到线性地址
(seg<<4) + off
。该计算可以稍微超过1MiB,并且在后来的CPU/系统上,可以禁用到20位的回绕(A20门),尽管这对于设置不同的段基的其他模式非常有用,允许访问更多的内存。Michael Petch评论说,一些附加卡提供了一个64K的窗口到大量的物理内存,比如高达32MiB。所以这就像"银行切换"。为了访问该空间的不同部分,程序将不得不做一个I/O操作,比如
out
指令。逻辑上,这有点像分页到硬盘驱动器或SSD,除了存储直接进入额外的内存。因此,您可以从修改过的存储体切换出来,而无需先进行写回操作。当然,性能也有很大的不同,切换存储体的延迟大大低于在旋转硬盘上写入+读取64K。但它对软件并不透明,因此它的工作方式不像有大量RAM来运行不知道这种插入式内存扩展卡的程序。C3
(ret
)的1字节.com
文件将干净地执行,返回到DOS放入其内存映像的退出系统调用。我不知道不同版本的DOS需要多少空间来实际加载它;假定至少512字节磁盘扇区加上用于PSP(程序段前缀)的空间。在裸机上,具有无限循环的2字节ROM(
jmp $
,即jmp rel8=-2
)可能会执行,尽管您只能通过观察它重新获取代码时的地址行来了解它,因为它当然不能做任何事情。(您可能需要一个cli
,尽管CPU启动时可能禁用了中断)。如果它是连接到8088的全部,则它只需要对地址线的低位进行解码,以便在8位总线上单独提供每个字节。如果连接到8086,则它不需要对任何地址线进行任何解码,只需对时钟和读取信号进行解码。或者你可以把8086的16个引脚硬连线到电源和地。
0x6upsns2#
8086处理器可以使用segmented memory model寻址1 MB的内存。内存段可以包含代码或数据(或两者),给定段最大可达64 K。
实际上,memory space的一部分被中断向量表、BIOS和设备(如图形卡的内存缓冲区)占用。可寻址 RAM 的确切数量取决于硬件配置。
虽然1 MB是8086(或以后的处理器的真实的模式)直接寻址的内存的极限,但可以使用存储体切换技术将额外的内存Map到该地址空间的窗口中。
在MS-DOS中,第一个标准的存储体切换实现被称为LIM(Lotus、Intel、Microsoft),它允许切换Map到地址空间中4个最高16 KB存储器块中的每一个的物理存储器,这被称为上部存储区(UMA)。
后来的扩展存储器规范(XMS)允许扩展的物理存储器在任何地方Map到可用的地址空间。
当时的游戏机也使用了类似的技术。