╒══════════════════════════════╕
│░░░░░░ ПРОГРАММИРОВАНИЕ ░░░░░░│
╘══════════════════════════════╛
По многочисленным просьбам чи-
тателей журнала,в данном разделе
мы осветим некоторые моменты,ко-
торые вызывают наибольшую труд-
ность в понимании у начинающих
программировать на ассемблере.
Имеющаяся литература, посвящен-
ная программированию в машинных
кодах,в большинстве случаев рас-
считана на подготовленных чита-
телей. Как выяснилось, многие
владельцы компьютера столкнулись
с проблемой терминов. Такие
понятия как байт, бит, регистр
и т.д. Естественно, без освоения
этих понятий делать попытки пи-
сать программы бесполезно.
ОЧЕНЬ ПРОСТО О СЛОЖНОМ
Не вдаваясь детально в струк-
турную схему компьютера мы рас-
смотрим его основные устройства.
Центральный процессор (ЦП). В
компьютере ZX-Spectrum ЦП-Z80.
ЦП имеет возможность читать дан-
ные из постоянного запоминающего
устройства (ПЗУ),читать данные и
засылать данные в оперативное
запоминающее устройство (ОЗУ) и
читать данные, засылать данные,
производить с ними арифметичес-
кие и логические действия в
регистрах процессора.
Регистры процессора, ячейки
памяти ОЗУ и ПЗУ можно предста-
вить в виде своеобразных домиков
- байтов в которых имеется 8
квартир - битов. В каждой квар-
тире, которые имеют нумерацию от
0 до 7 может находиться либо 1,
либо 0. Хотя каждый бит имеет
только два состояния 1 или 0,
вес каждого бита различен в
зависимости от номера (разряда).
Так 1 расположенная в нулевом
разряде имеет число 1, в первом
разряде - 2, во 2 - 4, в 3 - 8,
в 4 - 16, в 5 - 32 , в 6 - 64,
в 7 - 128. Число, которое разме-
щается в байте можно определить
просуммировав все биты содержа-
щие 1 с учетом их разрядов.
Пример:
7 6 5 4 3 2 1 0 разряд
128 64 32 16 8 4 2 1 вес
0 0 1 0 0 1 1 0 байт
32 + 4 +2 = 38
Рассмотрим сначала городок из
регистров, который расположен
непосредственно в процессоре.
Домики (регистры) в этом городке
пронумерованы буквами латинского
алфавита и располагаются парами.
Функции каждого регистра различ-
ны.
Регистр А - аккумулятор. С этим
регистром связано наибольшее ко-
личество арифметических и логи-
ческих команд.
Рядом с регистром А расположен
регистр F - флаговый регистр,ко-
торый может образовывать пару с
регистром А. После выполнения
некоторых команд в соответствии
с результатом операции изменяют-
ся соответствующие биты этого
регистра. Биты этого регистра
называются флагами. Если бит со-
держит единицу, то флаг установ-
лен, если 0 - сброшен.
Регистр флагов F
┌─┬─┬─┬─┬─┬─┬─┬─┐
│S│Z│ │H│ │V│N│C│
└─┴─┴─┴─┴─┴─┴─┴─┘
│ │ │ │ │ │ │ └─ флаг переноса
│ │ │ │ │ │ └─── флаг отрица-
│ │ │ │ │ │ тельного ре-
│ │ │ │ │ │ зультата
│ │ │ │ │ └───── флаг четности
│ │ │ │ │ переполнения
│ │ │ │ └───── не используется
│ │ │ └───────── флаг вспомо-
│ │ │ гательного
│ │ │ переноса
│ │ └───────── не используется
│ └───────────── флаг нуля
└─────────────── флаг вычита-
ния
При программировании флаговый
регистр играет очень большую
роль,т.к. просматривая изменения
флагов этого регистра можно де-
лать ветвления программы, преоб-
разовывать числа, выходить из
подпрограммы или программы при
выполнении требуемого условия и
т.д.
Регистры общего назначения:
B,C,D,E,H,L - хотя с этими реги-
страми можно проводить и одина-
ковые операции,существует доста-
точно много команд, которые
присущи только отдельным регист-
рам этого набора.
В одном отдельно взятом регист-
ре можно хранить число от 0 до
255. Для хранения чисел в диопа-
зоне от 0 до 65535 применяются
два регистра.Регистры могут объ-
единяться только в определенные
пары BC,DE,HL, причем первый ре-
гистр является старшим, а второй
младшим. Старшим регистр называ-
ется потому, что при превышении
в младшем регистре числа 255
старший регистр увеличивается на
единицу.
Кроме основного набора регист-
ров в процессоре Z-80 имеется
еще один набор таких регистров,
который называется альтернатив-
ным. Альтернативный набор регис-
тров имеет следующее обозначение
A'F',B'C',D'E',H'L'.
Индексные регистры IX,IY
Особенностью данных регистров
является то, что при помощи их
процессор может обращаться к
ячейкам памяти, указывая их сме-
щение -128 или +127 относительно
адреса установленного в этом ре-
гистре.
Указатель стека SP
При составлении программы прог-
раммист указывает область опера-
тивной памяти (стек),где процес-
сор в процессе работы будет вре-
менно хранить свои данные. Адрес
этой области заносится в регист-
ровую пару SP. При записи в стек
значение SP уменьшается на 2, а
при извлечении числа увеличива-
ется на 2.
Счетчик команд PC
Двухбайтный регистр PC следит за
очередностью выполнения команд
программы.
Регистр регенерации памяти R
Обслуживает аппаратные потреб-
ности компьютера. Младшие семь
разрядов регистра увеличиваются
на единицу после выполнения оче-
редной команды процессора. Стар-
ший разряд аппаратно не исполь-
зуется.
Регистр вектора прерываний I
Каждую 1/50 долю секунды процес-
сор прерывает выполнение основ-
ной программы и приступает к вы-
полнению вспомогательной прог-
раммы. При установке 2-го режима
прерываний программист может на-
писать собственную процвдуру об-
работки прерываний. В результате
процессор будет выполнять парал-
лельно две программы, переключа-
ясь на их выполнение через каж-
дые 1/50 долю секунды.
Ну а теперь самая обширная
часть компьютера - память.Память
компьютера это одна большая ули-
ца состоящая из ячеек памяти.
Так же как и регистры процессо-
ра каждая ячейка памяти может
хранить один байт состоящий из
восьми бит. Ячейки памяти ком-
пьютера имеют сплошную нумерацию
от 0 до 65535. Память компьютера
разбивается на две части.
ПЗУ от 0 до 16383. В этой части
памяти процессор бессилен что
либо изменить. Здесь находятся
программы которые процессор сра-
зу же начинает выполнять после
включения компьютера.
ОЗУ от 16384 до 65535.Эту часть
памяти можно условно разбить на
четыре области:
1.16384-23296 - экран. Все что
засылается в эту область памяти
отображается на экране.
2.23552-23733 - область систем-
ных переменных.Используется для
временного хранения данных при
работе программ ПЗУ.
3. Свободная память - участок
оперативной памяти которую мож-
но использовать для хранения
данных и расположения собствен-
ной программы.
4. Машинный стек . По желанию
программиста можно выделить лю-
бой свободный участок памяти
для временного хранения данных
процессора.
EнА теперь самое интересное. Ваша
первая программа на ассемблере.
Если у вас компьютер 128К, то
лучше, конечно, воспользоваться
турбоассемблером TASM 3.0.
Программа,приведенная ниже,пока-
жет вам как следует занести чис-
ло в регистр процессора, произ-
вести с ним в цикле арифметичес-
кие операции, скопировать число
из регистра в ячейку памяти и
при выполнении соответствующего
условия выйти из программы. Вы
увидите также какие изменения
происходят в регистре флагов F
при работе программы.
ORG 40000 ;адрес начала про-
;граммы
LD A,0;в регистр А заносим 0
М1 INC A ;увеличиваем число в
;регистре А на 1
RET Z ;выход из программы
;если установлен флаг
;нуля Z
LD (16384),A;содержимое рег.
;А копируем в
;экран
JP M1 ;прыгаем на метку М1
Для выполнения программы нажмите
ENTER.
Редакция очень надеется, что
эта короткая статья поможет сде-
лать вам первый решительный шаг
в освоении ассемблера.
* * *