📄 load.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 + -