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:
В этот день... 23 November