2016-10-30 3 views
0

Я проходил через код XV-6, через который он идентифицировал структуру MP. Сначала он ищет в первом kb EBDA. Код это как этот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

Смежные вопросы