Wallpaper #06
30 ноября 1998

Soft Building - как ориентироваться в машинном коде для Z80.

          ╔──────────────────╗
          │ 5. SOFT BUILDING │▐
          ╚──────────────────╝▐
           ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

              Hail Peoples!

   Во  многих уже электронных изданиях по-
являлось  описаниe языка ассемблера, как и
для начинающих, так и для более высокораз-
витых ;-) личностей. Но так-как новые жур-
налы  доходят  до Ташкента довольно долго,
мы  будем публиковать свои 'уроки' ассемб-
лера  для  начинающих, постепенно переходя
ко  все  более  сложным вещам и заканчивая
написанием  небольшой  игры. Итак, присту-
пим:

   КАК ОРИЕНТИРОВАТЬСЯ В МАШИННОМ ЯЗЫКЕ

                  НАЧАЛО

   Может  оказаться,  что  до  чтения этой
статьи  у вас не было ясного представления
о  программировании  на машинном языке. Вы
можете  даже  не  знать что такое машинный
язык.  Вам может быть даже неизвестно, что
есть  разница между машинным языком и язы-
ком  ассемблера,  и чем они оба отличаются
от программирования на языке "Бейсик".
   Не  беспокойтесь и не пугайтесь профес-
сионального  жаргона  -  мы все постепенно
объясним.
   Прежде  всего давайте посмотрим как ра-
ботает ЭВМ:

  1 PROGRAMMER----------- 2 KEYBOARD
        |                      |
        |                      |
5 TV SCREEN------------ 3 OPERATING SISTEM
                 |
                 |
     4 CENTRAL PROCESSING UNIT

  1  -  программист,  2  - клавиатура, 3 -
операционная система, 4 - центральный про-
цессор, 5 - телевизионный экран.

   Цель  этой диаграммы в том, чтобы пока-
зать,  что  между  программистом  и мозгом
"Спектрум",  центральным процессором, име-
ется  барьер. В процессе обычной обработки
программист  не  может задать центральному
процессору, обычно называемому ЦП, что тот
должен делать.
   В ЭВМ "Синклер" выбран ЦП типа Z80. Че-
тыре чипа Z80, 6502, 6809 и 8088 стали ши-
роко  распространенными  в качестве ЦП для
микро-ЭВМ. Z80 - самый популярный из них.
   Вас не удивит, что Z80 не понимает сло-
ва  на  языке  "Бейсик".  На самом деле ни
один  чип не был разработан таким образом,
чтобы мы могли непосредственно связываться
с мозгом ЭВМ.
   Если достаточно глубоко вдуматься, мож-
но  понять, что было бы очень трудно, если
вообще возможно, в любом случае задать для
чипа  ЭВМ команду, имеющую смысл для чело-
века.  Снимите  крышку  вашего  "Синклера"
(если  решитесь ;) ) и посмотрите на самый
большой  чип - это ЦП Z80A. Очевидно, этот
чип  вашей ЭВМ может реагировать только на
электрические  сигналы,  передаваемые  ему
остальными частями схемы.

         Что такое машинный язык?

   Чип  Z80  сконструирован таким образом,
что он может принимать сигналы одновремен-
но  с восьми подсоединенных к нему контак-
тов.
   Разработчики  чипа  Z80 сконструировали
его  таким  образом, что разные комбинации
поступающих  на него с этих восьми контак-
тов  сигналов  будут "командовать" Z80 вы-
полнять  разные  функции. Помня о том, что
на  самом  деле  есть только электрические
сигналы,  давайте  примем систему условных
обозначений этих сигналов - например, ста-
вя  "1",  если  на одном из контактов есть
сигнал, и "0", если сигнала нет.
   Типичная  команда тогда могла бы выгля-
деть так:

             0 0 1 1 1 1 0 0

      Это существенно отличается от:

             "LET A = A + 1"

   Тем  не менее, именно это и есть машин-
ный  язык.  Название говорит само за себя.
Это - язык для машин. Каждый производитель
различных  чипов  сконструировал для своей
продукции свой особый язык.
   Здесь вы можете задать себе вопрос, ес-
ли  это  и  есть  машинный  язык, то в чем
проблема? Почему не воспользоваться проде-
ланной кем-то другим работой, что позволит
программировать на ЭВМ на языке, который я
легко понимаю, таком как "Бейсик" или "Ко-
бол"?
   В  этом  есть  определенный смысл из-за
следующих преимуществ машинных языков:

- более быстрое выполнение программы;
- более эффективное использование памяти;
- более короткие программы (в памяти);
- независимость от операционной системы.

   Все  перечисленные  выше преимущества -
непосредственное  следствие программирова-
ния  на языке, который ЦП воспринимает без
предварительной трансляции, когда вы прог-
раммируете  на "Бейсике", то на самом деле
ЭВМ  выполняет программу операционной сис-
темы,  написанную  на  машинном языке. Эта
программа выглядит примерно так:

  NEXT  ВЗЯТЬ СЛЕДУЮЩУЮ КОМАНДУ
        ПЕРЕВЕСТИ ЕЕ В ПОСЛЕДОВАТЕЛЬНОСТЬ
        КОМАНД МАШИННОГО ЯЗЫКА
        ВЫПОЛНИТЬ КАЖДУЮ КОМАНДУ
        ЗАПИСАТЬ РЕЗУЛЬТАТ, ЕСЛИ ЭТО НУЖНО
        СНОВА ПЕРЕЙТИ НА NEXT

   Если  вас интересует, где ЭВМ берет эту
программу,  операционную  систему,  то она
хранится в ПЗУ. Иными словами, она встрое-
на в "Спектрум", (ПЗУ - сокращенное назва-
ние  постоянного  запоминающего устройства
машинной  памяти, ячейки которой вы не мо-
жете менять, а можете только читать.
   Программа  на  языке "Бейсик" может вы-
полняться  почти  в  60 раз медленнее, чем
программа,  написанная  непосредственно на
машинном языке.
   Причина этого в том, что трансляция от-
нимает  время,  получающиеся  в результате
команды  машинного языка менее эффективны.
Аналогичным  образом, обычно более быстрым
оказывается  личный  автомобиль,  а не об-
щественный  транспорт; вы можете сократить
путь по известным вам дорогам, а не следо-
вать  маршрутом  общественного транспорта,
которому  приходится удовлетворять общест-
венные  потребности. Тем не менее нам при-
ходится первыми признать, что у программи-
рования на машинном языке есть свои недос-
татки:

- программы трудно читать и отлаживать;
- их невозможно перенести на другие ЭВМ;
- программы оказываются длиннее (в коман-
  дах);
- трудно выполнять арифметические вычисле-
  ния.

   Это  означает,  что  вам  следует очень
продуманно  принимать решение о том, какой
метод  программирования  следует использо-
вать для каждой конкретной задачи.
   Очень  большую программу из области фи-
нансов  следует  писать на языке, разрабо-
танным  для  обработки  чисел и таком, что
программы  в  случае  необходимости  можно
легко модифицировать.
   С  другой стороны, нет ничего хуже, чем
аркдная  игра,  написанная  на языке "Бей-
сик". Когда вы сядите играть, она окажется
слишком медленной.
   Ваш  выбор языка программирования будет
определяться  вашими  собственными потреб-
ностями, объемом памяти вашей ЭВМ , требу-
ющимся  временем  реакции,  отпущенным  на
разработку временем и т.д.
   Итак,  подведя  итог,  машинный  язык -
последовательность  команд понятных для ЦП
и поддающихся представлению в виде чисел.

        ЧТО ТАКОЕ ЯЗЫК АССЕМБЛЕРА?

   Совершенно очевидно, что если бы машин-
ный  язык можно было представлять только с
помощью чисел, очень немногие люди были бы
способны писать программы на машинном язы-
ке.  В  конце  концов,  кто смог бы понять
смысл программы, имеющей следующий вид:

             0 0 1 0 0 0 0 1
             0 0 0 0 0 0 0 0
             0 1 0 0 0 0 0 0
                  и т.д.

   К  счастью  мы можем придумать ряд имен
для каждого из этих чисел. Язык ассемблера
как  раз  и  является таким представлением
машинного языка. Так что люди могут читать
его в более понятной форме, чем:

             0 1 1 1 0 1 1 1

   Между языком ассемблера и машинным язы-
ком  есть  только  одно различие: язык ас-
семблера  на один уровень выше, чем машин-
ный  язык.  Его легче читать человеку, чем
машинный язык, но с другой стороны, ЭВМ не
может  читать язык ассемблера. Он не явля-
ется  адаптацией  машинного  языка подобно
"Бейсику".  Для  каждой  команды языка ас-
семблера  имеется  идентичная (по функции)
команда  машинного языка и наоборот, иными
словами, между ними имеется взаимно одноз-
начное  соответствие.  Поэтому  можно ска-
зать, что язык ассемблера эквивалентен ма-
шинному языку.
   Язык  ассемблера  использует  мнемонику
(или сокращения) для повышения удобочитае-
мости. Например, на данной стадии обучения
команда INC HL может почти ничего не озна-
чать  для вас, но, по крайней мере, вы мо-
жете ее прочитать. Если бы вы сказали, что
"INC" - стандартное сокращение (или мнемо-
ническое   обозначение)  INCREASE  (увели-
чить),  а  "HL"  - "переменная", то просто
посмотрев  на  эту команду вы можете полу-
чить представление о том, что происходит.
   Та  же  самая команда на машинном языке
имеет вид:

             0 0 1 0 0 0 1 1

   Теперь, очевидно, вы можете также "про-
читать"  эту команду в том смысле, в кото-
ром  вы можете прочитать число. Это не бу-
дет  много для вас означать, если только у
вас нет справочной таблицы или ваш мозг не
действует почти как ЭВМ.
   Язык ассемблера может быть преобразован
непосредственно в машинную программу с по-
мощью  программы  или  вами  самими. Такая
программа называется "АССЕМБЛЕР"ом. Вы мо-
жете  рассматривать  ее как программу, вы-
полняющую   довольно  утомительную  задачу
трансляции  вашей  написанной на языке ас-
семблера  программы  в  последовательность
команд  машинного  языка, понятных "Спект-
рум" и мы считаем, что "ассемблер" для "ZX
Спектрум" уже имеется.
   Альтернативный  способ  работы - вместо
применения   программы  ассемблера  самому
транслировать мнемонику языка ассемблера в
машинный  язык вручную, применяя приведен-
ные в этой книге таблицы.
   Это трудно, по началу кажется безнадеж-
но, неудобно, но это - прекрасная практика
и  дает  вам  глубокое понимание того, как
работает ЦП "Спектрум".
   Мы  на самом деле рекомендуем, чтобы вы
попытались  написать таким способом корот-
кую программу на машинном языке - т.е. на-
писать  ее  на  языке ассемблера и вручную
транслировать на машинный язык прежде, чем
покупать программу ассемблера.

                ЗАКЛЮЧЕНИЕ

                    ЦП

   Центральный  процессор  ЭВМ  - это чип,
выполняющий  в ЭВМ вычислительные и управ-
ляющие функции.

              Машинный язык

   Язык, воспринимаемый ЦП. Для ЦП "Спект-
рум"  -  это машинный язык Z80, содержащий
приблизительно 600 команд.

              Язык "Бейсик"

   Язык   программирования,  разработанный
так,  чтобы  быть понятным человеку. Когда
ЭВМ  выполняет  команду  на этом языке, ей
приходится  транслировать  эту  команду  в
последовательность команд машинного языка.
Поэтому программы на языке "Бейсик" значи-
тельно  медленнее  работают, чем программы
на машинном языке, но их легче писать.

             Язык ассемблера

   Представление  команд машинного языка в
сокращенной,   понятной  человеку  записи,
например,  HALT  - ассемблерный эквивалент
команды машинного языка 0 1 1 1 0 1 1 0.

           Программа ассемблера

   Программа,  транслирующая команды языка
ассемблера (удобочитаемые и понятные чело-
веку) в команды машинного языка (восприни-
маемые ЭВМ).

    Постоянное запоминающее устройство

   Большая  программа  на  машинном языке,
обычно называемая программируемым оборудо-
ванием. Программа, жестко встроенная в ап-
паратуру  ЭВМ.  Она  сохраняется  даже при
отключении  питания.  Для  "Спектрум"  ПЗУ
запрограммировано  в  машинных кодах Z80 и
написано  специально для него. ПЗУ "Спект-
рум"  занимает ячейки памяти с 0 по 16383.
Вы  можете только обращаться к содержимому
этих  ячеек, тогда как остальную память вы
можете не только читать, но и изменять.

     На первый раз пожалуй и хватит,
            to be continued...



Другие статьи номера:

От редакции - изменилась структура газеты.

Новости Таш-ZXNet - В январе месяце в ТашZXnet начнет свою жизнь первая эхо-конференция Ташкентской синклеровской сети.

Железяки - Дополнительный графический режим 512х192.

Письмо в номер - Hашей pодной сети TashZXNet уже скоpо будет 1 год. И что же мы имеем на данный момент ?

Soft Building - как ориентироваться в машинном коде для Z80.

В помощь - технологии выдирания музыкальных модулей из различных программ.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
BBS - список станций BBS ZXNet.
For Coderz - Макросы ч.2 - облегчаем себе жизнь при программировании.
Письма - Письма в редакцию: Prog Master, Kristoph.

В этот день...   21 февраля