Практикум по среде и языку QBasic 127

разнообразные значения, читать из ОЗУ содержимое байтов, которыми закодировано это число, по ним попытаемся вычислить его значение. Критерием правильности нашего понимания является совпадение вычисленного значения с исходным. Исполнив в окне Immediate строку

CLS:А%=0:PRINT LEN(А%),

убедимся, что целое число занимает два байта. Затем перейдем в окно Untitled и введем следующую программу:

CLS 'очистка экрана

А% = 0 'присвоение значения переменной

PRINT A% 'вывод значения на экран

рад& = VARSEG(A%) 'определение сегмента

adr6 = VARPTR(A%) 'определение смещения

DEFSEG = радб 'задание сегмента для чтения из ОЗУ

В0% = PEEK(adr6) 'чтение младшего байта

В1% = PEEK(adr& + 1) 'чтение старшего байта

PRINT B0%, В1% 'вывод значений байтов на экран

В этой программе переменной A% приписывается некоторое значение (пока это 0, но в дальнейшем мы будем подставлять и другие значения). Затем получаются значения кодов сегмента и смещения (то есть адрес этой переменной) и по полученному адресу производится чтение и вывод на экран содержимого двух ячеек, то есть числовых значений B0% и В1%.

Исполнив программу, увидим, что для нулевого числа оба байта B0% и В1% нулевые. Присваивая числу A% значения 1 и 256 и запуская программу вновь, выясним, что .в байте B0% записаны младшие разряды числа, а в байте В1% — старшие.

Запомните эту особенность кодирования целых чисел! В системе команд компьютеров, совместимых с IBM PC, имеются команды работающие с парами байтов, записанных в соседних ячейках ОЗУ. Этот 16-разрядный двоичный код называется словом, значение адреса слова всегда четное. При этом младший байт слова хранится по адресу, значение которого совпадает с адресом слова, а адрес старшего байта на 1 больше.

Поскольку единица старшего байта по произведенному нами опыту имеет в 256 раз большее значение, чем единица младшего, заменим последнюю строку программы на следующую:

PRINT B0% + 256 * В1% 'вывод значения числа

Если кодирование числа байтами ОЗУ понято правильно, то эта строка должна вывести то же значение, которое присвоено числу A%. Запуская полученную программу для любых допустимых положительных значений, удостоверимся в правильности понимания кодирования целых чисел. Однако попытка проверить работу этой программы при любом отрицательном числе приводит к появлению таблички с надписью:

Overflow — переполнение.

Выйдя из этой ситуации посредством нажатия клавиши Enter, поразмыслим над случившимся. Среда выдает такое сообщение об ошибке в том случае, когда во время исполнения программы вычисляемые данные