2016-10-30 55 views
0

我正在瀏覽通過它標識MP結構的XV-6代碼。它首先搜索EBDA的第一個kb。代碼它是這樣的MP浮點結構

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))做什麼。

回答

0

1.2 BIOS Data Area (BDA)

0x040E(字)EBDA基地址>> 4(通常!)

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

+0

你能多解釋一下嗎? – ashish