Справочник по системным программам для компьютера ZX Spectrum 1991 г.

Описание GENS4 - резервирование слов, мнемоника и т.д. Рабочий пример.


Приложение 2.

Резервирование слов, мнемоника и т.д.

Список резервных инструкций внутри GENS4. Эти символы не
могут использоваться как метки, хотя они могут быть частью меток.
Все резервные инструкции состоят из заглавных букв:

А ИС DY Н L I R S
AF AF" ВС DE HL IX
IY SP NC Z NZ М
Р РЕ РО

Ниже приводится список мнемоники Z80, директив ассемблера
и его команд. Они также должны состоять из заглавных букв.

ADC

ADD

AND

BIT

CALL

CCF

CP

CPD

CPDR

SPI

CPIR

CPL

DAA

DEC

DI

DJNZ

EI

EX

EXX

HALT

IM

IN

INC

IND

INDR

INI

INIR

JP

JR

LD

LDD

LDDR

LDI

LDIR

NEG

NOP

OR

OUTDR

OTIR

OUT

OUTD

OUTI

POP

PUSH

RES

RET

RETI

RETN

PL

RRA

RLC

RLC A

RLD

RR

RLA

RRC

RRCA

RRD

RST

SBC

SCF

SET

SLA

SRA

SRL

DEFB

DEFM

DEFS

DEFW

ELSE

END

ENT

EQU

IF

ORG

MAC

ENDM

*D

*E

*H

*L

*S

*c

*F

*M

Приложение 3.

Рабочий пример

Ниже приводится пример типичного сеанса работы с использо-
ванием GENS4. Если вы новичок по части использования ассемблер-
ных программ или вы немного не уверены в том, как использовать
ассемблер/редактор GENS4, то мы настоятельно советуем вам тща-
тельно проработать этот пример. Лишний раз заметим, что <ENTER>
означает, что вы должны нажать клавишу "ENTER" на клавиатуре.

Цель примера:

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

Последовательность работы:

1 - напишите программу умножения как подпрограмму и запи-
шите ее на ленту, используя команду редактора "Р", чтобы ее можно
было легко восстановить во время сеанса при наличии ошибок.

2 - отладьте подпрограмму умножения, редактируя ее, если это
необходимо.

3 - запишите отлаженную программу на ленту, используя ко-
манду "Т" так, чтобы эта подпрограмма могла быть помещена с ленты
в другие программы.

Перед стартом мы должны загрузить GENS4 в компьютер
- делайте так:

LOAD "" CODE 26000 <ENTER>

Чтобы загрузить ассемблер с адреса 26000. Затем введите:
RANDOMIZE USR 26000 <ENTER>

Сейчас вы находитесь в режиме редактирования, т.е. компьютер
готов для создания программ на ассемблере.

1-я стадия: запись программы целочисленного умножения.
Мы используем команду редактора I, чтобы ввести текст, ис-
пользуя <—> > (символ табуляции) для получения табулированного
листинга.

Ниже мы не указываем, где используется табуляция. Но вы
можете предположить, что табуляция используется между мнемони-
кой команды и между мнемоникой и операндом. Заметим, что адреса,
показанные в ассемблерном листинге примера, который следует, мо-
гут не соответствовать полученным в вашем компьютере, они служат
только для иллюстрации:
>110, 10 <ENTER>

10 ;А FAST INTEGER MULTIPLY <ENTER>
20 ;POUTINEMULTIPLIES HL <ENTER>
30 ;BY DE. RETURN THE RESULT <ENTER>
40 ;IN HL. С FLAG SET ON AN <ENTER>
50 ;OVERFLOW. <ENTER>
60 ;<ENTER>

70 ORG #7F00 <ENTER>

80 <ENTER>
90 MULT OR A <ENTER>
100 SBC HL, DE;HLDE? <ENTER>

110 ADD HL, DE <ENTER>

120 JRNC, MU1;YES <ENTER>

130 EXDE, HL <ENTER>

140 MU1 ORD <ENTER>

150 SCF;OVERFLOW IT <ENTER>

160 RET NZ; DE>255 <ENTER>

170 OR E;TIMES 0? <ENTER>

180 LD E, D <ENTER>

190 JRNZ, MV4;NO <ENTER>

200 EX DE, HL;0 <ENTER>

210 RET <ENTER>

220 <ENTER>

230 ; MAIN ROUTINE <ENTER>
240 <ENTER>

250 MU2 EX DE, HL <ENTER>

260 ADD HL, DE <ENTER>

270 EX DE, HL <ENTER>

280 MU3 ADD HL, HL <ENTER>
290 RET C; OVERFLOW <ENTER>

300 MU4 RRA <ENTER>

310 JR NC, MU3 <ENTER>

320 OR A <ENTER>

330 JR NZ, MU2 <ENTER>

340 ADD HL, DE <ENTER>

350 RET <ENTER>

360 <EDIT>

Вышеприведенные команды создадут текст программы. Сохра-
ним ее на ленте, используя:

Р10, 350, MULT <ENTER>

Помните, что вы должны включить свой магнитофон в режим
записи перед использованием команды "Р".

2-я стадия: Отладка программы.

Сначала убедитесь в правильном ассемблировании исходного
текста. Мы будем использовать ключ 2, чтобы не производить лис-
тинг и объектный код.

>А2 <ENTER>

♦HISOFT GENS4 ASSEMBLER*
COPYRIGHT HISOFT 1983, 84, 87
ALL RIGHT RESERVED
PASS1 ERROR :00
PASS2 ERROR:(X)

♦VWARNING* MV4 ABSENT TABLE USED:74 FROM 161
>

Мы видим из этой трансляции, что сделали ошибку в строке 190,
набрав MV4 вместо MU4, которая является меткой, на которую мы
желаем перейти. Редактируем строку 190:

>F190, 190, MV4, MU4 <ENTER>
190 JR NZ, (сейчас используйте подкоманду "S")

Теперь ассемблируйте текст вновь. Он должен ассемблировать-
ся
бс$ ошибок. Мы должны написать некоторый текст для проверки
подпрограммы:

"" >N300, 10 <ENTER> (перенумеруем для того, чтобы мы могли
написать больше текста)
>110,10 <ENTER>
10 ;SOME CODE ТО TEST <ENTER>
20 ;THE MULT ROUTINE <ENTER>
30 <ENTER>

40 LD HL, 50 <ENTER>

50 LDDE, 20 <ENTER>

60 CALL MULT;MULTIPLY <ENTER>

70 LD A, H; O/P RESULT <ENTER>

80 CALL AOUT <ENTER>

90 LD A, L <ENTER>

100 CALL AOUT<ENTER>

110 RET; RETURN TO EDITOR <ENTER>

120 <ENTER>

130 ;ROUTINE TO O/P A IN HEX <ENTER>
140 <ENTER>

150 AOUT PUSH AF <ENTER>

160 RRCA <ENTER>

170 RRCA <ENTER>

180 RRCA <ENTER>

190 RECA<ENTER>

200 CALL NIBBLE <ENTER>

210 POP AF <ENTER>

220 NIBBLE AND % 1111 <ENTER>

230 ADD A, #90 <ENTER>

240 DAA <ENTER>

250 ADC A, #40 <ENTER>

260 DAA <ENTER>

270 LD IY, 5C3A;FOR ROM <ENTER>

280 RST #10;ROM CALL <ENTER>

290 RET <ENTER>

300 <ENTER>
>

Теперь ассемблируйте текстовую программу совместно с про-
граммой MULT:
>А2 <ENTER>

♦HISOFT GENS4 ASSEMBLER*
COPYRING HISOFT 1983, 84, 87
ALL RIGHT RESERVED
7EAC 190 RECA

*ERROR* 02 (нажмите любую клавишу для продолжения)

PASS 1 ERROR: 01
TABLE USED: 88 FROM 210

В нашей программе есть ошибка: вместо RECA в строке 19 дол-
жно быть RRCA. Делаем:
>Е190
190RECA

190 ->, один пробел, С, R <ENTER», <ENTER>
>

Теперь проассемблируйте вновь, используя ключи по умолча-
нию (только A <ENTER>), и текст должен проассемблироваться пра-
вильно.

Мы уже в состоянии проверить работу нашей программы MULT,
следовательно, нам нужно сообщить редактору, откуда он может
выполнить код. Мы делаем это директивой "ENT": 35 ENT S
<ENTER>.

Теперь вновь проассемблируем текст, и трансляция должна за-
вершиться правильно с сообщениями:

TABLE USED: 88 FROM 211

EXECUTES: 32416
>

Или подобными этим. Теперь можно запустить наш код на вы-
полнение, используя команду редактора "R". Помножив 50 на 20 мы
должны получить 1000, что равно ЗЕ8 в шестнадцатеричном коде:

>R <ENTER>
0032>

Не работает! почему не работает? распечатайте строки 380 по
500 (L380, 500). Вы увидете, что в строке 430 находится инструкция
OR D, за которой следует RET NZ. Все, что она делает - это логиче-
скую операцию "ИЛИ" между регистром и аккумулятором А и воз-
вращает установленный флаг ошибки (С-флаг), если результат не
равен 0. Целью этого действия является возможность убедиться, что
DE<256 и, следовательно, что операция умножения не вызвала пере-
полнения - это делается проверкой того, что в регистре D находится
0. Но "ИЛИ" будет работать правильно только в том случае, когда в
аккумуляторе изначально находится 0, а у нас нет гарантий, что это
будет так.

Мы должны убедиться, что А=0 перед выполнением OR D, в
противном случае мы получим переполнение со старшими разрядами
в качестве результата. Для проверки кода OR а в строке 380 можно
изменить на XOR А, которая установит флаг для SBC HL, DE инст-
рукции и установит А=0. Следовательно:

>Е380 <ENTER>

380 MULT OR A <ENTER>

380 -> I (вход в режим вставки) X <ENTER><ENTER>

>

Теперь вновь проассемблируйте и запустите код, используя R.
Теперь ответ должен быть правильным: ЗЕ8. Мы можем проверять
программу дальше, отредактировав строки 40 и 50, чтобы перемно-
жать различные числа. Ассемблируя и запуская, вы увидите, что
программа работает. Теперь, закончив программу, мы можем сохра-
нить ее на магнитной ленте в формате "INCLUD":

>Т300, 999, MULT <ENTER>

Не забудьте включить магнитофон в режим записи перед нажа-
тием <ENTER>.

Если вы хотите сохранить программу на дискете, то не нужно
использовать программу "Т". Программа, сохраненная обычной ко-
мандой "Р", может быть запущена с дисковода.

Однажды запущенная подобным образом подпрограмма может
быть вставлена в программу как показано ниже:

500 RET

510

520 ; INCLUD THE MULT ROUTINE HERE

(включаем здесь MULT)

530

540 *F MULT

550

560 ; THE NEXT ROUTINE (следующая подпрограмма)

Когда вышеприведенный текст будет транслироваться, ассемб-
лер спросит вас "START ТАРЕ..." Когда он доберется до строки 540
во время как первого, так и второго проходов. Следовательно, вы
должны направить MULT на вывод с ленты в обоих случаях. Для
этого обычно нужно будет перемотать ленту после первого прохода.
Вы можете записать два дубля программы MULT на ленту один за
другим, и один использовать во время первого прохода, а второй - во
время второго.

Когда происходит ввод с дисковода, никаких сообщений не по-
является, все работает автоматически.

Пожалуйста, изучите тщательно вышеприведенный пример и
постарайтесь выполнить его самостоятельно.

Следовательно, вы должны направить MULT на вывод с ленты
в обоих случаях.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Coding - Демки кодить я хочу!
Напоследок - Заключение.
Прогноз - Астрологический прогноз на SPECCY.
Отдохнем - Лирика "Баллада об индейце".
Ответы на письма №1-3.

В этот день...   28 апреля