您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术在磁盘操作系统实模式下直接存取4GB内存分析 正文
在磁盘操作系统实模式下直接存取4GB内存分析

在磁盘操作系统实模式下直接存取4GB内存分析

点击数:7737 次   录入时间:03-04 11:44:39   整理:http://www.55dianzi.com   嵌入式系统-技术

    MOV word ptr pdescr-tmp [4],AX

    //GDTR Base high16 bits

    LGDT pdescr-tmp //Load GDTR

    }

    //****

    //* Enter 32 bit Flat Protected Mode

    //****

    asm{

    mov DX,0x10 // The Data32 Selector

    db 0x66,0x0F,0x20,0xC0 // MOV EAX,CR0

    db 0x66

    MOV BX,AX // MOV EBX,EAX

    OR AX,1

    db 0x66,0x0F,0x22,0xC0

    //MOV CRO,EAX // Set Protection enable bit

    JMP Flsuh

    } //Clear machine perform cache.

    flush: // Now In Flat Mode, But The CS is Real Mode Value.

    asm { //And it s attrib is 16Bit Code Segment.

    db 0x66

    MOV AX,BX //MOV EAX,EBX

    db 0x8E,0xE2 //MOV FS,DX

    //Load FS Base=0 Size=4G now

    db 0x66,0x0F,0x22,0xC0 //MOV CRO,EAX

    //Return Real Mode.

    LIDT OldIDT //LIDT OldIDT //Restore IDTR

    STI // STI //Enable INTR

    }

    }

    unsigned char ReadByte (unsigned long Address)

    {

    asm db 0x66

    asm mov di,word ptr Address // MOV EDI, Address

    asm db 0x67 //32 bit Address Prefix

    asm db 0x64 //FS:

    asm mov al,byte ptr [BX] // =MOV AL, FS: [EDI]

    return -AL;

    }

    unsigned char WriteByte(unsigned Long Address)

    {

    asm db 0x66

    asm mov di,word ptr Address //MOV EDI, Address

    asm db 0x67 //32 bit Address Prefix

    asm db 0x64 //FS:

    asm mov byte ptr [BX],al //=MOV FS: [EDI],AL

    return -AL;

    }

    //////// Don t Touch Above Code ///

    # include <stdio, h>

    void Dump4G (unsigned long Address)

    {

    int i;

    int j;

    for (i=0; i<20; i++)

    {

    printf (“%081X: ”, (Address+i*16));

    for (j=0; j<16;j++)

    printf ("% 02X" ,ReadByte (Address+i*16+j));

    printf (" ");

    for (j=0;j<16;j++)

    {

    if (ReadByte (Address+i*16+j) <0x20) printf (" . ");

    else printf (" %C ", ReadByte (Address+i*16+j));

    }

    printf ("n");

    }

    }

    main ()

    {

    unsigned long Address=0;

    unsigned long tmp;

    LoadFSLimit4G ();

    printf ("====Designed By Southern. 1995.7.17====n");

    printf (" Now you CAN ACCess The Machine All 4G Memory.n");

    printf (" Input the Start Memory Physical to DUMP. n");

    printf (" Press D to Cuntinue DUMP, 0 to End & Quit, n");

    do {

    printf ("-");

    scanf ("%IX", &tmp);

    if (tmp==0x0d) Address+=(20*16);

    else Address=tmp;

    Dump4G (Address);

    }while (Address !=0);

    return 0;

    }



上一页  [1] [2] 


本文关键字:操作系统  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术

《在磁盘操作系统实模式下直接存取4GB内存分析》相关文章>>>