如何获得内存大小?

时间:2019-10-22 10:04:00

标签: assembly memory bios

我使用指令0x15,ax = 0xe801来获取内核加载程序中的总内存,并将其移至以后从内核中的内存单元中读取。但是结果却不是您所需要的。 Bootsect代码

xor cx,cx
xor dx,dx
mov ax,0xe801
int 0x15
mov ax,cx
mov bx,dx
mov [0x00000600],ax
mov [0x00000620],bx

结果-00 @ 4

1 个答案:

答案 0 :(得分:2)

  

如何获取内存大小?

哪个“内存大小”?

如果要获取安装的RAM总量,则可能需要使用“系统管理BIOS”表;但这是数字(其中包括“固件偷走的RAM”和“集成图形偷走的RAM”之类的东西)几乎没有实际用途。

如果需要操作系统可以使用的RAM区域列表;那么这实际上是一个列表,而不是一个数字。要获得列表,您可以使用“ int 0x15,eax = 0xE820”,一旦有了列表(并希望对其进行清理),您可以累加“可用RAM”区域的大小(而忽略报告为“保留”的区域) ,“ ACPI非易失性”,...)来获取操作系统可以使用的RAM总量。

注意:对于古代计算机,还有许多其他功能(“ int 0x12”,“ int 0x15,ax = 0xE881”,“ int 0x15,ax = 0xE801”,“ int 0x15,ah = 0xC7”,“ int 0x15, ah = 0x8A”,“ int 0x15,ax = 0xDA88”,“ int 0x15,ah = 0x88”)以及其他一些方法(CMOS位置,探测);不同的计算机支持某些(而不是全部)选项。幸运的是,所有这些都在1990年代初被弃用,现在已经没有任何意义(因为25岁以上的计算机大多在15年前就停止使用了。)