第一个OS,一些流水线解释

时间:2013-01-25 21:11:24

标签: assembly x86 bootloader bios

我正在使用NASM编写我的第一个OS引导扇区。我有它的工作,它只显示“Hello OS world!”用红色字母。很简单。我已将boot.asm转换为boot.bin,并将其转换为boot.img。我正在使用VMWare播放器,我将boot.img作为软盘驱动器安装并从那里启动它工作得很好。但是这个汇编代码有几行是我不明白的目的。

       org  07c00h                         
       mov  ax, cs
       mov  ds, ax
       mov  es, ax
       call DispStr         
       jmp  $           
   DispStr:
       mov  ax, BootMessage
       mov  bp, ax 
       mov  cx, 16  
       mov  ax, 01301h      ; 
       mov  bx, 000ch       ;
       mov  dl, 0           ;
       int  10h             ;
       ret
   BootMessage:     db  "Hello, OS world!"
       times    510-($-$$)  db  0   
       dw   0xaa55              ; 

以分号结尾的行是我不理解的行。我做了很多谷歌搜索,并能够弄清楚其他的东西。 我很擅长写作大会。例如,我知道mov ax,01301h01301h移动到AX寄存器中。但我不明白为什么,或01301h如何重要。我猜他们有点像格式化字符串的参数,但这只是猜测。任何和所有的帮助将不胜感激。

1 个答案:

答案 0 :(得分:9)

查看this page about INT 10H了解详情。这些数字是控制该中断行为的参数。在你的情况下:

ax = 0x1301 -> ah = 0x13 al = 0x01
bx = 0x000c -> bh = 0x00 bl = 0x0c
cx = 16
dl = 0x00

AH=0x13表示'写字符串',带有各种其他控制参数:

AL = write mode -> 1
BL = color -> 0x0c = light red
BH = page number -> 0
CX = string length -> = 16
DH = row -> 0
DL = column -> 0
ES:BP = offset of string -> pointer to BootMessage string