我正在浏览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))是做什么的。
发布于 2016-12-09 14:49:21
1.2 BIOS Data Area (BDA)
EBDA0x040E(字)
基址>> 4(通常!)
p = ((bda[0x0F]<<8)| bda[0x0E]) << 4的目的是提取一个20位地址来表示EBDA的第一个千字节。
https://stackoverflow.com/questions/40331531
复制相似问题