ZX Format #01: Программистам: Введение в язык ассемблера

Авторы статьи

Упомянутые люди

Ассемблер в картинках для "чайников" и не только. Автор: Михаил Спицын.  

Мы начинаем цикл статей по ассемблеру для начинающих, с целью побудить людей к изучению данного языка. В этих статьях мы расскажем о строении компьютера, графике, звуке (48 и 128) и, естественно, о самом ассемблере. Итак...

1. ПРОЦЕССОР КОМПЬЮТЕРА
Как человек, так и любой компьютер имеет мозг; этим мозгом компьютера является процессор. А что же за "мозг" у нашего Speccy? "Мозг" Spectrum'а - это процессор Z80 фирмы ZILOG. Процессор Z80 является псевдошестнадцатиразрядным. Как это понять?
Дело в том, что каждый процессор может понимать числа определенной разрядности. К примеру, восьмиразрядное число записывается как комбинация из восьми двоичных нулей и единиц и может обозначать любое целое число от 0 до 255. Каждый разряд такого числа — это степень двойки, например, двоичное число 01100110 соответствует десятичному 102, а перевести из десятичной в двоичную систему можно так: 2^7*0 + 2^6*1 + 2^5*1 + 2^4*0 + 2^3*0 + 2^2*1 + 2^1*1 + 2^0*0 = 102.
Продолжим. Z80 имеет двадцать восьмиразрядных регистров (регистр — это ячейка внутри процессора, куда можно записывать числа) и все регистры объединяются в пары, каждая из которых так и называется: "регистровая пара". Вот мы и добрались до ответа на наш вопрос, - 8+8=16, следовательно, регистровая пара дает шестнадцатиразрядное число. Теперь о том, почему Speccy не просто шестнадцатиразрядный, а "псевдо" такой.
Итак, регистры нам нужны для того, чтобы выполнять над ними арифметические операции, а именно сложение и вычитание. К сожалению, наш маленький Speccy не умеет делить и умножать, а уж ни о каких более "страшных" действиях и говорить не приходится.
Так вот, процессор может складывать/вычитать как регистры, так и регистровые пары, т.е. выполнять арифметические операции над восьми и шестнадцатиразрядными числами, а так как регистры имеют лишь восемь разрядов (это вам не IBM), то и процессор "псевдошестнадцатиразрядный". Вот таблица всех регистров с их назначением:


╔═══════╦══════════════════════╗
║ Регистр║ Основное назначение ║
╠═══════╬══════════════════════╣
║ A ║ 8-ый аккумулятор ║
║ F ║ Флаговый регистр ║
║ B ║ 8-ый счетчик ║
║ BC ║ 16-ый счетчик ║
║ DE ║ Регистр приемник ║
║ HL ║ 16-ый аккумулятор ║
║ IX ║ Индексный регистр ║
║ IY ║ Системный индекс ║
║ I ║ Вектор прерывания ║
║ R ║ Регистр регенерации ║
║ SP ║ Вершина стека ║
║ PC ║ Счетчик команд ║
╠═══════╩══════════════════════╣
║ Примечание: ║
║ 8-ый - восьмиразрядный ║
╚══════════════════════════════╝


2. ПРОСТЕЙШИЕ КОМАНДЫ
Теперь рассмотрим простейшие операции ассемблера, используя в качестве примера бейсик, с которым, я надеюсь, Вы знакомы. Первое, что нужно сделать для изучения ассемблера - это выбрать себе "оболочку-ассемблер", в которой Вы будете работать. Могу Вам посоветовать TASM128, если у Вас ZX128, или, для ZX48, ZEUS ASSEMBLER.
Итак, приступим:


BASIC ASSEMBLER
10 LET A=1 LD A,1
20 STOP RET


Команда "LET" эквивалентна команде "LD", если Вы наберете и запустите ее, то в регистр "A" будет занесена единица. По команде "RET" произойдет выход в вызывающую программу (если программа была запущена из BASIC'а, то по команде "RET" она вернет управление BASIC'у).
Во все регистры, за исключением "F" и "PC", можно заносить числа, например:


LD A,1 ; 1-->A
LD B,15 ; 15-->B
LD HL,16384 ; 16384-->HL
LD IX,50000 ; 50000-->IX


Но обычно программисту не хватает регистров, тогда приходится использовать память компьютера, например:


BASIC ASSEMBLER
LET A=PEEK 23556 LD A,(23556)


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


BASIC ASSEMBLER
POKE 23607,A LD (23607),A


Но часто приходится записывать/считывать значение ячейки, адрес которой рассчитывается или берется из таблицы. В таком случае используются следующие команды:


ЗАПИСЬ ЧТЕНИЕ
LD (BC),A LD A,(BC)
LD (DE),A LD A,(DE)
LD (HL),0 LD E,(HL)


Примечание: Хочу заметить, что не существует команды прямой записи числа в ячейку памяти, как и записи из ячейки в ячейку.
А теперь я хочу привести программу, которая печатает любое сообщение (она аналогична оператору "PRINT"). В программе используется команда "CALL", для вызова процедуры ПЗУ, эту команду можно сравнить с командой BASIC'а "GO SUB", например:


BASIC ASSEMBLER
10 GO SUB 999 CALL M1
.... ....
999 LET A=1 M1 LD A,11000 RETURN
RET


Здесь "M1" — это метка, вместо которой при ассемблировании программы будет поставлен соответствующий адрес.

ПРИМЕР ПРОГРАММЫ
После точки с запятой в ассемблере, также как после REM в бейсике, пишутся комментарии.


; Программа печати текстовых
; сообщений.
-= PRINT TEXT =-
ORG 30000
ENTSTART LD A,1 ; Открываем 1
CALL #1601; канал для печати.
LD DE,TEXT; Адрес текста
LD BC,LEN ; Длина текста
CALL #203C; Печать текста
RET
TEXT DEFB 22 ; Код "AT"
DEFB Y,X ; Позиция печати
DEFM "HELLO, EVEREBODY!"
LEN EQU 20 ; LEN=20
Y EQU 10 ; Y=10
X EQU 5 ; X=5


Эта программа аналогична строке BASIC'a: 10 PRINT AT 10,5;"HELLO, EVEREBODY!"
В следующем номере я расскажу об арифметических командах и командах сравнения, и приведу пример маленькой игры.
До встречи!

Оглавление издания: ZX Format #01

  • IS-DOS
    IskraSoft представляет IS-DOS Classic 4.0 с новыми функциями редактирования текста, утилитой для работы с дисками, контроллером жесткого диска для ZX Spectrum и отладчиком программ.
  • IS-DOS - Владимир Елисеев
    Обзор IS-DOS для ZX Spectrum с упором на преимущества над TR-DOS. Обсуждение установки, использования и управления файлами в IS-DOS. Введение в системные утилиты и интерфейс, похожий на Norton Commander.
  • IS-DOS - Владимир Елисеев
    Статья представляет краткий путеводитель по системному диску IS-DOS, перечисляя все основные файлы с пояснениями. Файлы отсортированы по алфавиту и сгруппированы по каталогам для удобной навигации. Путеводитель предоставляет общий обзор файлов и команд без подробных описаний.
  • IS-DOS - Владимир Елисеев
    Обсуждение стандарта UniColor для настройки цветов в программах IS-DOS, его реализации и преимуществ для настройки пользователем.
  • IS-DOS - Владимир Елисеев
    Обсуждение особенностей оконного интерфейса IS-DOS. Реализация оконной системы в IS-DOS и её преимущества. Примеры программ для создания окон и рамок.
  • IS-DOS - Владимир Елисеев
    Описание внутреннего устройства программы gmen.com для IS-DOS, сосредоточено на управлении устройствами и обработке меню с подробным исходным кодом и комментариями.
  • Железо - Vladimir Larkov
    Обсуждение модификации железа Scorpion ZS-256 для совместимости с определённым ПО. Описывается блокировка порта #1FFD для запуска несовместимых программ. Предоставляются технические детали для реализации.
  • Железо - Nemo
    Обсуждение аппаратных тормозов для ZX Spectrum. Фокус на создании и влиянии тормозов на разогнанные процессоры. Предупреждение о возможных побочных эффектах.
  • Железо
    Обсуждение непрактичности ремонта старых компьютеров и экономического смысла замены их на современное оборудование. Статья подчеркивает трудности в самостоятельном ремонте и предлагает альтернативные решения. Подчеркивает преимущества обновления на более новые и надежные компоненты.
  • Железо
    Обсуждение новых разработок периферии для Scorpion ZS 256, включая инновационный универсальный контроллер и интерфейс MIDI. Акцент на улучшении контроллеров клавиатуры и мыши и расширении возможностей встроенного ПО. Описание профессионального расширения ПЗУ и турбо-режима для повышения производительности.
  • Игрушки - Ruster
    Подробное прохождение игры Crystal Kingdom Dizzy, включая решения головоломок и советы по продвижению в сюжете.
  • Игрушки - Павел Рындин
    Описание логической игры 'Быки и коровы', ее механики и игрового процесса. Объясняются уровни сложности и цель угадать число за минимальное количество попыток.
  • Игрушки - Вячеслав Медноногов
    Обсуждение нюансов игры 'UFO: Enemy Unknown', акцент на инопланетных видах, их тактике и стратегиях игры. Подробности о механике игры и будущем продолжении 'UFO-2: Devils of the Abyss'. Включает информацию о программировании и историю разработки.
  • Игрушки - SParker
    Обзор игр и программного обеспечения на рынке Санкт-Петербурга в 1995 году.
  • Интервью
    Вячеслав Медноногов делится своим путем как программиста, начиная с сборки своего первого Spectrum-48 до разработки известных игр, таких как 'НЛО. Враг неизвестен'. Он описывает трудности и инсайты в разработке игр и подъем русской локализации игр. Его опыт подчеркивает эволюцию программирования и распространения ПО в 1990-х.
  • Информация
    Введение в ZX-Format, новый электронный журнал для энтузиастов ZX Spectrum, сосредоточенный на играх, программировании, оборудовании и взаимодействии сообщества.
  • Конкурс
    Обсуждение организации нового конкурса для журнала. Читатели приглашаются предложить свои идеи тем. Отобранные темы будут представлены в будущих номерах.
  • Конкурс
    ZX Format объявляет конкурс на лучшую миссию, созданную с помощью редактора миссий для игры Laser Squad. Принимаются работы по почте или лично. Победитель получит коробку дискет 3M и следующий номер бесплатно.
  • Отдохнём - Килат Амор
    День программиста, наполненный сновидениями, играми и непринужденными разговорами. Васечкин балансирует между амбициями и отдыхом, воплощая дух программиста. Размышления о требованиях и удовольствиях жизни программиста.
  • Почтовый ящик - Максим Романов
    Обсуждение предложений по аппаратному и программному обеспечению в Санкт-Петербурге от LOGROS и Create Soft, включая подробности о интерфейсе Kempston Mouse.
  • Почтовый ящик - SParker
    Сборник чит-кодов для игр ZX Spectrum от Сергея Павлова. Техники получения дополнительных жизней и бессмертия. Не рекомендуется любителям честной игры.
  • Почтовый ящик
    Описание правил отправки писем и статей в журнал, включая требования к форматированию и предпочтения в отправке.
  • Премьера - Алексей Щекин
    Геймплей игры Lines на ZX Spectrum, аналог Color Lines. Передвигайте шарики для составления линий одного цвета. Описаны правила и управление.
  • Программистам - Дмитрий Рудовский
    Введение в продвинутые методы программирования на BASIC для ZX Spectrum 48, подчеркивающие его преимущества перед BASIC 128. В планах будущих статей сервисные программы и расширения языка. Статья служит руководством для опытных программистов.
  • Программистам - Михаил Спицын
    Введение в язык ассемблера на ZX Spectrum. Объяснение структуры процессора Z80, регистров и основных команд. Включает примеры программ для обучения.
  • Программистам - Андрей Седов
    Редактор миссий для Laser Squad от Андрея Седова позволяет фанатам создавать новые миссии. Включает удобный интерфейс с минимальными управляющими клавишами. Предоставляет функции редактирования объектов, изменения цен и назначения спрайтов.
  • Разное
    История разработки компьютера Amiga, его создателей и ключевых особенностей. Эволюция от аркадных игр до лидирующего домашнего компьютера. Успех на рынке и технологические достижения Amiga.
  • Разное
    Обзор готовящихся к выпуску программных продуктов для ZX Spectrum с демо. Особое внимание уделено приключенческим играм, пробам RPG и стратегическим тактикам. В разработке участвуют несколько известных разработчиков.