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

📄 load.asm

📁 一个最简单的操作系统,boot用NASM写的,使用最简单的汇编知识,大家下载后自己看吧
💻 ASM
字号:
;a loader for my Shyna 
;2004 yaosihai
KERNEL_DATA_SEGMENT EQU 9000h;temp
KERNEL_CODE_SEGMENT EQU 8000h
.386p
code segment use16
	assume cs:code,ds:code

start:
	;temp stack 9000:9000h
        mov ax,9000h
        mov ss,ax
        mov sp,09000h

        mov bx,cs
	mov ds,bx
	lea si,msgOpenFile
	call show_string;

	call open_knl_file	;ax=return
	.if ax==0
		lea si,msgCannotOpenFile
		call show_string
	.endif
	mov pFileHandle,ax	;save ax

	lea si,msgReadFile
	call show_string

	call read_and_move_knl_file
	call close_file
	

        
next1:
	lea si,msgNowJumpingToLoader
	call show_string;

	mov ax,0
	mov ss,ax
	mov bx,cs
	mov ds,bx
	
	db 0eah
	dw 0000h
	dw 2000h
	

	
;move data in code segment
move_data_in_code	proc	near
	ret
	
move_data_in_code	endp

;read_knl_file 
read_knl_file	proc	near
	
	
	mov bx,pFileHandle
	mov ah,03fh
	mov cx,1
	mov dx,offset strKnlFileData
	int 21h
	
	ret
read_knl_file	endp

read_and_move_knl_file	proc	near
read_again:
	call read_knl_file
        .if ax==1
	call move_knl_file_data
	jmp read_again
	.endif
	ret
read_and_move_knl_file	endp

move_knl_file_data	proc	near
	push ax
	push di
	mov ax,2000h
	mov es,ax
	mov al,strKnlFileData
	mov di,pFilePointer
       ; .if di>=200h
        ;mov byte ptr es:[di-200h],al
       ; .endif
	mov byte ptr es:[di],al
	inc pFilePointer
	pop di
	pop ax
	ret
move_knl_file_data endp


	


;open knl file	
open_knl_file	proc	near	
	mov ah,03dh
	mov al,2h	;read
	mov dx,offset strKnlFile
	int 21h		;read it
			;ax = handle
	ret
open_knl_file	endp
	
close_file	proc	near
	mov ah,3eh
	mov bx,pFileHandle
	int 21h
	ret
close_file	endp

show_string proc	near
;Input si=offset of char string
pusha
M_014B: 
LODSB 
CMP AL,00 
JZ M_015B 
PUSH SI 
MOV BX,0007 
MOV AH,0EH 
INT 10H
POP SI 
JMP M_014B 
M_015B:
popa
ret
show_string	endp


strKnlFile db 'os.bin',00
strKnlFileData db 0
pFileHandle dw 0
pFilePointer dw 0000h

msgOpenFile db 'Opening file...',00
msgCannotOpenFile db 'Cannot open file.' ,00
msgNowJumpingToLoader db 'Now jumping to loader.',00
msgReadFile db 'Reading File...',00
code ends


	end start

	
	

⌨️ 快捷键说明

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