"П.Нортон "Программно-аппаратная организация компьютера IBM PC"" - читать интересную книгу автора

устанавливаем значения соответствующих регистров; 7-регистры обеспечивают
доступ к большому обьему памяти, чем необходимо; 8-избыток

Если программа не изменяет содержимого своих регистров сегментов, то
она может использовать только 64К данных и кодовую часть обьемом 64К. С
другой стороны, если программа будет манипулировать содержимым регистров
сегментов, то она сможет работать с данными любого обьема, вплоть до
1024К. Может использоваться любой из режимов работы, но на практике обычно
фиксируют содержимое регистра сегмента данных и при необходимости изменяют
содержимое регистра кодового сегмента. Такой способ организации работы
поддерживается набором команд микропроцессора 8088, обеспечивающим очень
удобный способ загрузки регистра кодового сегмента CS, путем использования
команд FARCALL и FARRET.
Практические результаты такой организации выразились в том, что ДОС и
языковые процессоры используют программные соглашения, которые позволяют
увеличивать обьем программ практически неограниченно, в то время как их
адресуемая область данных ограничена 64К. Вы легко заметите это
ограничение, работая с Паскалем или компилятором Бейсика. Для
"встроенного" интерпретатора Бейсика для IBM/PC собственно выполняемой
программой является сам интерпретатор, а то что Вы считаете своей
программой на Бейсике фактически является частью данных интерпретатора.
Таким образом, для интерпретатора Бейсика суммарный обьем кодовой части и
данных Вашей программы не должен превышать 64К, которые позволяет
адресовать регистр данных DS.
Как Бейсик, так и Паскаль лишь до определенной степени позволяют
манипулировать сегментированными адресами. Вы можете непосредственно
изменять содержимое регистров CS,DS,SS и ES-языковой процессор должен
управлять этими регистрами, иначе все может совершенно запутаться. Однако,
определенный способ использования в программах сегментированной адресации
все же имеется.
Ниже приводится описание использования такого способа в Бейсике.
Раздел сегмента может быть определен с помощью оператора DEFSEG. Некоторые
языковые средства Бейсика, например, операторы PEEK и POKE, работают с
адресами относительными к значению, заданному оператором DEFSEG.
Например, если взять упоминавшийся выше адрес 2222:3333, то на
бейсике доступ к его значению может осуществляться следующим образом:


10 DEFSEG=$H2222 'установить значение сегмента равным
шестнадцатиричных 2222
20 Х=PEEK(&H3333)' выбрать значение, смещенное на 3333
шестнадцатиричных
30 REM чисто для примера проверяем в каком регистре за дан код буквы
и если она в нижнем регистре, то переводим ее в верхний регистр
40 IF(CHR$(X)>="a")AND(CHR$(X)<="z")THEN POKE&H3333,(X-32)


Таким образом, в программе на Бейсике доступ к любой ячейке памяти
осуществляется с помощью комбинации операторов DEF SEG и PEEK или POKE.
Работа с ними встречается в листингах программ 1.1, 3.1 и 8.1,