06 октября 1999


++++++++++++++++++++++++++++++++++++++++++

Раздел: Програмирование

    Азы программирования на ASM'е.

  Энтот раздел предназначен для самых юных
т.е. начинающих кодеров, вечно цветущей и
любимой всеми нами платформы SPECCY.
  Итак, начнем нашу беседу.
  Вдруг если вы не знаете, то привожу ха-
рактеристику регистров процессора Z-80.

 + можно использовать по одному.
 * только как рег.пару.
 = только как один регистр.

A - аккумулятор. Основной регистр для Z-80.
Большинство логических и арифметических
операций выполняется путем использования
аккумулятора. (=)

HL - одна из трех регистровых пар. Являет-
ся наиболее важной из них. Существует ряд
арифметических операций с HL. (+)

DE - в основном  используется для хранения
16-ти разрядного числа или адреса. (+)

BC - также, как и в DE. Регистр B исполь-
зуется как счетчик циклов. (+)

SP - указатель стека. Используется как ме-
сто сохранения адресов возврата, но может
быть использован как рабочая область. Ра-
ботает по принцыпу: последним пришел,пер-
вым ушел. (*)

I - регистр вектора прерываний. Используе-
тся для размещения адресов устройств вво-
да-вывода. (=)

R - регистр регинерации памяти. Он являет-
ся простым счетчиком, который увеличивает-
ся каждый раз при выполнении цыкла регене-
рации. Значение в регистре циклически ме-
няется от 0 до 255. (=)

IX,IY - используются для выполнения опера-
ции, которая включает работу с таблицей
данных. Можно использовать половинки этих
рег.пар, хотя литература об этом умалкива-
ет.

F - флаговый  регистр. Для програмиста ну-
жны только 4-ре флага. Это флаг нуля, флаг
знака, флаг переноса и флаг четности-пере-
полнения. ( Флагу соответствует один бит
регистра F.)

  Также процессор Z80 имеет набор альтер-
нативных регистров, которые включаются ко-
мандой EXX. Обозначаются они A',F' и т.д.
Определить какой из наборов используется в
данный момент невозможно.

  Теперь займемся проблемой выбора редак-
тора ассемблеровских текстов.
  В наше время уже написано множество раз-
ных редакторов и каждый из них заслуживает
отдельного внимания. Основная черта их от-
личия - это удобства. Например я пишу в ZX
TURBOASSEMBLER v3.0. Иногда в XAS и MASM.
Кстати, идеального ассемблера до сих пор
не написано :-( (моя точка зрения)

  Перейдем непосредственно к примерам:
(т.к. это первый номер FANTOM'а, то и ис-
ходники не очень крутые :-(

;печать спрайта
;ВХОД:DE-АДРЕС СПРАЙТА
;     HL-КООРДИНАТЫ в знакоместах
;     B-ШИРИНА
;     C-ВЫСОТА

        LD A,H    ;вычесляем адрес по
        AND #07   ;координатам заданым
        RRCA      ;в HL.
        RRCA
        RRCA
        OR L
        LD L,A
        LD A,H
        AND #18
        OR #40
        LD H,A
LOOP    PUSH BC
        PUSH HL
LOOP1   LD A,(DE)   ;цыкл вывода на экр.
        LD (HL),A
        INC DE
        INC L
        DJNZ LOOP1
        POP HL
        POP BC
        CALL DOWN
        DEC C
        JP NZ,LOOP
        RET
;ПЕРЕХОД НА СЛЕДУЮЩУЮ СТРОЧКУ В ЭКРАНЕ.
;АДРЕС НАХОДИТСЯ В HL
DOWN    INC H
        LD A,H
        AND 7
        RET NZ
        LD A,L
        ADD A,32
        LD L,A
        RET C
        LD A,H
        SUB 8
        LD H,A
        RET

 Как видите,ничего сложного...

 Идем дальше...

            ОПРОС КЛАВИШ

  Если вам надо опросить клавишу или нес-
колько клавиш, то програмка, которая будет
это выполнять, будет выглядеть примерно
таким образом:

 (опрос клавиши ENTER)
        LD A,#BF
        IN A,(#FE)
        BIT 0,A
        JP NZ,ENTER

  Ниже я даю вам список клавиш и портов к
ним.

    ╔═══╦═════════════════╦═══════╗
    ║БИТ║  4  3  2  1  0  ║  ПОРТ ║░
    ╠═══╩═════════════════╬═══════╣░
    ║      V  C  X  Z  CS ║#FE,254║░
    ║      G  F  D  S  A  ║#FD,253║░
    ║      T  R  E  W  Q  ║#FB,251║░
    ║      5  4  3  2  1  ║#F7,247║░
    ║      6  7  8  9  0  ║#EF,239║░
    ║      Y  U  I  O  P  ║#DF,223║░
    ║      H  J  K  L ENT ║#BF,191║░
    ║      B  N  M SS  SP ║#7F,127║░
    ╚═════════════════════╩═══════╝░
     ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

        ПЕЧАТЬ СИМВОЛА 8x8

;     ВХОД:А-КОД СИМВОЛА
;     DE-КООРДИНАТЫ НА ЭКРАНЕ
;     FONT-АДРЕС ШРИФТА-256
         LD L,A
         LD H,0
         ADD HL,HL
         ADD HL,HL
         ADD HL,HL
         LD BC,FONT
         ADD HL,BC
         LD A,D
         AND 7
         RRCA
         RRCA
         RRCA
         OR E
         LD E,A
         LD A,D
         AND 24
         OR 64
         LD D,A
         LD B,8
 LOOP    LD A,(HL)
         LD (DE),A
         INC D
         INC HL
         DJNZ LOOP
         RET

 Скорость ее выполнения средняя.

         РАБОТА С TR-DOS

  Если вам нужно  считать или записать на
диске группу секторов, то это можно делать
так: в HL помещаем куда или откуда нужно
будет считывать, в D - стартовый трек, в E
стартовый сектор, в B - количество секто-
ров для записи или загрузки, а в C-код фу-
нкции (6-запись, 5-считывание). После это-
го запрещаем прерывания и делаем:
       CALL #3D13
разрешаем прерывания и делаем возврат.

  Ну вот пока все. В следующем номере про-
должим ;-)



Other articles:


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

Similar articles:
AD & D - AD & D history in Zaporizhia.
Others - the outcome of the failed survey.

В этот день...   23 November