Скачиваний:
109
Добавлен:
21.01.2014
Размер:
2.38 Mб
Скачать

4. Контрольные вопросы

                  1. Назначение и синтакис операторов DECLARE, SHARED, STATIC, FUNCTION ... END FUNCTION, SUB ... END SUB, CALL ?

Вопросы по процедуре выполнения индивидуального задания.

5. Библиографический список

                  1. Бобровский С. Программирование на языке QBASIC для школьников и студентов. — М.: Десс; Инфорком-Пресс, 1999. - 208 с.

                  1. Зельднер Г.А. Программируем на языке QuickBASIC 4.5. - М: ABF, 1996. - 432 с.

                  1. Введение в программирование на языке Microsoft BASIC: Учебное пособие / Ю.Я. Максимов, С.В. Осипов, А.В. Потемкин, Щ.С. Симоненков. - М.: ”Диалог-МИФИ”,1991. - 176 с.

Министерство образования

Российской Федерации

Тульский государственный университет

Кафедра “Инструментальные и метрологические системы”

Информатика

ЛАБОРАТОРНАЯ РАБОТА 16

ОРГАНИЗАЦИЯ ДОСТУПА К АБСОЛЮТНЫМ АДРЕСАМ

для студентов очного обучения

Тула 2000 г.

1. Цель и содержание работы

Целью работы является изучение принципов управления памятью, передачи параметров в процедуры написанные на другом языке, вызова процедуры в машинных кодах, доступа к клавишам переключателям и модификаторам.

Полученные знания и навыки необходимы для выполнения других лабораторных работ, а также практической деятельности.

2. Порядок выполнения работы

                  1. Изучить теоретическую часть.

                  1. Получить задание у преподавателя.

                  1. Выполнить задание.

                  1. Оформить отчет.

                  1. Защитить работу.

3. Теоретическая часть

Операторы и функции обеспечивающие доступ к

абсолютным адресам.

DEF SEG

Функция

Устанавливает адрес текущего сегмента.

DEF SEG [ = адрес ]

  • адрес - адрес сегмента, используемый BLOAD, BSAVE, CALL ABSOLUTE, PEEK или POKE; значение в пределах от 0 до 65535.

  • Если адрес опущен, DEF SEG переустанавливает адрес текущего сегмента в сегмент данных, принимаемый по умолчанию. После выполнения оператора DEF SEG с указанием адреса, необходимо выполнить оператор без параметров для установления текущего сегментного адреса самого языка.

  1. DEF SEG = 0

...

DEF SEG

PEEK

Функция

POKE

Оператор

PEEK возвращает значение байта, хранящегося в указанном месте памяти.

POKE записывает значение байта в указанное место памяти.

PEEK(адрес)

POKE адрес, байт%

  • адрес - позиция байта относительно адреса текущего сегмента, установленного DEF SEG; значения в пределах от 0 до 65535;

  • байт% - значение байта для записи в указанное место памяти; значения в пределах от 0 до 255.

  1. DEF SEG = 0 ’ Клавиша NumLock включена

POKE &H417, PEEK(&H417) OR 32

DEF SEG

DO: LOOP WHILE INKEY$ = “”

SADD

Функция

Возвращает адрес указанной символьной переменной.

SADD (символьная_переменная)

  • символьная_переменная - указывает символьную переменную, размещение в памяти которой требуется узнать.

  • Часто используется для передачи параметров в процедуру, написанную на другом языке, или для вызова процедуры в машинных кодах, записанную в символьную строку.

  • Функция возвращает адрес символьной строки как смещение от текущего сегмента данных. Это двухбайтовое целое число.

  • Агрумент может быть символьной переменной или элементом символьного массива но не строкой фиксированной длины.

  • Во избежании ошибок нельзя добавлять символов в начало или конец строки, передаваемой фунциям SADD и LEN.

SETMEM

Функция

Изменяет размер памяти, используемый дальними объектами, - динамическими массивами и внешними таблицами.

SETMEM (num)

  • num - числовое выражение большее, меньшее или равное нулю.

  • Если числовое выражение отрицательное, SETMEM уменьшает используемую память на указанное количество байт, в противном случае - пытается увеличить.

  • Функция возвращает общее число байт дальней памяти, либо(при нулевом аргументе) - текущее значение памяти.

  • SETMEM добавляет и отнимает столько байт, сколько возможно.

  • Первый запуск функции не увеличит дальнюю память, так как она уже выделена при запуске программы.

VARSEG

VARPTR

VARPTR$

Функции

VARSEG возвращает адрес сегмента переменной.

VARPTR возвращает адрес смещения переменной.

VARPTR$ возвращает строковое представление адреса переменной для использования с операторами DRAW и PLAY.

VARSEG(переменная)

VARPTR(переменная)

VARPTR$ (имя_переменной)

  • переменная - может быть любого типа, включая записи или элементы записей;

  • имя_переменной - имя переменной для операторов DRAW и PLAY.

  • Функция VARSEG возвращает сегментный адрес переменной в виде целого числа без знака.Функция VARPTR возвращает смещение относительно сегментного адреса в виде целого числа без знака.

  • Если переменная не определена до вызова VARSEG или VARPTR, она создается и возвращается ее адрес. Для символьной переменной эти две функции возвращают адре первого байта описателя.

  • Не используйте значения, возвращенные VARSEG ,VARPTR и VARPTR$ после выполнения операторов и вызовов функций, поскольку операторы BASIC изменяют местоположение переменных в памяти.Для получения адреса массива задавайте в качестве аргумента функций его первый элемент.

  1. Scale$ = "CDEFGAB"

PLAY "L16"

FOR i% = 0 TO 6

PLAY "O" + STR$(i%)

PLAY "X" + VARPTR$(Scale$)

NEXT i%

FRE

Функция

Возвращает объем (в байтах) доступной или неиспользуемой памяти.

FRE(числoвое_выражение)

FRE(символьное_выражение$)

  • числoвое_выражение - значение указывающее тип памяти:

  • -1 - размер наибольшего массива (несимвольного), который Вы можете создать;

  • -2 - неиспользуемое стековое пространство;

  • любое другое число - доступное строковое пространство;

  • символьное_выражение$ - любое символьное выражение. FRE сжимает свободное строковое пространство в один блок, а затем возвращает объем доступного строкового пространства.

  1. PRINT "Строковое пространство", FRE("")

PRINT "Неиспользуемое стековое пространство", FRE(-2)

PRINT "Пространство массива", FRE(-1)