引导扇区代码:bootsect.s .globl begtext,begdata,begbss,endtext,enddata,endbss text //文本段 begtext: .data //数据段 begdata: .bss //未初始化数据段 begbss: entry start//关键字 start mov ax, #BOOTSEG mov ds,as //ds=7c00 mov ax,#INITSEG mov es,ax //es=9000 mov cx,#256 //移动256个字 sub si,si sub di,di //ds,es分别是段地址 si,di是源,目的的偏移量,和de es分别构成了完整的源,目的地址 rep movw //把7c00处转到9000的地方 jmpi go, INITSEG //jmpi是间接跳转 ip<–go cs<–INITSEG //go是指这段代码开头到go这个地方的偏移量 //此时代码已经从7c00处挪到9000处了,cs=9000,所以偏移到go+INITSEG实质上就是顺序执行。 go:mov ax,cs mov ds,ax mov es,ax mov ss,ax mov sp,#0xfff00 load_setup: mov dx,#0x0000 mov cx,#0x0002 mov bx,#0x0200 //cx从第二个扇区开始读 mov ax,#0x0200_SETUPLEN int 0x13 //setup要从第二个扇区开始读,要读SETUPLEG个扇区 //BIOS中断 jnc ok_load_setup mov dx,#0x0000 mov ax,#0x0000 int 0x13 j load_setup Ok_load_setup: mov dl,#0x00 mov ax,#0x0800 int 0x13 mov ch,#0x00 mov sectors,cx mov ah,#0x03 xor bh,bh int 0x10 mov cx,#24 mov bx,#0x0007 mov bp,#msgl mov ax,#1301 int 0x10 mov ax,#SYSSEG mov es,ax call read_it jmpi 0,SETUPSEG
msgl:.byte 13,10 .ascll "Loading system.." .byte 13,10,13,10想要改变屏幕上的Loading system… 为GWNH loading… 通过修改 mov cx,#24 mov bx,#0x0007中24为GWNH loading...字符个数
