本文系转载,原文地址:http://www.uruk.org/orig-grub/mem64mb.html

INT 15h, AX=E820h - Query System Address Map


Real mode only.

This call returns a memory map of all the installed RAM, and of physical memory ranges reserved by the BIOS. The address map is returned by making successive calls to this API, each returning one "run" of physical address information. Each run has a type which dictates how this run of physical address range should be treated by the operating system.

If the information returned from INT 15h, AX=E820h in some way differs from INT 15h, AX=E801h or INT 15h AH=88h, then the information returned from E820h supersedes what is returned from these older interfaces. This allows the BIOS to return whatever information it wishes to for compatibility reasons.


Input:

   EAX Function Code   E820h EBX Continuation    Contains the "continuation value" to get the                next run of physical memory.  This is the             value returned by a previous call to this             routine.  If this is the first call, EBX              must contain zero.    ES:DI   Buffer Pointer  Pointer to an  Address Range Descriptor               structure which the BIOS is to fill in.   ECX Buffer Size The length in bytes of the structure passed               to the BIOS.  The BIOS will fill in at most               ECX bytes of the structure or however much                of the structure the BIOS implements.  The                minimum size which must be supported by both              the BIOS and the caller is 20 bytes.  Future              implementations may extend this structure.    EDX Signature   'SMAP' -  Used by the BIOS to verify the                caller is requesting the system map               information to be returned in ES:DI.

Output:

   CF  Carry Flag  Non-Carry - indicates no error    EAX Signature   'SMAP' - Signature to verify correct BIOS               revision. ES:DI   Buffer Pointer  Returned Address Range Descriptor pointer.                Same value as on input.   ECX Buffer Size Number of bytes returned by the BIOS in the               address range descriptor.  The minimum size               structure returned by the BIOS is 20 bytes.   EBX Continuation    Contains the continuation value to get the                next address descriptor.  The actual              significance of the continuation value is up              to the discretion of the BIOS.  The caller                must pass the continuation value unchanged                as input to the next iteration of the E820                call in order to get the next Address Range               Descriptor.  A return value of zero means that                this is the last descriptor.  Note that the               BIOS indicate that the last valid descriptor              has been returned by either returning a zero              as the continuation value, or by returning                carry.

Address Range Descriptor Structure

Offset in Bytes        Name        Description   0       BaseAddrLow     Low 32 Bits of Base Address   4       BaseAddrHigh    High 32 Bits of Base Address  8       LengthLow       Low 32 Bits of Length in Bytes    12      LengthHigh      High 32 Bits of Length in Bytes   16      Type        Address type of  this range.

The  BaseAddrLow and  BaseAddrHigh together are the 64 bit  BaseAddress of this range. The  BaseAddress is the physical address of the start of the range being specified.

The LengthLow and LengthHigh together are the 64 bit Length of this range. The Length is the physical contiguous length in bytes of a range being specified.

The Type field describes the usage of the described address range as defined in the table below.

Value  Pneumonic       Description1  AddressRangeMemory  This run is available RAM usable by the               operating system.2    AddressRangeReserved    This run of addresses is in use or reserved               by the system, and must not be used by the                operating system.Other    Undefined       Undefined - Reserved for future use.  Any             range of this type must be treated by the             OS as if the type returned was                AddressRangeReserved.

The BIOS can use the AddressRangeReserved address range type to block out various addresses as "not suitable" for use by a programmable device.

Some of the reasons a BIOS would do this are:

  • The address range contains system ROM.
  • The address range contains RAM in use by the ROM.
  • The address range is in use by a memory mapped system device.
  • The address range is for whatever reason are unsuitable for a standard device to use as a device memory space.

Assumptions and Limitations

  • 1. The BIOS will return address ranges describing base board memory and ISA or PCI memory that is contiguous with that baseboard memory.
  • 2. The BIOS WILL NOT return a range description for the memory mapping of PCI devices, ISA Option ROM's, and ISA plug & play cards. This is because the OS has mechanisms available to detect them.
  • 3. The BIOS will return chipset defined address holes that are not being used by devices as reserved.
  • 4. Address ranges defined for base board memory mapped I/O devices (for example APICs) will be returned as reserved.
  • 5. All occurrences of the system BIOS will be mapped as reserved. This includes the area below 1 MB, at 16 MB (if present) and at end of the address space (4 gig).
  • 6. Standard PC address ranges will not be reported. Example video memory at A0000 to BFFFF physical will not be described by this function. The range from E0000 to EFFFF is base board specific and will be reported as suits the bas board.
  • 7. All of lower memory is reported as normal memory. It is OS's responsibility to handle standard RAM locations reserved for specific uses, for example: the interrupt vector table(0:0) and the BIOS data area(40:0).

Example address map

This sample address map describes a machine which has 128 MB RAM, 640K of base memory and 127 MB extended. The base memory has 639K available for the user and 1K for an extended BIOS data area. There is a 4 MB Linear Frame Buffer (LFB) based at 12 MB. The memory hole created by the chipset is from 8 M to 16 M. There are memory mapped APIC devices in the system. The IO Unit is at FEC00000 and the Local Unit is at FEE00000. The system BIOS is remapped to 4G - 64K.

Note that the 639K endpoint of the first memory range is also the base memory size reported in the BIOS data segment at 40:13.

Key to types: "ARM" is AddressRangeMemory, "ARR" is AddressRangeReserved.

Base (Hex) Length  Type    Description0000 0000  639K    ARM Available Base memory - typically the same                value as is returned via the INT 12 function.0009 FC00    1K  ARR Memory reserved for use by the BIOS(s).               This area typically includes the Extended             BIOS data area.000F 0000  64K ARR System BIOS0010 0000  7M  ARM Extended memory, this is not limited to               the 64 MB address range.0080 0000 8M  ARR Chipset memory hole required to support the               LFB mapping at 12 MB.0100 0000    120M    ARM Base board RAM relocated above a chipset              memory hole.FEC0 0000 4K  ARR IO APIC memory mapped I/O at FEC00000.  Note              the range of addresses required for an APIC               device may vary from base OEM to OEM.FEE0 0000    4K  ARR Local APIC memory mapped I/O at FEE00000.FFFF 0000    64K ARR Remapped System BIOS at end of address space.

Sample operating system usage

The following code segment is intended to describe the algorithm needed when calling the Query System Address Map function. It is an implementation example and uses non standard mechanisms.

    E820Present = FALSE;    Regs.ebx = 0;    do {        Regs.eax = 0xE820;        Regs.es  = SEGMENT (&Descriptor);        Regs.di  = OFFSET  (&Descriptor);        Regs.ecx = sizeof  (Descriptor);  Regs.edx = 'SMAP';

        _int( 0x15, Regs );

        if ((Regs.eflags & EFLAG_CARRY)  ||  Regs.eax != 'SMAP') {            break;        }

        if (Regs.ecx < 20  ||  Regs.ecx > sizeof (Descriptor) ) {            // bug in bios - all returned descriptors must be            // at least 20 bytes long, and can not be larger then            // the input buffer.

            break;        }

    E820Present = TRUE;  .        .        .        Add address range Descriptor.BaseAddress through        Descriptor.BaseAddress + Descriptor.Length        as type Descriptor.Type   .        .        .

    } while (Regs.ebx != 0);

    if (!E820Present) {   .        .        .   call INT 15h, AX=E801h and/or INT 15h, AH=88h to obtain old style   memory information    .        .        .    }

INT 15h, AX=E801h - Get Memory Size for Large Configurations


Real mode only (as far as I know).

Originally defined for EISA servers, this interface is capable of reporting up to 4 GB of RAM. While not nearly as flexible as E820h, it is present in many more systems.

Input:

   AX  Function Code   E801h

Output:

   CF  Carry Flag  Non-Carry - indicates no error    AX  Extended 1  Number of contiguous KB between 1 and 16 MB,              maximum 0x3C00 = 15 MB.  BX  Extended 2  Number of contiguous 64 KB blocks between             16 MB and 4 GB.   CX  Configured 1    Number of contiguous KB between 1 and 16 MB,              maximum 0x3C00 = 15 MB.  DX  Configured 2    Number of contiguous 64 KB blocks between             16 MB and 4 GB.

Not sure what this difference between the "Extended" and "Configured" numbers are, but they appear to be identical, as reported from the BIOS.

NOTE: It is possible for a machine using this interface to report a memory hole just under 16 MB (Count 1 is less than 15 MB, but Count 2 is non-zero).


INT 15h, AH=88h - Get Extended Memory Size


Real mode only.

This interface is quite primitive. It returns a single value for contiguous memory above 1 MB. The biggest limitation is that the value returned is a 16-bit value, in KB, so it has a maximum saturation of just under 64 MB even presuming it returns as much as it can. On some systems, it won't return anything above the 16 MB boundary.

The one useful point is that it works on every PC available.

Input:

   AH  Function Code   88h

Output:

   CF  Carry Flag  Non-Carry - indicates no error    AX  Memory Count    Number of contiguous KB above 1 MB.

INT 15h系列介绍相关推荐

  1. 【SHQi——单片机系列(一)】| STC89C52单片机 | 入门向 | 单片机系列介绍

    单片机系列介绍 1.什么是单片机 单片机,全称:单片微型计算机(Single Chip Microcomputer) 英文:Micro Controller unit,简称为 MCU 是一种集成电路芯 ...

  2. WinPcap网络编程入门——0. 环境配置及系列介绍

    WinPcap网络编程入门--0. 环境配置及系列介绍 系列教程章节直达: Winpcap网络编程入门--1. 获取设备列表: 说明:本教程适用于网络编程开发人员入门,将从底层分析 WinPcap 的 ...

  3. Maven精选系列--介绍与安装

    转载自 Maven精选系列--介绍与安装 Maven介绍 Maven是一个项目管理工具,用来管理项目的生命周期,如项目中各个项目之间的依赖管理,项目中使用到的jar包依赖管理,还有许多项目构建的插件等 ...

  4. UDS诊断系列介绍08-19服务

    本文框架 1. 系列介绍 1.1 19服务概述 1.2 DTC故障码定义 1.3 DTC状态位 2. 19服务常用子服务 2.1 19 01服务 2.2 19 02服务 2.3 19 04服务 2.4 ...

  5. UDS诊断系列介绍13-31服务

    本文框架 1. 系列介绍 1.1 31服务概述 2. 31服务请求与应答 2.1 31服务请求 2.2 31服务正响应 2.3 31服务否定响应 3. Autosar系列文章快速链接 1. 系列介绍 ...

  6. 3Com 905系列介绍

    3Com 905系列介绍 [@more@] 3C905-TX ------------- 905系列的原型(功能不明)- 3C905B-TX ------------ 芯片首创store&fo ...

  7. DI的概念和实现原理—Spring系列介绍

    DI的概念和实现原理-Spring系列介绍 DI和AOP是Spring中的两个核心概念,要学习DI和AOP,首先就需要了解清楚什么是DI,什么是AOP,这篇文章会讲解一下DI的概念和实现原理,不足之处 ...

  8. 本系列介绍了rtmp直播推流全过程(已完结)

    本系列介绍了rtmp直播推流全过程 完整项目地址 (已完结) 以下文章是针对每一个情况,介绍音视频相关知识,以及实现的原理,总共分五章: 第一章:直播推流全过程:视频数据源之YUV(1) RGB或YU ...

  9. XCP实战系列介绍04-CANape工程配置超详细介绍

    本文框架 1.概述 2.新建CANape工程 3. Device配置 3.1 新建Device 3.2 输入Device名称 3.3 配置Network 3.4 选择A2l文件 3.5 确认报文ID与 ...

最新文章

  1. Reids 的五大数据类型
  2. java——逻辑运算符与(和)或(|和||)
  3. SpanBERT:提出基于分词的预训练模型,多项任务性能超越现有模型!
  4. ICML 2021:矩阵乘法无需相乘,速度提升100倍,MIT开源最新近似算法
  5. 【OpenStack】OpenStack系列1之Python虚拟环境搭建
  6. python卸载后安装不上_[宜配屋]听图阁
  7. python22起作业答案_python第22天作业
  8. BAT 厮杀的小程序与手机厂商叫板的快应用,对开发者意味着什么?
  9. 静电场求电场强度E和电势U的方法
  10. Yii 2.0.3 Advanced版控制器不能包含大写字母的Bug
  11. 速进,双十一内购通道!
  12. 图像去雾:基于暗通道的去雾算法 - 附代码
  13. php的原子操作,php实现含有redis命令的原子操作
  14. AutoCAD2000 DWG 格式 section location部分(简述)
  15. 思科模拟器 --- 路由器单臂路由配置
  16. 170312-python爬虫 steam愿望单打折商品
  17. windows pip install 报错
  18. FPS类游戏的逆向分析通用方法与C++逆向功能开发详解
  19. 【Greenplum走遍全国】济南技术研讨会
  20. 2D制作动画软件:Cartoon Animato 支持win/mac 中文激活版

热门文章

  1. STM32CubeIDE XiP 和 BootROM介绍, XiP外部内存QSPI FLASH执行用户代码
  2. 辣椒疫霉RXLR效应子抑制植物免疫
  3. Kivy教程之 08 倒计时App实现timer调用(教程含源码)
  4. 安装 Windows 7 VM虚拟机
  5. 2017年下半年计算机二级报名,2017河北大学下半年计算机二级报名时间
  6. HTTP 必备干货学习,一篇HTTP入门 不收藏都可惜!
  7. QueryRunner常用方法
  8. 网络协议实验四 ARP 协议分析实验
  9. 一篇文章搞懂MongoDB数据库
  10. typora+阿里云图床+印象笔记+OneDrive安全保存你的文章