4

我正在使用 NASM 编写我的第一个操作系统引导扇区。我让它工作了,它只显示“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,01301h将 移动01301hAX寄存器中。但我不明白为什么或如何01301h重要。我猜它们有点像格式化字符串的参数,但这只是一个猜测。任何和所有的帮助将不胜感激。

4

1 回答 1

9

查看有关 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
于 2013-01-25T21:13:11.353 回答