2016-10-30 1 views
0

Ich ging durch den XV-6-Code, durch den es die MP-Struktur identifiziert. Es sucht zuerst im ersten kb von EBDA. Der Code es wie diesMP Fließkommastruktur

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); 
} 

Ich verstehe nicht, was diese Zeile tut if((p = ((bda[0x0F]<<8)| bda[0x0E]) << 4)) tun.

Antwort

0

1.2 BIOS Data Area (BDA)

0x040E (Wort) EBDA Basisadresse >> 4 (in der Regel!)

Der Zweck p = ((bda[0x0F]<<8)| bda[0x0E]) << 4 ist eine 20-Bit-Adresse zu extrahieren die erste Kilobyte von EBDA anzuzeigen.

+0

Können Sie ein bisschen mehr erklären? – ashish

Verwandte Themen