Как использовать int 13 с прерыванием AH = 03h в сборке, чтобы заполнить сектор нулями? - PullRequest
2 голосов
/ 28 марта 2012

Пока у меня есть это:

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

1 Ответ

2 голосов
/ 28 марта 2012

Пока что у вас неверно: -)

  1. AH должно быть 3, а не 2 (2 для чтения).
  2. CL тольковосемь битов, поэтому вряд ли будет удерживать это большое значение honkin '.
  3. Вам необходимо установить AH, AL, CH, CL, DH, DL и ES:BX в соответствии со следующей таблицей:

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

И, если вам когда-нибудь понадобится информация о прерываниях, вам следует поискать «Ральф Браун» в Google.Этот парень создал и поддерживал окончательный список прерываний еще в те дни, когда мы были изолированы от таких вещей.Смотри, например. здесь .

Ваши конкретные потребности могут быть удовлетворены с здесь .

Образец, хотя и не протестированный и написанный в реальном режиме, будет чем-то похожимследующие строки:

      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
...