Практикум по среде и языку 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, поразмыслим над случившимся. Среда выдает такое сообщение об ошибке в том случае, когда во время исполнения программы вычисляемые данные