ZX учебный класс - Команды для работы с ZX Microdrive

ZX Revija #03

ZX Учебная: BASIC / Машинный код

Команды для работы с ZX Microdrive

ZX Microdrive — это особый тип дискового накопителя, предназначенный для хранения больших объёмов данных. Команды: CAT, CLOSE#, ERASE, FORMAT, MOVE и OPEN#. Сейчас мы не будем рассматривать эти команды, но когда будем рассказывать о ZX Microdrive и его использовании, подробно разберём и их.

На этом мы завершаем краткий курс по BASIC. Желающие узнать больше о BASIC могут заказать видеокурс BASIC-VIDEO-KURS V 2.00: он стоит 40,00 динаров на отечественных кассетах или 70,00 динаров на кассетах TDK или SONY. С этого номера в нашей рубрике мы начинаем знакомство с машинным языком.

Машинный код

Представим, что вы вообще не знаете, что такое машинный язык, как на нём программировать и… то есть совсем ничего не знаете о машинном коде. Для начала будем учиться на примере BASIC-программы. Программа на BASIC состоит из программных строк. У каждой строки есть номер, который определяет её место в программе.

10 PRINT 10
20 NEW

Из этой программы видно, что сначала будет выведено число 10, а уже потом выполнится команда NEW. Конечно, всё происходит очень быстро, так что вы едва заметите выполнение команды в строке 10. Но если добавить PAUSE 0 в строке 15, программа не будет стёрта из памяти, пока вы не нажмёте какую-нибудь клавишу.

Это значит, что компьютер выполняет команды от меньшего номера к большему, если только в программе нет команд GO TO или GOSUB.

Машинная программа имеет такую же структуру. Она состоит из машинных команд, каждая из которых определённым образом размещена в отдельной ячейке памяти.

Поскольку центральный процессор Spectrum выполняет 686 различных машинных команд и кодов очень много, был введён символический машинный язык, команды которого вводятся с помощью ассемблера.

Этот язык называется мнемоническим машинным языком. Его форма примерно такая:

10 LD a,10

Здесь 10 — номер программной строки, а LD a,10 соответствует команде LET a=10. Но команда LD a,4D означает PRINT — всё зависит от открытого канала, то есть от знаменитого CALL, который определяет остальные функции программы.

Машинную программу можно вводить и с помощью команд DATA и POKE: с их помощью команды помещаются в память. Вводить коды в память командой POKE намного проще, но и опасно: программа может заблокироваться, то есть компьютер перестанет работать. Тогда всё придётся повторять заново, а предыдущие усилия окажутся напрасными. Если программа длинная, она требует много времени, а исправить ошибку вы уже не сможете.

С командой DATA намного проще: содержимое строки DATA можно проверить ещё раз, и ещё раз — даже после команды RUN, если компьютер сообщит об ошибке в строке DATA.

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

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

Прежде всего нужно понять, как работает ваш компьютер, какова его ёмкость, что такое ячейки памяти и так далее. За скорость выполнения программ отвечает легендарная микросхема Z80A, работающая на частоте 3,5 МГц. Это не так уж быстро, но вполне достаточно для быстрой работы большинства программ.

Помимо упомянутого ассемблера, машинную программу можно вводить с помощью загрузчиков DEC-loader, M.C.M, EZ-CODE и HEXLOAD. О каждом из них мы расскажем отдельно в следующих номерах.

А теперь вернёмся к ассемблеру. Он переводит мнемонический язык в машинный язык Spectrum, то есть в нули и единицы.

Ассемблер преобразует программу только после того, как вы введёте её целиком и нажмёте соответствующую клавишу.

Если вы ошиблись, всё придётся вводить заново, но этого можно избежать, используя более совершенное программное обеспечение. Это вкратце об АССЕМБЛЕРЕ, а теперь немного о ДИСАССЕМБЛЕРЕ. Он считывает то, что записано в машинном коде. Поскольку с его помощью тоже учатся, его ОБЯЗАТЕЛЬНО нужно приобрести. А теперь предлагаем несколько программ, написанных на BASIC с машинным кодом:

ЗВУК ЛЕСА
10 DATA 243,33,0,0,17,255,251,201
   :FOR A=40001 TO 40031:READ N:POKE A,N:
   NEXT A:FOR N=1 TO 100:
   RANDOMIZE USR 40001:
   NEXT N

ЗВУК БУДИЛЬНИКА
10 DATA 6,16,17,2,0,33,16,245,201
   :FOR A=40001 TO 40020:READ N:POKE A,N:NEXT A
   :FOR N=1 TO 200:RANDOMIZE USR 40001:NEXT N

10 FOR N=16384 TO 22527
20 POKE N,INT(RND*255)+1
30 NEXT N

10 FOR N=22528 TO 23295
20 POKE N,INT(RND*100)+1
30 PAUSE 10
40 NEXT N

Поделитесь вашим мнением о статье