Читайте также:
|
|
Значение регистра В уменьшается на единицу. Если при этом B=/0, то осуществляется переход по адресу РС+е, в противном случае управление передается следующей команде программы. Команда удобна для организации циклов, счетчиком повторения в которых служит регистр В.
Команды ввода-вывода
CY Z P/V S N H
IN A,(n) (A®A15...A8;n®A7...AO) ®А • • • • • •
где n — номер порта.
Ввод байта из порта и помещение его в аккумулятор. Полный 16-разрядный адрес порта составляется из значения n (младший байт) и значения аккумулятора (старший байт).
CY Z P/V S N H
IN r,(С) (В®А15...А8;С®А7...А0) ®r • o P o 0 o
где r - А,В,С,D,E,H,L.
Ввод байта из порта и помещение его в регистр. Адрес порта содержится в регистре ВС (в С — младший байт адреса, В — старший). Далее вместо подобного словосочетания будет использоваться фраза «порт адресуется регистром ВС».
CY Z P/V S N H
IN (HL),(C) F(В ® A15...A8;С ® А7...А0) • o P o 0 o
Ввод байта из порта с выставлением флагов. Адрес порта задается регистром ВС. Команда аналогична команде IN r,(C|, но при ее выполнении принятый байт никуда не записывается, а только в зависимости от его значения изменяются биты флагового регистра.
CY Z P/V S N H
INI ( В®А15...А8;C®А7...А0) ®(HL) Ï o Ï Ï 1 Ï
HL+1 ® HL;B-1 ® В
Ввод байта из порта в ячейку памяти с инкрементом. Байт считывается из порта, адресуемого регистром ВС, и записывается в ячейку памяти, адресуемую регистром HL. После выполнения команды содержимое HL увеличивается на единицу, значение В на единицу уменьшается. Если в результате выполнения команды регистр В обнуляется, то устанавливается флаг Z, в противном случае Z=0.
CY Z P/V S N H
INIR Ï 1 Ï Ï 1 Ï
Ввод массива значений из портов в память с инкрементом. Адреса портов задаются регистром ВС, начальный адрес массива памяти — регистром HL, ввод осуществляется в сторону увеличения адресов, количество принимаемых байт равно значению регистра В. После приема очередного байта содержимое В уменьшается на единицу, HL увеличивается на единицу.
CY Z P/V S N H
IND (В®А15...А8;С®А7...А0) ®(HL) Ï o Ï Ï 1 Ï
HL-1®HL;B-1®B
Ввод байта из порта в ячейку памяти с декрементом. Байт считывается с порта, адресуемого регистром ВС, и записывается в ячейку памяти, адресуемую регистром HL. После выполнения команды содержимое регистров HL и В уменьшается на единицу. Если в результате выполнения команды В обнуляется, то устанавливается флаг Z, в противном случае Z=0.
CY Z P/V S N H
INDR Ï 1 Ï Ï 1 Ï
Ввод массива значений из портов в память с декрементом. Адреса портов задаются регистром ВС, начальный адрес массива памяти — регистром HL. Ввод осуществляется в сторону уменьшения адресов, количество принимаемых байт равняется значению регистра В. После приема очередного байта содержимое регистров В и HL уменьшается на единицу.
CY Z P/V S N H
OUT (n),A А®(А®А15...А8;n®A7...A0) • • • • • •
где n — номер порта.
Вывод байта из аккумулятора в порт с номером п. Полный 16-разрядный адрес порта составляется из значения п (младший байт) и значения аккумулятора (старший байт).
CY Z P/V S N H
OUT (С),r r®(В®А15...А8;С®А7...А0) • • • • • •
где r - А,В,С,D,E,H,L.
Вывод байта из регистра г в порт, адресуемый регистром ВС (С — младший байт адреса, а В — старший).
CY Z P/V S N H
OUTI (В®А15...А8;С®А7...А0) ®(HL) Ï o Ï Ï 1 Ï
HL+1®HL;B-1®B
Вывод байта из ячейки памяти в порт с инкрементом. Байт считывается из ячейки памяти, адресуемой регистром HL, и пересылается в порт, адресуемый регистром ВС. После выполнения команды содержимое HL увеличивается на единицу, значение В уменьшается на единицу. Если в результате выполнения команды регистр В обнуляется, то устанавливается флаг Z, в противном случае Z=0.
CY Z P/V S N H
OTIR Ï 1 Ï Ï 1 Ï
Вывод массива из памяти в порты с инкрементом. Адреса портов задаются регистром ВС, начальный адрес массива — регистром HL. Вывод осуществляется в сторону увеличения адресов, количество передаваемых байт равно значению регистра В. После передачи очередного байта содержимое регистра В уменьшается на единицу, регистра HL увеличивается на единицу.
CY Z P/V S N H
OUTD (В®А15...А8;С®А7...А0) ®(HL) Ï o Ï Ï 1 Ï
HL-1®HL;B-1®B
Вывод байта из ячейки памяти в порт с декрементом. Байт считывается из ячейки памяти, адресуемой регистром HL, и пересылается в порт, адресуемый регистром ВС. После выполнения команды содержимое регистров HL и В уменьшается на единицу. Если в результате выполнения команды В обнуляется, то устанавливается флаг Z, в противном случае Z=0.
CY Z P/V S N H
OTDR Ï 1 Ï Ï 1 Ï
Вывод массива из памяти в порты с декрементом. Адреса портов задаются регистром ВС, начальный адрес массива — регистром HL. Вывод осуществляется в сторону уменьшения адресов, количество передаваемых байт равно значению регистра В. После передачи очередного байта содержимое регистров В и HL уменьшается на единицу.
Недокументированные команды
При использовании 8-разрядной шины данных непосредственно можно реализовать только 256 кодов команд (28=256). Остальные 440 (696-256) кодов команд Z80 являются двухбайтными — первым байтом кода в них стоит один из четырех префиксов: #СВ, #DD, #ED, #FD*. Следовательно, кроме описанных 696 кодов команд возможно составить еще много вариантов «неучтенных» кодов. Выполнение некоторых из них может привести к вполне осмысленным результатам. Эти коды составляют так называемые недокументированные команды. В фирменных описаниях процессора эти команды не приводятся, однако многие программисты пользуются ими: иногда для удобства, иногда из соображений секретности (отладчики обычно «не берут» такие команды), иногда для позы, мол, посмотрите, какой я умный.
Чаще всего применяются недокументированные команды, работающие с частями индексных регистров как с 8-разрядными регистрами общего назначения. Эти регистры, верней, части регистров обозначаются IXh, 1X1 (старший и младший байты регистра IX) и IYh, IY1 (старший и младший байты регистра IY).
Ниже приведены некоторые недокументированные команды Z80:
___________________________________________________________
*)Байты #DD и #FD содержатся в кодах команд, работающих с индексными регистрами (IX и IY соответственно); #СВ — в кодах команд, работающих с битами; #ED — в кодах остальных двухбайтных команд.
CY Z P/V S N H
LD r,s s ® r • • • • • •
где r - А,В,С,D,Е;
s - IXh,IXl,IYh,IYl.
CY Z P/V S N H
LD d,r r ® d • • • • • •
где r - А,В,С,D,Е или n;
d - IXh,IXl,IYh,IYl.
Этими командами удобно пользоваться, когда нужно загрузить индексный регистр из какого-либо другого регистра. Например, вместо последовательности команд
PUSH DE;запись в стеке содержимого регистра DE
POP IX;загрузка регистра IX значением из стека
можно использовать
LD IXh,D
LD IXI,E
Хотя вторая последовательность команд занимает в памяти на один байт больше, время ее выполнения меньше на 9 тактов процессора. Ниже приведены недокументированные команды, действие которых не отличается от действия «нормальных» команд байтовой арифметики.
CY Z P/V S N H
ADD A,s A + s ® A o o V o 0 o
ADC A,s A + s + CY ® A o o V o 0 o
SUB s A - s ® A o o V o 1 o
SBC A,s A - s - CY ® A o o V o 1 o
AND s A AND s ® A 0 o P o 0 1
OR s AOR s ® A 0 o P o 0 0
XOR s A XOR s ® A 0 o P o 0 0
CP s A – s o o V o 1 o
INC s s + 1 ® s • o V o 0 o
DEC s s - 1 ® s • o V o 1 o
где s - IXh,IXl,IYh,IYl
Например, для увеличения значения регистра IX на 256 можно использовать недокументированную команду INC IXh, выполнение которой эквивалентно работе целой программы:
PUSH DE;сохранение содержимого регистра DE
LD DE,256;загрузка регистра DE значением 256
ADD IX,DE;увеличение содержимого регистра IX
POP DE;восстановление значения регистра DE
Приведем еще одну недокументированную команду, дополняющую группу команд сдвига:
CY Z P/V S N H
Дата добавления: 2015-10-28; просмотров: 136 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
SRL s o o P o 0 0 | | | ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ GENS4 |