まだまだ、PBR

seg000:00E0                 sub     di, di
seg000:00E2
seg000:00E2 loc_7CE2:                               ; CODE XREF: seg000:00F3^Yj
seg000:00E2                 push    cx
seg000:00E3                 push    di
seg000:00E4                 lea     si, [bp+46h]
seg000:00E7                 mov     cx, 0Bh
seg000:00EA                 repe cmpsb
seg000:00EC                 pop     di
seg000:00ED                 pop     cx
seg000:00EE                 jz      short loc_7D03
seg000:00F0                 add     di, 20h ; ' '
seg000:00F3                 loop    loc_7CE2

DIレジスタゼロクリア。
CXレジスタ、DIレジスタ、一時退避。
SIレジスタに[BP+46h]の実効アドレス値を転送。"IBMBIO COM"の先頭アドレス。
CXレジスタに即値:0Bhを転送。11文字分。
REPE CMPSB は、ES:DIとDS:SIとを一文字ずつ比較していって、
一致しないか、CXレジスタ分カウントするか、どちらかまで繰り返す。
最後まで一致すれば、loc_7D03へジャンプ
DIレジスタに20h加算する。次のエントリ情報へ。
ルートエントリ最大数分繰り返し。
全部チェックしても一致しなければ、loc_7CF5(終了処理)へ流れる。

seg000:0183 sub_7D83        proc near               ; CODE XREF: seg000:00D5^Xp
seg000:0183                                         ; seg000:0126^Xp ...
seg000:0183                 xor     bx, bx
seg000:0185                 push    ax
seg000:0186                 push    dx
seg000:0187                 call    sub_7D9F
seg000:018A                 mov     ax, es
seg000:018C                 add     ax, 20h ; ' '
seg000:018F                 mov     es, ax
seg000:0191                 assume es:nothing
seg000:0191                 pop     dx
seg000:0192                 pop     ax
seg000:0193                 add     ax, 1
seg000:0196                 adc     dx, 0
seg000:0199                 dec     byte ptr [bp+2Bh]
seg000:019C                 jnz     short sub_7D83
seg000:019E
seg000:019E locret_7D9E:                            ; CODE XREF: sub_7D9F+20^Yj
seg000:019E                 retn

BXレジスタゼロクリア。
AXレジスタ、DXレジスタ、一時退避。
sub_7D9Fをコール。
ESレジスタの内容を20h増やす。(512Byte分進める)
DXレジスタ、AXレジスタ、復元。
AXレジスタの内容に即値:1加算。
DXレジスタの内容にキャリー加算。
[BP+2Bh]の内容を1減らす。
ゼロになるまで繰り返す。
near リターン。

seg000:019F sub_7D9F        proc near               ; CODE XREF: sub_7D83+4^Xp
seg000:019F
seg000:019F ; FUNCTION CHUNK AT seg000:00F5 SIZE 0000000E BYTES
seg000:019F
seg000:019F                 div     word ptr [bp+18h]
seg000:01A2                 inc     dx
seg000:01A3                 mov     cl, dl
seg000:01A5                 xor     dx, dx
seg000:01A7                 div     word ptr [bp+1Ah]
seg000:01AA                 mov     dh, dl
seg000:01AC                 ror     ah, 1
seg000:01AE                 ror     ah, 1
seg000:01B0                 and     ah, 0C0h
seg000:01B3                 or      cl, ah
seg000:01B5                 mov     ch, al
seg000:01B7                 mov     dl, [bp+24h]
seg000:01BA
seg000:01BA loc_7DBA:                               ; CODE XREF: sub_7D9F+25^Yj
seg000:01BA                 mov     ax, 201h
seg000:01BD                 int     13h             ; DISK - READ SECTORS INTO MEMORY
seg000:01BD                                         ; AL = number of sectors to read, CH = track, CL = sector
seg000:01BD                                         ; DH = head, DL = drive, ES:BX -> buffer to fill
seg000:01BD                                         ; Return: CF set on error, AH = status, AL = number of sectors read
seg000:01BF                 jnb     short locret_7D9E
seg000:01C1                 dec     byte ptr [bp+26h]
seg000:01C4                 jnz     short loc_7DBA
seg000:01C6                 jmp     loc_7CF5

AX/[BP+18h]1トラックあたりのセクタ数。
商はAXレジスタに、余りはDXレジスタに格納。
DXレジスタの内容に1を加算。
CLレジスタにDLレジスタの内容を転送。←セクタ
DXレジスタゼロクリア。
AX/[BP+1Ah]ドライブのヘッド数。
DHレジスタにDLレジスタの内容を転送。←ヘッド
AHレジスタの内容を右に2ビット回転。下位2ビットが上位に移動。
AHレジスタの内容と即値:C0hとの論理積を求める。上位2ビットを残してマスク。
CLレジスタの内容とAHレジスタの内容との論理和を求める。←トラックの上位2ビットを含ませる。
CHレジスタにALレジスタの内容を転送。←トラック
DLレジスタに[BP+24h]の内容を転送。←ドライブ
AXレジスタに即値:0x0201を転送。1セクタ分読み込み。
BIOS CALL ディスクサービス呼び出し。
エラーがなければ、locret_7D9Eへジャンプ → そのままリターン。
[BP+26h]の内容を1減らす。シグネチャ
ゼロでなければ、繰り返す。<リトライ
それでもダメなら、エラー終了。