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ретий путь - самый оперативный . Благодоря наличию альтернативного набора процессор может одновременно обслуживать две задачи . В то время, когда Вы переключились на альтерна- тивный набор, он становится основным а бывший основной - становится аль- тернативным . Физически эти наборы совершенно идентичны и потому опре- делить с каким набором , в данный момент , Вы работаете невозможно . Программа может получаться довольно хитросплетенной и от программиста требуется определенная вниматель- ность . Ну вот и все на сегодня . Продол- жение нашей энциклопедии читайте в следующем номере журнала. Удачи !!!