╒══════════════════════════════╕ │░░░░░░ ПРОГРАММИРОВАНИЕ ░░░░░░│ ╘══════════════════════════════╛ По многочисленным просьбам чи- тателей журнала,в данном разделе мы осветим некоторые моменты,ко- торые вызывают наибольшую труд- ность в понимании у начинающих программировать на ассемблере. Имеющаяся литература, посвящен- ная программированию в машинных кодах,в большинстве случаев рас- считана на подготовленных чита- телей. Как выяснилось, многие владельцы компьютера столкнулись с проблемой терминов. Такие понятия как байт, бит, регистр и т.д. Естественно, без освоения этих понятий делать попытки пи- сать программы бесполезно. ОЧЕНЬ ПРОСТО О СЛОЖНОМ Не вдаваясь детально в струк- турную схему компьютера мы рас- смотрим его основные устройства. Центральный процессор (ЦП). В компьютере 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. Редакция очень надеется, что эта короткая статья поможет сде- лать вам первый решительный шаг в освоении ассемблера. * * *