bootloader 部分笔记bootloader 比较枯燥,主要是对各个寄存器进行设置,然后进行 BIOS 的 int10H 调用。需要用到一些汇编的知识,这里简要记录一些要点。BIOS int10H第十七个中断向量(interrupt vector),通常在实模式用于设置显示服务。需要配合 AH 一起使用,指定其子函数。清屏功能AH = 06H,向上滚动窗口AL = 00H,这时开启清屏功能BH 指定颜色属性,其余寄存器可暂时忽略(07即为黑底白字)设置 focusAH = 02HBH 为页码DH 为行数DL 为列数显示字符串AH = 13HAL 为写入模式BH 为页码BL 为颜色CX 存放字符串长度DH 为游标坐标行号DL 为游标坐标列号ES:BP 需要设置为字符串的偏移地址汇编要点org 指令,设置程序的起始段,避免再需要的地方手动就设置 0x7c00(主要影响绝对地址寻址指令)。最简单的显示字符串程序共用了代码断和数据段/extra 段,因此数据段放到了最后。org 0x7c00 ; set origin as 0x7c00mov ax, csmov es, ax ; es is equal to cs in this case; using int10h ah=06, al = 0 to clear screenmov ax, 0600hmov bx, 0700h; black background and white colormov cx, 0000hmov dx, 0xffffint 10h; using int10h, ah = 02h to set focusmov ax, 0200hmov bx, 0000hmov dx, 0000hint 10h; show stringmov ax, 1301h; AL = 01 indicates that after display string, the cursor will be the endmov bx, 0007hmov dx, 0000hmov cx, 10; length of stringmov bp, DisplayStringint 10hjmp $DisplayString: db “Hello Boot"times 510 - ($ - $$) db 0db 0x55, 0xaa