"П.Нортон "Программно-аппаратная организация компьютера 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, |
|
|