logo
ZX-Review-1992-01-12

4.1Запуск программ в кодах.

Отом, как запустить программу в машинных кодах, наверное, знают все пользователи "ZX SPECTRUM". Эта информация изложена во всех справочниках по данному типу компьютеров.

Вкратце напомним основные положения данной системы команд.

Для вызова подпрограмм в машинных кодах используется функция USR, составленная из ключевых слов английского языка:

User SubRoutine

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

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

Нас интересует случай применения USR для вызова подпрограмм в машинных кодах. Для запуска данной подпрограммы USR используется с ключевым словом Бейсика RANDOMIZE или PRINT. После комбинации этих слов указывается цифровая величина, например:

90 RANDOMIZE USR 30000

100 PRINT USR 45000

Если вместо определенного цифрового значения используется выражение, то оно должно быть заключено в скобки. Указанная величина округляется до ближайшего целого числа это адрес памяти, с которого и должна стартовать записанная машинными кодами подпрограмма. В общем случае адрес начала подпрограммы и адрес, с которого она стартует, могут не совпадать, хотя очень часто они совпадают.

Результат функции USR значение, находящееся в паре регистров BC микропроцессора. Комбинация ключевых слов RANDOMIZE USR или RESTORE USR только запускает подпрограмму, тогда как PRINT USR еще и индицирует содержимое пары регистров BC на экране.

Фактически, это достаточно широко известная информация и на ней не стоило бы останавливаться, если бы не одно но:

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

То, что из этого следует, очевидно. Засекретив начало Вашей подпрограммы в кодах, Вы сбиваете с толку "хакеров", а это в свою очередь защищает Вашу программу от несанкционированного просмотра. Рассмотрим более подробно эти новые ухищрения.

Выше были рассмотрены команды, достаточно широко известные и наиболее часто применяемые. Чуть реже встречается комбинация

LET A = USR 30000

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