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

📄 kstart.asm

📁 gerneral os development
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 32-bit kernel startup code;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; macros to handle leading underscores added by DOS/Windows compilers%macro	IMP 1%ifdef UNDERBARS	EXTERN _%1	%define %1 _%1%else	EXTERN %1%endif%endmacroDS_MAGIC	equ	3544DA2AhSECTION .textBITS 32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; entry point;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GLOBAL entryentry:; check if data segment linked, located, and loaded properly	mov eax,[ds_magic]	cmp eax,DS_MAGIC	je ds_ok; display a blinking white-on-blue 'D' and freeze	mov word [0B8000h],9F44h	jmp short $ds_ok:; stop using bootloader GDT, and load new GDT	lgdt [gdt_ptr]	mov ax,LINEAR_DATA_SEL	mov ds,ax	mov es,ax	mov ss,ax	mov fs,ax	mov gs,ax	jmp LINEAR_CODE_SEL:sbatsbat:; zero the C language BSS; 'bss' and 'end' are defined in the linker script fileEXTERN bss, end	mov edi,bss	mov ecx,end	sub ecx,edi	xor eax,eax	rep stosb	mov esp,stackIMP main	call main		; call C code	jmp $			; freeze;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Multiboot header for GRUB bootloader. This must be in the first 8K; of the kernel file. We use the aout kludge so it works with ELF,; DJGPP COFF, Win32 PE, or other formats.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MULTIBOOT_PAGE_ALIGN	equ 1<<0MULTIBOOT_MEMORY_INFO	equ 1<<1MULTIBOOT_AOUT_KLUDGE	equ 1<<16MULTIBOOT_HEADER_MAGIC	equ 0x1BADB002MULTIBOOT_HEADER_FLAGS	equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO | MULTIBOOT_AOUT_KLUDGEMULTIBOOT_CHECKSUM	equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS); these are in the linker script fileEXTERN code, bss, endALIGN 4mboot:	dd MULTIBOOT_HEADER_MAGIC	dd MULTIBOOT_HEADER_FLAGS	dd MULTIBOOT_CHECKSUM; aout kludge. These must be PHYSICAL addresses	dd mboot	dd code	dd bss	dd end	dd entry;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SECTION .datads_magic:	dd DS_MAGICgdt:; NULL descriptor	dw 0			; limit 15:0	dw 0			; base 15:0	db 0			; base 23:16	db 0			; type	db 0			; limit 19:16, flags	db 0			; base 31:24; unused descriptor	dw 0	dw 0	db 0	db 0	db 0	db 0LINEAR_DATA_SEL	equ	$-gdt	dw 0FFFFh	dw 0	db 0	db 92h			; present, ring 0, data, expand-up, writable	db 0CFh                 ; page-granular (4 gig limit), 32-bit	db 0LINEAR_CODE_SEL	equ	$-gdt	dw 0FFFFh	dw 0	db 0	db 9Ah			; present,ring 0,code,non-conforming,readable	db 0CFh                 ; page-granular (4 gig limit), 32-bit	db 0gdt_end:gdt_ptr:	dw gdt_end - gdt - 1	dd gdt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SECTION .bss	resd 1024stack:

⌨️ 快捷键说明

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