ZX Format
#01
31 октября 1995 |
|
Программистам - Ассемблер для чайников
Ассемблер В Картинках для "чайников" и не только. Автор:Михаил Спицын. ________________________________ Мы начинаем цикл статей по ассемблеру для начинающих, с целью побудить людей к изучению данного языка. В этих статьях мы раскажем о строении компьютера, графике, звуке (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,1 1000 RETURN RET Здесь "М1"-это метка, вместо которой при ассемблировании программы будет поставлен соот- ветствующий адрес. ПРИМЕР ПРОГРАММЫ После точки с запятой в ас- семблере, также как после REM в бейсике пишутся комментарии. ;Программа печати текстовых ;сообщений. -= PRINT TEXT =- ORG 30000 ENT START 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!" В следующем номере я расскажу об арифметических командах и ко- мандах сравнения, и приведу при- мер маленькой игры. До встречи ! ________________________________
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября