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

📄 boot.asm

📁 从软盘向内存 加载 程序的 asm 源码 开发工具 masm 5.1 结合debug 可以加载很多东西
💻 ASM
字号:
;Program Name: STRAP.ASM
;
CR			EQU	0DH
LF			EQU	0AH
BIO_SEG			EQU	800H
BootAddr		EQU	7C00H
IBMBIO_LenAddr		EQU	55


NumberOfHead_RD		EQU	7C2AH
StartingSector_RD	EQU	21H
NumberOfCylinder_RD	EQU	7C39H
NumberOfSector_RD	EQU	7C3BH
SectorsOfIBMBIO		EQU	21H
SectorOfDataArea	EQU	21H
SectorOfRootDir		EQU	19
;NumberOfDrive		EQU	7DFDH
;


Bootstrap		SEGMENT	'CODE'
			ASSUME	CS:BOOTSTRAP,DS:BOOTSTRAP
			ORG	0
Boot			PROC	FAR
			JMP	CodeBegin
			NOP
OEMMARK			DB	'LIULH3.3'
BytesPerSector		DW	512
SectorsPerCluster	DB	1
ReservedSectors		DW	1
NumberOfFAT		DB	2
TotalOfRootDirectory	DW	224
TotalOfSector		DW	2880
MediaTypeByte		DB	0F0H
SectorsPerFAT		DW	9
SectorsPerTrack		DW	18
NumberOfHead		DW	2
HiddenSectors		DW	0
			DW	0
numSectorsHuge		DW	0
			DW	0
driveNum                DB      0
reserved                DB      0
signature               DB      0
volumeID                DB      '0001'
volumeLabel             DB      'NO NAME    '
fileSysType             DB      'FAT12   '


;
CodeBegin:
	CLI
	XOR	AX,AX
	MOV	SS,AX
	MOV	SP,BootAddr				;建立堆栈指针	
	PUSH	SS
	POP	ES
	PUSH	SS
	POP	DS
;	XOR	DX,DX
;	MOV	SI,offset LOAD+BootAddr			;
;	CALL	MSG					;
;
SystemDisk:
;	XOR	DX,DX
;	MOV	SI,offset READ+BootAddr			;
;	CALL	MSG					;
	MOV	BX,700H					;
;ReadBIO:
;	MOV	AX,DS:StartingSector_RD			;
;	CALL	Set_Para				;
;	MOV	AL, 1					;
;ReadBIO1:
;	CALL	Read_Disk				;

Jmp_IBMBIO:
	MOV	AH,02
	MOV	AL,01
	MOV	DL,0
	MOV	DH,1
	MOV	CH,0
	MOV	CL,16
	INT	13H
	XOR	DX,DX
;	MOV	SI,700H				;
;	CALL	MSG					;
	DB	0EAH					;
	DW	0,BIO_SEG				;
	;JMP	FAR	PTR 10H:0			;
Boot	ENDP

;======================================================================================
;功     能:显示DS:SI制定的以0结尾的字符串
;入口参数:DS:SI指向字符串
;出口参数:无
;======================================================================================
MSG	PROC	NEAR
Output_Info:
	LODSB						;AL<-将要输出的字符
;	OR	AL,AL					;若是字符串结尾府,则直接返回
;	JZ	Return					;
	PUSH	AX
	XOR	AH,AH					;等待键盘按键
	INT	16H
	POP	AX					;
	MOV	AH,0EH					;以电传凡是显示AL指定的字符
	MOV	BX,7					;
	INT	10H					;
	JMP	SHORT	Output_Info			;
Return:
	RET
MSG	ENDP

;=======================================================================================
;功    能:计算请求INT 13H 磁盘操作的入口参数
;入口参数:AX=起始扇区号
;出口参数:无
;=======================================================================================
Set_Para	PROC	NEAR
	XOR	DX,DX					;计算并保存道内扇区号
	DIV	WORD PTR DS:SectorsPerTrack+BootAddr	;
	INC	DL					;
	MOV	DS:NumberOfSector_RD,DL			;
	XOR	DX,DX					;计算圆柱面号和磁头号
	DIV	WORD PTR DS:NumberOfHead+BootAddr	;
	MOV	DS:NumberOfHead_RD,DL			;保存磁头号
	MOV	DS:NumberOfCylinder_RD,AX		;保存圆柱面号
	RET
Set_Para	ENDP

;=======================================================================================
;功    能:读取AL个扇区数的磁盘文件内容
;入口参数:ES:BX指向传送缓冲区,AL=扇区数
;出口参数:无
;=======================================================================================
Read_Disk	PROC	NEAR
	MOV	AH,2					;置读盘操作码
	MOV	DX,DS:NumberOfCylinder_RD		;DX<-圆柱面号
	MOV	CL,6					;
	SHL	DH,CL					;
	OR	DH,DS:NumberOfSector_RD			;道内扇区号
	MOV	CX,DX					;
	XCHG	CH,CL					;
	MOV	DL,0					;DL<-驱动器台号
	MOV	DH,DS:NumberOfHead_RD			;DH<-磁头号
	INT	13H					;请求读磁盘操作
	RET
Read_Disk	ENDP

LOAD		DB 'LOADING......',CR,LF,0
READ		DB 'READING......',CR,LF,0
IO		DB 'IOING......',CR,LF,0
IO1		DB 'IO1ING......',CR,LF,0
;
NumberOfDrive	DB	0				;引导盘驱动器号
		DB	10DH DUP(0)
		DW	0AA55H				;引导扇区标志字

;
Bootstrap	ENDS
		END

⌨️ 快捷键说明

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