Hi,
Also ich kopiers einfach mal hier rein. Vielleicht hilfts dir ja:
  floppy_reset:
      xor ax,ax
      xor dl,dl
      int 13h
      jc floppy_reset ; wenns nicht geklappt hat nochmal versuchen
    ret
    
    ;[DESC]  Konvertiert eine LBA Sektorangabe in das CHS Format
    ;        Siehe --> http://lowlevel.brainsware.org/wiki/index.php/LBA
    ;
    ; [IN]     #1 = Linearer Sektor (#1 = 1. Stackparameter)
    ; [OUT]  ax = Pointer zu einer CHS struktur
    lba_to_chs:
      push bp
      mov bp, sp
    
      mov ax, [bp+0x04]
    
      xor dx,dx
      mov cx,36
      div cx
      mov [0xD000],ax ; = C
      
      mov ax,dx
      xor dx,dx
      mov cx,18
      div cx
      mov [0xD002],ax ; = H 
      
      inc dx
      mov [0xD004],dx ; = S
        
      mov ax,0xD000
      pop bp
    ret 2 
    ; [IN]    #1  = Startsektor (LBA Format => linear)
    ;         #2 = Anzahl der zu lesenden Sektoren
    ;       
    ;         #3  = Zieldatensegment
    ;         #4  = Offset
    _floppy_read:  
      push bp
      mov bp, sp
    
      floppy_reset
    
      lba_to_chs word [bp+0x04]
       
      mov ch, byte [0xD000]    ; Zylinder nach ch
      mov dh, byte [0xD002]    ; Kopf nach dh
      mov cl, byte [0xD004]    ; Sektor nach cl  
    
      mov al,byte [bp+0x06]    ; Anzahl der Sektoren die gelesen werden sollen nach AH
    
      mov dl, 0    ; Diskettenlaufwerk = 0
    
      mov bx, word [bp+0x08]
      mov es, bx
    
      mov bx, word [bp+0x0A]
    
      mov ah, 0x02  
      int 13h      
    
      pop bp
    ret 8
Ich habe mir dann für floppy_read ein Makro definiert:
%macro floppy_read 4
    push %4  ; Offset
    push %3  ; Zielsegment
    push %2  ; Count
    push %1  ; Sektor  (LBA)
    call  _floppy_read
%endmacro
Das ganze kann man dann so aufrufen:
floppy_read 0, 1, 0xFFFF, 0x0010 ; Sektor 0 an Adresse 0x100000 (1MB) lesen  
das ganze kann man natürlich auch inne schleife packen.. muss halt immer den ersten parameter hochzählen und die Adresse um 512 Bytes erhöhen..
Lg
Cjreek