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

📄 boot_r.asm

📁 一个最简单的操作系统,boot用NASM写的,使用最简单的汇编知识,大家下载后自己看吧
💻 ASM
字号:

[BITS 16]              

BOOTSEG 	equ 07C0H
SYSSEG 		equ 01000H		
SYSLEN 		equ 8
SETUPSEG	equ	0x9000

start:
;进行段转移来设置各REG为BOOTSEG
;	jmp BOOTSEG:go
;go:
;	mov ax,cs
;	mov ds,ax
;	mov es,ax
;	mov ss,ax
;	mov sp,0x400

;------------------搬移自己到0x90000处---------------
	mov	ax,BOOTSEG
	mov	ds,ax
	mov	ax,SETUPSEG
	mov	es,ax
	mov	cx,128
	xor si,si
	xor	di,di
	rep     movsd
    jmp	SETUPSEG:go
;--------------------------------

;------------------显示信息函数------------------
;功能描述: 在Teletype模式下显示字符串 
;入口参数: AH=13H
;BH=页码
;BL=属性(若AL=00H或01H)
;CX=显示字符串长度
;(DH、DL)=坐标(行、列)
;ES:BP=显示字符串的地址 AL= 显示输出方式 
; 0——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变 
; 1——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变 
; 2——字符串中含显示字符和显示属性。显示后,光标位置不变 
; 3——字符串中含显示字符和显示属性。显示后,光标位置改变 
; 
;出口参数: 无 
show_message:
	mov	cx,message_end-message
	mov	bx,0x0007	; page 0, attribute 7 (normal)
	mov	bp,message
	mov	ax,0x1301	; write string, move cursor
	int	0x10
	ret
;--------------------------------------------------------------
go:
	mov ax,cs
	mov ds,ax
	mov es,ax
	mov ss,ax
	mov sp,0x400		;堆栈大小为200h=512B
	
;---------------------显示字符串3000次My os is loading---------------
	mov	cx,3000
loop1:
	push	cx
	call	show_message
	pop	cx
	dec	cx
	jnz	loop1

;---------从A盘第2个扇区起读入SYSLEN个扇区到SYSSEG-----------
;BIOS的int 0x13中断调用
;入口参数: AH=02H
;AL=扇区数
;CH=柱面
;CL=扇区
;DH=磁头
;DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
;ES:BX=缓冲区的地址 
;出口参数: CF=0——操作成功,AH=00H,AL=传输的扇区数,
;否则,AH=状态代码, 
load_system:
	mov dx,0
	mov cx,2
	mov ax,SYSSEG
	mov es,ax
	mov bx,0
	mov ax,0x200+SYSLEN
	int 0x13
	jnc ok_load

;如果不成功,磁盘系统复位
	mov ah,0
	int 0x13
	jmp load_system
ok_load:
	
	jmp	SYSSEG:0 ;跳到SYSEG:0处去执行,也就是os.bin被装入内存的首地址


message:
	;显示信息
	db "My OS is loading..."
	db 13,10,13,10
message_end:
	db 0
	
times 510-($-$$) db 0
dw 0xAA55

⌨️ 快捷键说明

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