因为有可能在0x7c00处放东西所以将自己拷贝到0x90000处去执行
SETUPLEN = 4
BOOTSEG = 0x7c0
INITSEG = 0x9000
SETUPSEG = 0x9020
SYSSEG = 0x1000
ENDSEG = SYSSEG + SYSSIZE
.text
.globl start/*程序从start处开始运行*/
.code16
start:
mov $BOOTSEG,%ax //将ds段寄存器设置为0x07c0
mov %ax,%ds
mov $INITSEG,%ax //将es段寄存器设置为0x9000
mov %ax,%es
mov $256,%cx
sub %si,%si
sub %di,%di
rep
movsw
jmpl $INITSEG,$code
msg:
.string "Hello world!"
code:
mov %cs,%ax
mov %ax,%ds
mov %ax,%es
mov %ax,%ss
mov $0x400,%sp
call DispStr/*调用显示字符串函数*/
loop0:/*无限循环*/
jmp loop0
DispStr:
mov $msg ,%ax
mov %ax ,%bp/*es:bp = 串地址*/
mov $12 ,%cx/*cs = 串长度*/
mov $0x1301,%ax/*ah=13是功能号表示显示字符串 ,al=01是显示输出方式*/
mov $0x000c,%bx/*bh=0是0页,bl=0ch高亮 黑底红字*/
mov $0 ,%dl/*0行0列*/
int $0x10
ret
.org 0x1fe, 0x90
.word 0xaa55