Системные программы для «ZX-Spectrum» 1992 г.

Gens-4 - резервирование слов. Мнемоника. Рабочий пример.


РЕЗЕРВИРОВАНИЕ СЛОВ, МНЕМОНИКА И Т.Д.

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

A

B

С

D

E

H

L

I

R

S,

AF

AF'

ВС

DE

HL

IX

IY

SP

NC

Z

NZ

M

P

PE

PO

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

ADC

ADD

AND

BIT

CALL

CCF

СР

CPD

CPDR

SPI

CPIR

CPL

DAA

DEC

Dl

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

RLCA

RLD

RR

RLA

RRC

RRCA

RRD

RST

SBC

SCF

SET

SLA

SRA

SRL

DEFB

DEFM

DEFS

DEFW

ELSE

END

ENT

EQU

IF

ORG

ЫАС

ENDM

*D

*E

*H

*L

*S

*C

*F

*M,

РАБОЧИЙ ПРИМЕР

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

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

Написать и проверить программу целочисленного умножения, текст которой

' V II •—I—1II

должен быть сохранен на магнитной ленте, используя команду редактора "Т" так,
чтобы легко было включать ее в состав будущих программ с магнитной ленты.
ПОСЛЕДОВАТЕЛЬНОСТЬ РАБОТЫ:

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

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

Зи «—I—I II

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

LOAD "" CODE 2 6000 <ENTER>

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

RANDOMIZE USR 2 6000 <ENTER>

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

1-я стадия: запись программы целочисленного умножения.

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

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

10 ;А FAST INTEGER MULTIPLY <ENTER>

2 0 ;ROUTINE>MULTIPLIES HL <ENTER>

3 0 ;BY DE.RETURN THE RESULT <ENTER>

4 0 ;IN HL.C FLAG SET ON AN <ENTER>

5 0 ;OVERFLOW. <ENTER>

6 0 ;<ENTER>

7 0 ORG #7F0 0 <ENTER>

8 0 <ENTER>

9 0 MULT OR A <ENTER>

10 0 SBC HL,DE;HL>DE? <ENTER>
110 ADD HL,DE <ENTER>

12 0 JR NC,MU1;YES <ENTER>

13 0 EX DE,HL <ENTER>

14 0 MU1 OR D <ENTER>

15 0 SCF; OVERFLOW IT <ENTER>
160 RET NZ;DE>255 <ENTER>

17 0 OR E; TIMES 0? <ENTER>

18 0 LD E,D <ENTER>

19 0 JR NZ,MV4;NO <ENTER>
2 00 EX DE,HL;0 <ENTER>
210 RET <ENTER>

220 <ENTER>

23 0 ;MAIN ROUTINE <ENTER>
240 <ENTER>

2 50 MU2 EX DE,HL <ENTER>

2 60 ADD HL,DE <ENTER>

27 0 EX DE,HL <ENTER>

2 80 MU3 ADD HL,HL <ENTER>

290 RET C;OVERFLOW <ENTER>

3 00 MU4 RRA <ENTER>

310 JR NC,MU3 <ENTER>

320 OR A <ENTER>

33 0 JR NZ,MU2 <ENTER>

340 ADD HL,DE <ENTER>

350 RET <ENTER>

360 <EDIT>

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

>P10,350,MULT <ENTER>

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

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

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

>А2 <ENTER>

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

*WARNING* MV4 ABSENT TABLE USED: 74 FROM 161

>

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

>F190,190,MV4,MU4 <ENTER>

19 0 JR NZ, (сейчас используйте подкоманду "S")

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

> N3 00,10 <ENTER>

(перенумеруем для того, чтобы мы могли написать больше текста)

>I10,10 <ENTER>
10 ;SOME CODE TO TEST <ENTER>
2 0 ;THE MULT ROUTIME <ENTER>
30 <ENTER>

4 0 LD HL,5 0 <ENTER>

5 0 LD DE,2 0 <ENTER>

60 CALL MULT; MULTIPLY <ENTER>

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

80 CALL AOUT <ENTER>

9 0 LD A,L <ENTER>

100 CALL AOUT <ENTER>

110 RET; RETURN TO EDITOR <ENTER>

12 0 <ENTER>

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

150 AOUT PUSH AF <ENTER>

160 RRCA <ENTER>

17 0 RRCA <ENTER>

180 RRCA <ENTER>

190 RECA <ENTER>

200 CALL NIBBLE <ENTER>

210 POP AF <ENTER>

22 0 NIBBLE AND %1111 <ENTER>

230 ADD A,#90 <ENTER>

240 DAA <ENTER>

250 ADC A,#40 <ENTER>

260 DAA <ENTER>

27 0 LD IY,5C3A;FOR ROM <ENTER>

2 80 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 19 0 RECA

*ERROR* 02 (нажмите любую клавишу для продолжения)
PASS 1 ERROR: 01
TABLE USED: 88 FROM 210
B нашей программе есть ошибка: вместо RECA в строке 190 должно быть RRCA.
Делаем:

>Е190
190 RECA

19 0 один пробел, C,R<ENTER>,<ENTER>

>

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

Мы уже в состоянии проверить работу нашей программы MULT,
следовательно, нам нужно сообщить редактору, откуда он может выполнить код.
Мы делаем это директивой "ENT":
>3 5 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. Все, что она делает

— это логическую операцию "или" между регистром D и аккумулятором А и
возвращает установленный флаг ошибки (с-флаг), если результат не равен 0.
Целью этого действия является возможность убедиться, что DE<256 и,
следовательно, что операция умножения не вызвала переполнения — это делается
проверкой того, что в регистре D находится 0. Но "или" будет работать правильно
только в том случае, когда в аккумуляторе изначально находится 0, а у нас нет
гарантий, что это будет так. Мы должны убедиться, что А = 0 перед выполнением
OR D, в противном случае мы получим переполнение со старшими разрядами в
качестве результата. Для проверки кода OR А в строке 380 можно изменить на XOR
А, которая установит флаг для SBC HL.DE инструкции и установит А = 0.
Следовательно:

>Е3 8 0 <ENTER>
380 MULT OR A <ENTER>
3 80^I (вход в режим вставки) X
<ENTER><ENTER>

>

Теперь вновь проассемблируйте и запустите код, используя R. Теперь ответ
должен быть правильным: ЗЕ8.

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

>Т3 00,999, MULT <ENTER>
Не забудьте включить магнитофон в режим записи перед нажатием <ENTER>.
Если вы хотите сохранить программу на дискете, то не нужно использовать
программу "Т". Программа, сохраненная обычной командой "Р", может быть
запущена с дисковода.

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

52 0 ; INCLUD THE MULT ROUTINE HERE
(включаем здесь MULT)

530

540 *F MULT
550

560 ;THE NEXT ROUTINE (следующая постпрограмма) _
Когда вышеприведенный текст будет транслироваться, ассемблер спросит вас
"START TAPE... " когда он доберется до строки 540 во время как первого, так и
второго проходов. Следовательно, вы должны направить MULT на вывод с ленты в
обоих случаях. Для этого обычно нужно будет перемотать ленту после первого
прохода. Вы можете записать два дубля программы MULT на ленту один за другим,
и один использовать во время первого прохода, а второй — во время второго. Когда
происходит ввод с дисковода, никаких сообщений не появляется, все работает
автоматически. Пожалуйста, изучите тщательно вышеприведенный пример и
постарайтесь выполнить его самостоятельно.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Форум - МНОГОЗАДАЧНОСТЬ И ОС.
От авторов - Ответ редакции газеты на письма Brom'a & Spectre.
Вступление - содержание номера.
Zilog: Dep Is Ugly But I Am More
Les oeuwrez - рассказ "Планета".

В этот день...   3 декабря