Если лень перебирать вручную, можно воспользоваться программой
var k,l,r,x,f:integer; begin f := 3001; l := 0; r := 65534; x := (l + r) div 2; k := 1; while (x <> f) and (l < r) do begin writeln(k,' ',l,' ',r,' ',x); k := k + 1; if f < x then r := x - 1 else l := x + 1; x := (l + r) div 2 end; writeln(k,' ',l,' ',r,' ',x); end.
Программы, размещаемые в пассивном запоминающем устройстве (ПЗУ ) компьютера IBM/PC, определяют эффективность работы персонального компьютера в целом. В данной главе мы излагаем самые общие сведения, касающиеся ПЗУ. Мы рассмотрим назначение ПЗУ, специфику анализа и декодирования (реконструкции) хранящейся там информации и, наконец, сравним между собой две первые версии ПЗУ компьютера IBM/PC. Все эти материалы являются базой для последующих пяти глав, в которых функциональные возможности IBM/PC рассматриваются более детально. Здесь важно иметь в виду три аспекта. Все о чем пойдет речь в данной главе в полной мере относится только к IBM/PC и, вообще говоря, не распространяется на все семейство компьютеров, работающих под управлением MS-DOS. Для остальных компьютеров семейства PC эти сведения следует рассматривать применительно к конкретному компьютеру (поскольку каждой модели присущи свои особенности). Тем не менее, имеются все основания считать, что прерывания или вызовы функции обслуживания для большинства компьютеров совпадают. Поэтому, несмотря на возможное изменение адресов программ обслуживания, находящихся в ПЗУ компьютера той или иной модели материалы настоящей и последующих пяти глав сохраняют свою актуальность.
1. 0..65534 -> 32767
2. 0..32766 -> 16383
3. 0..16382 -> 8191
4. 0..8190 -> 4095
5. 0..4094 -> 2047
6. 2048..4094 -> 3071
7. 2048..3070 -> 2559
8. 2560..3070 -> 2815
9. 2816..3070 -> 2943
10. 2944..3070 -> 3007
11. 2944..3006 -> 2975
12. 2976..3006 -> 2991
13. 2992..3006 -> 2999
14. 3000..3006 -> 3003
15. 3000..3002 -> 3001
Если лень перебирать вручную, можно воспользоваться программой
var k,l,r,x,f:integer;
begin
f := 3001;
l := 0;
r := 65534;
x := (l + r) div 2;
k := 1;
while (x <> f) and (l < r) do
begin
writeln(k,' ',l,' ',r,' ',x);
k := k + 1;
if f < x then r := x - 1
else l := x + 1;
x := (l + r) div 2
end;
writeln(k,' ',l,' ',r,' ',x);
end.