MP浮点结构

时间:2016-10-30 17:10:01

标签: c operating-system

我正在通过XV-6代码来识别MP结构。它首先搜索EBDA的第一个kb。它喜欢这个代码

static struct mp*
mpsearch(void)
{
  uchar *bda;
  uint p;
  struct mp *mp;

  bda = (uchar *) P2V(0x400);
  if((p = ((bda[0x0F]<<8)| bda[0x0E]) << 4)){
    if((mp = mpsearch1(p, 1024)))
      return mp;
  } else {
    p = ((bda[0x14]<<8)|bda[0x13])*1024;
    if((mp = mpsearch1(p-1024, 1024)))
      return mp;
  }
  return mpsearch1(0xF0000, 0x10000);
}

我不明白这句话if((p = ((bda[0x0F]<<8)| bda[0x0E]) << 4))做了什么。

1 个答案:

答案 0 :(得分:0)

1.2 BIOS Data Area (BDA)

  

0x040E(字)EBDA基地址&gt;&gt; 4(通常!)

p = ((bda[0x0F]<<8)| bda[0x0E]) << 4的目的是提取20位地址以指示EBDA的第一个千字节。