|
Для
"встроенного" интерпретатора Бейсика для IBM/PC собственно
выполняемой программой является сам интерпретатор, а то что
Вы считаете своей программой на Бейсике фактически является
частью данных интерпретатора. Таким образом, для
интерпретатора Бейсика суммарный обьем кодовой части и данных
Вашей программы не должен превышать 64К, которые позволяет
адресовать регистр данных DS.
Как Бейсик, так и Паскаль лишь до определенной степени
позволяют манипулировать сегментированными адресами. |
системы управления базой данных |
|
|
Вы
можете непосредственно изменять содержимое регистров CS,DS,SS
и ES -языковой процессор должен управлять этими регистрами,
иначе все может совершенно запутаться. Однако, определенный
способ использования в программах сегментированной адресации
все же имеется.
Ниже приводится описание использования такого способа в
Бейсике. |
системы управления базой данных |
|
|
Раздел сегмента может быть определен с помощью
оператора DEFSEG. Некоторые языковые средства Бейсика,
например, операторы PEEK и POKE, работают с адресами
относительными к значению, заданному оператором DEFSEG.
Например, если взять упоминавшийся выше адрес 2222:3333,
то на бейсике доступ к его значению может осуществляться
следующим образом:
10 DEFSEG=$H2222 'установить значение сегмента равным
шестнадцатиричных 2222
20 Х=PEEK(&H3333)' выбрать значение, смещенное на 3333
шестнадцатиричных
30 REM чисто для примера проверяем в каком регистре за-
дан код буквы и если она в нижнем
регистре, то переводим ее в верхний
регистр
40IF(CHR$(X)>="a")AND(CHR$(X)<="z")THEN POKE&H3333,(X-32)
Таким образом, в программе на Бейсике доступ к любой
ячейке памяти осущес твляется с помощью комбинации операторов
DEF SEG и PEEK или POKE. |
словарь |
|
| 
win архиваторы, Архиваторы, русско английский словарь, архиватор winzip, антивирус касперского, .
прокси сервера
|
Следует понять, что эти регистры совсем не
обязательнодолжны указывать на сегменты памяти, расположенные
далеко друг от друга. Они могут указывать на любые ячейки,
находящиеся далеко или близко друг от друга и даже
располагающиеся в одном разделе. Если необходимо всего пару
тысяч байт для размещения программы и данных, кодовый сегмент
и сегмент данных могут располагаться рядом. И хотя фрагменты
кодового сегмента и сегмента данных используются при
выполнении программы по-разному, 64К-байтные области,
адресуемые соответствующими регистрами сегментов, могут
отсекаться. На рис.3.2 показано как эти три сегмента -
кодовый,данных и стека - могут использоваться и как области
этих сегментов могут пересечься.
***
Рис.3.2. Сегменты кода, данных и стека:
1-регистр сегмента; 2-указывает 64К памяти;
2-нам требуется; 3-16К кодовой части; 4-32К данных;
5-8К стека; 6-мы выделяем для них место в памяти и
устанавливаем значения соответствующих регистров;
7-регистры обеспечивают доступ к большому обьему памяти, чем
необходимо; 8-избыток
Если программа не изменяет содержимого своих
регистров сегментов, то она может использовать только 64К
данных и кодовую часть обьемом 64К. С другой стороны, если
программа будет манипулировать содержимым регистров
сегментов, то она сможет работать с данными любого обьема,
вплоть до 1024К. Может использоваться любой из режимов
работы, но на практике обычно фиксируют содержимое регистра
сегмента данных и при необходимости изменяют содержимое
регистра кодового сегмента. Такой способ организации работы
поддерживается набором команд микропроцессора 8088,
обеспечивающим очень удобный способ загрузки регистра
кодового сегмента CS, путем использования команд FARCALL и
FARRET.
Практические результаты такой организации выразились в
том, что ДОС и языковые процессоры используют программные
соглашения, которые позволяют увеличивать обьем программ
практически неограниченно, в то время как их адресуемая
область данных ограничена 64К. Вы легко заметите это
ограничение, работая с Паскалем или компилятором Бейсика.
|
|
|