VVS
═══
Этот раздел мы посвящаем тем , кто
решил научиться программировать в
машинных кодах . У кого-то может
возникнуть вопрос , а зачем это ну-
жно , когда существует столько раз-
нообразных языков программирования,
расчитанных на любые вкусы и инте-
ресы ?
Для того , что бы ответить на
этот вопрос надо рассмотреть , что
же такое языки программирования и
как они обеспечивают общение чело-
века с компьютером .
Сердцем ZX-SPEСTRUM является про-
цессор - это микросхема не понимает
никаких языков программирования , а
воспринимает только машинные коды ,
поскольку они представленны электри-
ческими импульсами . Поэтому когда
мы запускаем программу в машинных
кодах то мы по сути дела управляем
работой процессора напрямую . Когда
же мы запускаем программу написанную
например в Бейсике то мы передаем
управление интерпретатору Бейсика ,
который в свою очередь переводит
команды и операторы Бейсик-строки в
машинный код . Не трудно догадаться,
что программа, написанная в машинных
кодах,будет выполняться намного быс-
трее , чем программа, написанная на
Бейсике . Это утверждение справед-
ливо и для других языков программи-
рования .
Итак , программирование в машинном
коде позволяет повысить скорость ра-
боты программы , что бывает чрезвы-
чайно важно , если в программе есть
многочисленные вложенные друг в дру-
га циклы , если многократно выпол-
няется поиск и выбор данных из обши-
рных областей памяти . Mного времени
занимают операции , связанные с об-
работкой графических изображений на
экране . Эфект плавного и быстрого
перемещения объектов в компьютерных
видеоиграх практически всегда соз-
дается в Mашинном коде .
Нужно отметить еще один важный мо-
мент - сокращение объема занимаемой
памяти . Казалось бы , что 48 кило-
байтов памяти - это немало, а если у
Вас SPEСTRUM 128 , то 128 килобайт
и вовсе девать некуда . Но не стоит
торопиться с выводами . Eсли учесть,
что почти 7 килобайт занимает экран-
ная область памяти , то при создании
красочных программ , содержащих нес-
колько десятков экранов , на их
хранение даже в компрессированном
виде уходит несколько десятков кило-
байтов , а нужно еще выделить место
для хранения таблиц данных, перемен-
ных, текстов и т.п. Поэтому в лучших
программах на сам машинный код , по
которому они работают , остается 4 -
8 Кб. Здесь и проявляется мастерство
программиста , сумевшего обеспечить
в столь малом объеме богатое много-
образие вариаций игры , палитру цве-
тов и гамму звуков .
Сравним расход памяти при работе
на Бейсике и в машинных кодах . Про-
грамма на Бейсике размером в 30
строк занимает примерно 1К памяти .
Aналогичная ей , выполняющая те же
задачи , программа в машинных кодах
будет занимать примерно 150 строк ,
но занимают они всего 200..250 байт
оперативной памяти .
Mожно было бы продолжать разговор
о преимуществах программирования в
машинных кодах, но я надеюсь,что все
вышесказанное Вас заинтересовало и
можно переходить к самой сути дела ,
а именно изучению машинного языка
процессора Z-80 .
APXETEКTУPA ПPOЦEССOPA Z-80
Процессор Z-80 был создан американ-
ской корпорацией ZILOG и стал одним
из самых удачных процессоров в мире.
Oн имеет 8-ми разрядную шину данных
и 16-ти разрядную адресную шину .Это
означает, что он может обрабатывать
целые числа (байты) от 0 до 255 и
напрямую обращаться к 65535 ячейкам
памяти .
В структуру процессора входит не-
сколько регистров . Именно с ними мы
и работаем , программируя в машинном
коде . Mожно считать , что регистры
являются ячейками внутренней памяти
процессора. Но в отличие от ПЗУ, от-
куда можно только считать информацию
при работе с OЗУ можно как считы-
вать, так и записывать информацию. С
регисрами процессора можно выполнять
большое количество различных арифме-
тических и логических операций .
Pегистры процессора своеобразны и
имеют свои имена . Oни обозначаются
буквами латинского алфавита : F,A,В,
С,D,E,Н,L,SP,PС,IX,IY,I,R.
Это основной набор регистров . Eсть
еще один дополнительный набор . Eго
называют альтернативным и мы рас-
смотрим его ниже .
Некоторые из этих регистров - вось-
миразрядные (однобайтные) и могут
содержать целые числа от 0 до 255 .
Это регистры F,A,В,С,D,E,Н,L,I,R.
Другие -шестнадцатиразрядные (двух-
байтные). Oни могут содержать целые
числа от 0 до 65535. Это регистры SP
, PС,IX,IY .
Некоторые однобайтные регистры мо-
гут объединяться в двухбайтные реги-
стровые пары ВС,DE,НL. В этом случае
о такой паре можно говорить как об
отдельном шестнадцатиразрядном реги-
стре .
Процессор Z-80 является весьма
асимметричным,то есть каждый регистр
обладает специфическими чертами ,де-
лающими его непохожим на остальные
регистры. Поэтому различные регистры
предназначенны для выполнения разли-
чных функций .
Pегистр A - AККУMУЛЯTOP .
Этот регистр называют аккумулятором
т.к. во многих случаях результат ис-
полнения операции остается в нем . В
этом регистре выполняется наибольшее
количество арифметических и логичес-
ких команд. Это основной однобайтный
регистр процессора . Во многих кома-
ндах даже не указывается , к какому
регистру они относятся : предполога-
ется , что они относятся к реги-
стру A .
Pегистры В,С,D,E,Н,L - PEГИСTPЫ
OБЩEГO НAЗНAЧEНИЯ .
Эти регистры широко используются
процессором при выполнении различных
команд . Их характерная особенность
состоит в том, что они могут исполь-
зоваться и как однобайтные одиночные
регистры, и как двухбайтные шестнад-
цатиразрядные регистровые пары ВС ,
DE , НL .
В этом случае наибольшее количество
команд имеет регистр НL . При работе
с двухбайтными целыми числами он
имеет такое же важное значение , что
и регистр A при работе с однобайт-
ными .
Все эти пары используются, как пра-
вило, для хранения адресов. При этом
в регистре НL часто помещается ад-
рес того байта , с которым произво-
дится операция .
К регистру DE подходит сокращение
от слова DESTINATION (Mесто назначе-
ния). И действительно , во многих
операциях , связанных с перемещением
чего-либо , регистр НL указывает от-
куда взять , а регистр DE - куда от-
править .
К регистру ВС можно подобрать со-
кращение ВAСК СOUNTER ( Oбратный
счетчик). В тех случаях , когда оп-
ределенная последовательность команд
должна повториться N раз ,т.е. когда
организуется цикл вычислений , в ре-
гистре ВС хранится счетчик этого
цикла .
При объединении одиночных регистров
в пары , в первом хранится старший
байт , а во втором - младший . Итак
В,D,Н - старший , а С,E,L - младший.
Pегистр SP - УКAЗATEЛЬ СTEКA
(STAСК POINTER).
В тех случаях , когда необходимо
на некоторое время освободить какой-
либо регистр (или регистры) и запом-
нить его содержимое впредь до даль-
нейшего использования , компьютер
может использовать в качестве места
временного хранения данных особый
участок оперативной памяти , называ-
емый стеком . Стек - это такая форма
организации памяти , при которой за-
грузка и выгрузка данных выполняется
по принципу "последним пришел - пер-
вым уйдешь". Oн может быть организо-
ван почти в любом месте оперативной
памяти .
Стек "растет" сверху вниз . При
этом перемещается и его вершина . В
регистре SP содержится адрес вершины
стека. При помещении очередного чис-
ла на стек , регистр SP автоматичес-
ки уменьшает свое значение , а при
снятии числа со стека - увеличивает.
Заслав свой адрес в указатель сте-
ка , Вы можете организовать стек в
другом месте оперативной памяти .
Pегистр PС - ПPOГPAMMНЫЙ
СЧETЧИК (PROGREM СOUNTER).
Этот регистр , как и регистр SP -
шестнадцатиразрядный . Oн служит для
хранения адреса той операции , кото-
рая должна выполняться следующей .
Когда процессор начинает выполнять
эту операцию програмный счетчик по-
лучает приращение на единицу , если
команда однобайтная , на два если
двухбайтная и т.д. Tаким образом ,по
окончании этой операции процессор
знает какую операцию выполнять сле-
дующей .
Eсли в программе имеется переход в
иное место или вызов подпрограммы,то
именно программный счетчик обеспечи-
вает такой скачек .
Pегистр F - ФЛAГOВЫЙ PEГИСTP.
Этот регистр отличается от всех
остальных и играет весьма своеобраз-
ную роль . Eго не рассматривают как
отдельный регистр , хранящий восьми-
разрядное число , скорее как восемь
отдельных флаговых битов . Каждый
флаг может быть установлен или снят
то есть соответствующий бит включен
(равен 1) или выключен (равен 0).
Ниже приведенна структура флагово-
го регистра :
Бит 0 - флаг переноса С
Бит 1 - флаг сложения/вычитания N
Бит 2 - флаг четности/переполнения
Бит 3 - не используется
Бит 4 - флаг полупереноса Н
Бит 5 - не используется
Бит 6 - флаг нуля Z
Бит 7 - флаг знака S
Подробнее о работе с флагами мы
поговорим в одном из следующих номе-
ров .
Pегистры IX,IY - Индексные
регистры .
Это две регистровые пары как пра-
вило используются для запоминания
адресов . Xарактерной особенностью
этих регистров является то , что
благодоря им можно организовать так
называемую индексную адресацию .Eсли
Вам надо работать с какими-либо таб-
лицами данных , то Вы можете при по-
иске и выборке нужного Вам элемента
таблицы не задавать его адрес , а
хранить в индексном регистре адрес
начала таблицы . Oбращение к нужному
Вам элементу выполняется путем обра-
щения к этому индексному регистру с
указанием величины "смещения" нужно-
го Вам элемента от начала таблицы .
В Спектруме регистр IY хранит в
себе адрес 23610 , который является
начальным адресом таблицы системных
переменных . Это позволяет легко об-
ращаться к любой системной перемен-
ной . Первоночальную установку соде-
ржимого регистра IY на этот адрес
выполняет после включения компьютера
в сеть программа инициализации , на-
ходящаяся в ПЗУ , но Вы можете изме-
нить эту установку, заслав туда ка-
кой-либо свой адрес .
Pегистр IX широко используется ко-
мпьютером при исполнении команд заг-
рузки/выгрузки программ : LOAD,SAVE,
VERIFY,MERGE . В нем хранится адрес
начала места загрузки (выгрузки)
блока .
Pегистр R - PEГИСTP PEГEНEPAЦИИ.
Это внутренний системный регистр,
который используется процессором
автоматически , без участия програм-
миста. Электрические заряды в микро-
схемах оперативной памяти имеют тен-
денцию "утекать", поэтому для норма-
льной работы компьютера необходимо
производить подзарядку (регенерацию)
оперативной памяти . В этих целях и
используется регистр R .
Pегистр I - ВEКTOP ПPEPЫВAНИЙ.
В Спектруме этот регистр участвует
только в формировании телевизионного
сигнала и обработке подпрограммы оп-
роса клавиатуры , но Вы можете сами
создать свою программу обработки
прерываний ( об этом - в будущем ).
AЛЬTEPНATИВНЫЙ НAБOP PEГИСTPOВ.
Oдной из отличительных черт процес-
сора является наличие альтернатив-
ного набора регистров . Это регистры
F',A',В',С',D',Н',L'. Oни полностью
идентичны регистрам F,A,В,С,D,E,Н,L.
Наличие такого альтернативного на-
бора позволяет быстро переключаться
с одного набора на другой . Когда
нужно произвести какие-то операции с
регистрами общего назначения , а они
уже заняты и потерять содержащиеся в
них данные нельзя , перед Вами есть
три пути :
1.Oтправить содержимое в память , а
потом вернуть его назад .
2.Поместить на стек , а потом вер-
нуть его оттуда .
3.Переключиться на альтернативный
набор регистров и работать с ним , а
потом переключиться назад на основ-
ной набор .
Tретий путь - самый оперативный .
Благодоря наличию альтернативного
набора процессор может одновременно
обслуживать две задачи . В то время,
когда Вы переключились на альтерна-
тивный набор, он становится основным
а бывший основной - становится аль-
тернативным . Физически эти наборы
совершенно идентичны и потому опре-
делить с каким набором , в данный
момент , Вы работаете невозможно .
Программа может получаться довольно
хитросплетенной и от программиста
требуется определенная вниматель-
ность .
Ну вот и все на сегодня . Продол-
жение нашей энциклопедии читайте в
следующем номере журнала. Удачи !!!
Other articles: