⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.asm

📁 一个朋友写的操作系统源码
💻 ASM
字号:
.386P

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;-----------------------STRUCTURES AND EQU------------------------------------

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;EQUS

BOOTSTRAP_BASE=7C0H               
PE_ROOT=700H                        ;OUR FIRST PAGE ENTRY BASE ADDRESS
PD_ROOT=600H                        ;OUR FIRST PAGE DIRECTORY BASE ADDRESS
PDE_LEN=4H                          ;PAGE ENTRY OR DIRECTORY LENGTH

PD0_INDEX=0
PE7_INDEX=28
PE1_INDEX=4           

PDBR_L=6000H
PDBR_H=0

PE1_ATTRIB=8003H                    ;DEFAULT DISPLAY RAM ATTRIB
PE1_BAS=0BH

PE7_ATTRIB=7003H                    ;DEFAULT PAGE ENTRY ATTRIB
PE7_BAS=0

PD0_ATTRIB=7003H                    ;DEFAULT PAGE DIRECTORY ATTRIB
PD0_BAS=0

ENPAGE=80000001H                    ;ENABLE PAGE MECHANISM

BOOT_CODE=8H
BOOT_DATA=10H
DISP_RAM=18H
INIT_CODE=20H

;STRUCTURES FOR SYSTEM DATA

DESC   STRUC
    LIM_0_15      DW 0
    BAS_0_15      DW 0
    BAS_16_23     DB 0
    ACCESS        DB 0
    GRAN          DB 0
    BAS_24_31     DB 0
DESC   ENDS

TABLE_REG    STRUC
    TABLE_LIM     DW 0
    TABLE_LINEAR  DD 0
TABLE_REG    ENDS

PAGE_FORMAT STRUC
    PAGE_ATTRIB   DW 0
    PAGE_BAS      DW 0
PAGE_FORMAT ENDS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;     INIT CODE SEGMENT

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DGROUP GROUP DSEG,DSEG2,DSEG3,DSEG4

;GDT SEGMENT AND SYSTEM RELATIVE SEGMENT SHARE THE SAME DATA SEGMENT

CSEG SEGMENT PARA PUBLIC 'INIT_BOOT_CODE' USE16

     ASSUME CS:CSEG,DS:DGROUP

START:
      XOR AX,AX
      MOV ES,AX
      MOV BX,7E00H
      MOV AX,0207H
      MOV CX,0002H
      MOV DX,0000H
      INT 13H

      MOV AH,2H
      MOV BH,0
      MOV DH,10
      MOV DL,19
      INT 10H

      CLI              ;DISABLE EXTERNAL INTERRUPT
      MOV AX,DGROUP
      ADD AX,BOOTSTRAP_BASE
      MOV DS,AX        ;LOAD REAL DATA SEGMENT FOR GDT

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;     INIT DATA SEGMENT DESCRIPTOR IN GDT

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      XOR EBX,EBX
      MOV BX,AX
      SHL EBX,4

      MOV DWORD PTR GDT_DESC.TABLE_LINEAR,EBX

      MOV WORD PTR BOOT_DATA_DESC.BAS_0_15,BX
      SHR EBX,16
      MOV BYTE PTR BOOT_DATA_DESC.BAS_16_23,BL
      MOV BYTE PTR BOOT_DATA_DESC.BAS_24_31,BH

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;     INIT BOOT_LOADER SEGMENT DESCRIPTOR IN GDT

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      MOV AX,CSEG2
      ADD AX,BOOTSTRAP_BASE
      XOR EBX,EBX
      MOV BX,AX
      SHL EBX,4
      MOV WORD PTR BOOT_CODE_DESC.BAS_0_15,BX
      SHR EBX,16
      MOV BYTE PTR BOOT_CODE_DESC.BAS_16_23,BL
      MOV BYTE PTR BOOT_CODE_DESC.BAS_24_31,BH

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;     INIT THE BASIC DATA STRUCTURE FOR PAGE MECHANISM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      LEA SI,PD0          
      MOV AX,PD_ROOT
      MOV ES,AX
      MOV DI,PD0_INDEX
      MOV CX,PDE_LEN
      REP MOVSB           ;CONSTRUCT THE FIRST PAGE DIRECTORY

      LEA SI,PE7
      MOV AX,PE_ROOT
      MOV ES,AX
      MOV DI,PE7_INDEX
      MOV CX,PDE_LEN
      REP MOVSB           ;WE TRANSLATE THE 7000H-8000H LINEAR
                          ;ADDRESS AS IDENTITY PHYSICAL ADDRESS
      LEA SI,PE1
      MOV AX,PE_ROOT
      MOV ES,AX
      MOV DI,PE1_INDEX
      MOV CX,PDE_LEN
      REP MOVSB

      MOV EAX,PDBR
      MOV CR3,EAX         ;LOAD PAGE TABLE BASE ADDRESS


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;     SWITCH TO PROTECTED MODE

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      LGDT GDT_DESC

      MOV EAX,CR0
      OR EAX,ENPAGE
      MOV CR0,EAX

      DB 0EAH
      DW 0
      DW BOOT_CODE

CSEG ENDS

CSEG2 SEGMENT PARA PUBLIC 'MESS_DISP' USE32

      MOV AX,DISP_RAM
      MOV ES,AX

      CLD
      MOV EDI,0
      MOV ECX,25*80
      MOV EAX,0720H
      REP STOSW

      MOV AX,BOOT_DATA
      MOV DS,AX
      LEA ESI,HEAD
      MOV EDI,0
      MOV ECX,18
      REP MOVSW

      LEA ESI,KERNELOK
      MOV EDI,160*2
      MOV ECX,21
      REP MOVSW

      LEA ESI,PROTECTOK
      MOV EDI,320*2
      MOV ECX,31
      REP MOVSW

      LEA ESI,PAGEOK
      MOV EDI,480*2
      MOV ECX,18
      REP MOVSW

      LEA ESI,SYSOK
      MOV EDI,640*2
      MOV ECX,18
      REP MOVSW

      LEA ESI,PROMPT
      MOV EDI,800*2
      MOV ECX,20
      REP MOVSW

      HLT

      DB 0EAH
      DD 0
      DW INIT_CODE

CSEG2 ENDS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;     GDT SEGMENT

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


DSEG SEGMENT PARA PUBLIC 'GLOBAL_DESC' USE16 

     GDT_NULL_DESC       DESC   < >;NULL DESCRIPTOR
     BOOT_CODE_DESC      DESC   <0FFFFH,,,98H,40H,>
     BOOT_DATA_DESC      DESC   <0FFFFH,,,92H,40H,>
     DISP_RAM_DESC       DESC   <0FFFFH,1000H,0,92H,40H,0>
     INIT_CODE_DESC      DESC   <0FFFFH,7E00H,0,98H,40H,0>
     INIT_DATA_DESC      DESC   <0FFFFH,8000H,0,92H,40H,0>
     INIT_STACK_DESC     DESC   <0FFFFH,8000H,0,92H,40H,0>

;    REST SPACE RESERVED FOR FURTHER ARRENGEMENT

;    DB     64 DUP (0)         ;RESERVE FOR 8 GDTS

DSEG ENDS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;DATA SEGMENT FOR SYSTEM USE

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DSEG2 SEGMENT PARA PUBLIC 'INIT_DATA' USE16

      GDT_DESC   TABLE_REG      <0FFH,>

DSEG2 ENDS

DSEG3 SEGMENT PARA PUBLIC 'INIT_PAGE' USE16

      PDBR    PAGE_FORMAT    <PDBR_L,PDBR_H>
      PD0     PAGE_FORMAT    <PD0_ATTRIB,PD0_BAS>
      PE1     PAGE_FORMAT    <PE1_ATTRIB,PE1_BAS>
      PE7     PAGE_FORMAT    <PE7_ATTRIB,PE7_BAS>      
      
DSEG3 ENDS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;     MESSAGES FOR DESPLAYING 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DSEG4 SEGMENT PARA PUBLIC 'MESSAGE' USE16

      IRED=0CH
      BLIGREEN=8AH
      BLIWHITE=8FH
      IWHITE=0FH

      HEAD    DB 'O',IRED,'S',IRED,20H,IRED,'b',IRED,'o',IRED,'o',IRED
              DB 't',IRED,20H,IRED,'l',IRED,'o',IRED,'a',IRED,'d',IRED
              DB 'e',IRED,'r',IRED,20H,IRED,'1',IWHITE,'.',IWHITE,'0',IWHITE

  KERNELOK    DB 'L',IWHITE,'o',IWHITE,'a',IWHITE,'d',IWHITE,'i',IWHITE,'n',IWHITE
              DB 'g',IWHITE,20H,IWHITE,'k',IWHITE,'e',IWHITE,'r',IWHITE,'n',IWHITE
              DB 'e',IWHITE,'l',IWHITE,20H,IWHITE,'.',IWHITE,'.',IWHITE,'.',IWHITE
              DB 20H,IWHITE,'O',BLIGREEN,'K',BLIGREEN

 PROTECTOK    DB 'S',IWHITE,'w',IWHITE,'i',IWHITE,'t',IWHITE,'c',IWHITE,'h',IWHITE
              DB 20H,IWHITE,'t',IWHITE,'o',IWHITE,20H,IWHITE,'p',IWHITE,'r',IWHITE
              DB 'o',IWHITE,'t',IWHITE,'e',IWHITE,'c',IWHITE,'t',IWHITE,'e',IWHITE
              DB 'd',IWHITE,20H,IWHITE,'m',IWHITE,'o',IWHITE,'d',IWHITE,'e',IWHITE
              DB 20H,IWHITE,'.',IWHITE,'.',IWHITE,'.',IWHITE,20H,IWHITE,'O',BLIGREEN,'K',BLIGREEN

 PAGEOK       DB 'E',IWHITE,'n',IWHITE,'a',IWHITE,'b',IWHITE,'l',IWHITE,'e',IWHITE
              DB 20H,IWHITE,'p',IWHITE,'a',IWHITE,'g',IWHITE,'e',IWHITE
              DB 20H,IWHITE,'.',IWHITE,'.',IWHITE,'.',IWHITE,20H,IWHITE,'O',BLIGREEN,'K',BLIGREEN

 SYSOK        DB 'S',IWHITE,'y',IWHITE,'s',IWHITE,'t',IWHITE,'e',IWHITE,'m',IWHITE,20H,IWHITE
              DB 'i',IWHITE,'n',IWHITE,'i',IWHITE,'t',IWHITE
              DB 20H,IWHITE,'.',IWHITE,'.',IWHITE,'.',IWHITE,20H,IWHITE,'O',BLIGREEN,'K',BLIGREEN

 PROMPT       DB '[',IWHITE,'Z',IWHITE,'h',IWHITE,'o',IWHITE,'u',IWHITE,'6',IWHITE,'1',IWHITE
              DB '1',IWHITE,'6',IWHITE,'@',IWHITE,'1',IWHITE,'6',IWHITE,'3',IWHITE,'.',IWHITE
              DB 'c',IWHITE,'o',IWHITE,'m',IWHITE,']',IWHITE,'#',IWHITE,20H,IWHITE

DSEG4 ENDS

END START


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -