4

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,01301h​​スタに移動することを知っています。しかし、なぜ、またはどのように重要なのかわかりません。文字列をフォーマットするためのパラメーターに似ていると思いますが、それは単なる推測です。ありとあらゆる助けをいただければ幸いです。01301hAX01301h

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 に答える