'''cpp nasm

; boot.asm

BITS 16 ; 指定使用16位代码 ORG 0x7C00 ; 指定引导加载程序的起始地址为0x7C00

start: cli ; 禁用中断 xor ax, ax ; 将AX寄存器清零 mov ds, ax ; 设置数据段寄存器DS为0x0000 mov es, ax ; 设置额外段寄存器ES为0x0000 mov ss, ax ; 设置堆栈段寄存器SS为0x0000 mov sp, 0x7C00 ; 设置堆栈指针SP为0x7C00,这与引导加载程序的加载位置相同

; 清屏操作
mov ax, 0x0600        ; AH=0x06(滚屏功能),AL=0x00(整屏滚动)
mov bh, 0x07          ; 设置背景颜色和前景颜色(黑底白字)
mov cx, 0x0000        ; 指定左上角的屏幕坐标(0,0)
mov dx, 0x184F        ; 指定右下角的屏幕坐标(24,79)
int 0x10              ; 调用BIOS中断0x10执行清屏操作

; 显示 "Hello" 字符串
mov si, hello_msg     ; 加载字符串地址到SI寄存器

print_string: lodsb ; 加载SI寄存器指向的字节到AL,并将SI+1 cmp al, 0 ; 比较AL寄存器的值是否为0(字符串结束符) je hang ; 如果是0,跳转到hang mov ah, 0x0E ; AH=0x0E(BIOS teletype输出字符功能) mov bh, 0x00 ; 页码,通常设置为0x00 mov bl, 0x07 ; 设置显示字符的颜色(黑底白字) int 0x10 ; 调用BIOS中断0x10输出字符 jmp print_string ; 继续打印下一个字符

hang: jmp hang ; 停机,陷入死循环

hello_msg db 'Hello', 0 ; 定义要显示的字符串,0为结束符

times 510 - ($ - $$) db 0 ; 填充到512字节 dw 0xAA55 ; 引导扇区签名,标识引导扇区的结尾

'''

nasm -f bin -o boot.bin boot.asm