如何在程序集中使用带有AH = 03h中断的int 13来用零填充扇区?

时间:2012-03-28 00:29:11

标签: assembly x86 interrupt bios

到目前为止我有这个:

mov ah,02h
mov cl,11001100001111011101000b ;6,692,584 in dec
mov dl,0
int 13

1 个答案:

答案 0 :(得分:2)

到目前为止,你所拥有的不正确: - )

  1. AH应该是3而不是2(2是阅读)。
  2. CL只有8位,所以不太可能持有那个大的'honkin'值。
  3. 您需要按照AHALCHCLDHDLES:BX进行设置下表:

  4. AH     03h
    AL     Number of sectors to write
    CH     Track number
    CL     Sector number
    DH     Head number
    DL     Drive number
    ES:BX  Buffer to write
    

    而且,如果您需要有关中断的信息,您应该谷歌“Ralf Brown”。在我们与这些东西隔离之前的几天里,这个人创建并维护了最终的中断列表。例如,请参阅。 here

    您可以通过here来满足您的具体需求。

    虽然未经测试并以实模式编写,但样本将如下所示:

          mov  ax, 0301h           ; cmd 3 (write sector), 1 sector
          mov  cx, 0001h           ; track 0, sector 1
          mov  dx, 0000h           ; head 0, drive 0
          mov  es, segment buff    ; segment and offset of buffer
          mov  bx, offset buff
          int  13h                 ; make the call
          jc   errp                ; detect error
          ret
    
    errp:                          ; process error here
          ret
    
    buff: db   0(256)              ; buffer to write