Солнце на краю мира. Антон Шаманаев
Чтение книги онлайн.

Читать онлайн книгу Солнце на краю мира - Антон Шаманаев страница 38

СКАЧАТЬ операций, где что-то «ходит по краю». Потенциальная нехватка памяти или превышение разрядности регистра… Из этого списка выбрал шорт-лист наименее элементарных ситуаций, чтобы проверить и отсечь их в первую очередь.

      Стенка шкафа, который давеча одарил меня старомодным пиджаком Деева, была запорошена белой пылью, и я стал пальцем рисовать на ней «кирпичики»: регистры – друг за другом в ряд, в сторонке – стек, сегменты памяти. Зарисовывал каждую краевую ситуацию стрелочками: что откуда берется и куда пишется. Стенка быстро пришла в негодность, однако я добрался до операции с составным регистром и вдруг задумался: а как физически он устроен?

      Не поленился, отыскал на портале инженерную спецификацию процессора, перерисовал с нее кирпичики регистров – поставил их в правильном порядке. Из шестнадцати регистров две пары идут друг за другом и образуют два составных регистра – это os:op и qs:qp. И туда, и туда обычно кладутся пойнтеры – координаты объектов, с которыми в данный момент происходит работа. В первом из этих составных регистров у меня объект-образец, в другом – результирующий объект. С ним я делаю MSA, и поэтому их, объектов-молекул, в реальности очень много. И координаты их всех проходят поочередно через qs:qp. А что происходит, если составной регистр переполняется? Поднимается флаг переполнения, как обычно. На такой случай предусмотрено особое сообщение, но оно не появляется. Лог сообщений пуст. Значит, qs:qp не переполняется.

      Стоп! Но ведь у меня объектов – на много порядков больше штук, чем способен вместить этот регистр! Как он может не переполняться?.. В памяти всплыл афоризм времен молодого Опаляна, когда-то висевший на двери Дэвидсона: «Излишнее доверие к рукотворному затмевает разум». Дорогой мой.

      Идея довольно безумная: переполнение регистра – хрестоматийная штука, которую отлавливают на первых же инженерных тестах. Потом я вспомнил: регистры qs и qp добавились позже. Наши ребята сами добавили их в процессор для серии Multus – это третье поколение. В первом поколении – Warper – стоял серийный процессор от SP Laboratories, и были лишь стандартные регистры. Начиная с Multus и до текущего поколения – шестого по счету – мы заказываем процессоры с особой архитектурой под наши нужды.

      Бросив художества, я сворганил маленькую программку – тест на переполнение составного регистра qs:qp. Программа запустилась и завершилась без ошибок.

      Я похолодел. Куда же девается лишняя старшая единичка при переполнении? Куда-то ведь она девается! Глянул на шкаф – перед qs и qp у меня был намалеван «кирпичик» es – сегментный регистр, который на практике используется редко. Согласно спецификации, регистры qs и qp физически пристегнуты именно к es. Я еще раз запустил тестовую программку и посмотрел, что на выходе получается в es. И увидел там свою единичку…

      Ватными пальцами я набрал Ави Новшека. Может ли переполняться составной регистр qs:qp и гадить куда-то? Быть не может совсем СКАЧАТЬ