mam problem z odczytem blokow MCB - co prawda mam gotowy program jednak nie moge zrozumiec pewnych lini.

function mcb:word;
var r:registers;
begin
r.ah:=$52;
intr($21,r);
mcb:=memw[r.es:r.bx-2];
end;

procedure pokaz(const adr:word);
begin
write('Rodzaj bloku: ',chr(mem[adr:0]),' ');
write('Proces: ', memw[adr:1]:6,' ');
write('Rozmiar bloku: ', memw[adr:3]:6,' ');
writeln('Nazwa: ',chr(mem[adr:8]),chr(mem[adr:9]),chr(mem[adr:10]),
chr(mem[adr:11]),chr(mem[adr:12]),chr(mem[adr:13]),
chr(mem[adr:14]),chr(mem[adr:15]));
end;

procedure all;
var
adr:word;
begin
adr:=mcb;
while chr(mem[adr:0]) <> 'Z' do
begin
pokaz(adr);
adr:=(adr+memw[adr:3])+1;
end;
pokaz(adr);
end;

konkretnie tej lini
adr:=(adr+memw[adr:3])+1;
czyli o ile sie nie myle wyznaczanie adresu nastepnego bloku MCB, memw daje 2 bajty, ale czemu akurat sa to bajty 3ci i 4ty? Oraz po nawiasie +1? :) te pytania mi spac nie daja :) jesli ktos wie czemu tak jest prosze o odpowiedz. pozdrawiam