|
Born Dead
#08
19 апреля 1999 |
|
Мир Амиги - Амига глазами RRA (часть 4).

════════════════════════════════════════════════════════════════
╠╬╣║╞╪╡██████╡╪╞║╣╬╠ МИР АМИГИ. ЧАСТЬ IV ╠╬╣║╞╪╡██████╡╪╞║╣╬╠
════════════════════════════════════════════════════════════════
(C)1999 >>RRA>>/AF/SG
(Продолжение. Начало в номерах 5-7)
----------------------------------------------------------------
EOR,EORI - логическое ИСКЛЮЧАЮЩЕЕ ИЛИ
Синтакс : EOR <ea>,Dn
EORI #<data>,<ea>
Размер : .B,.W,.L
Описание : EOR - производит операцию ИСКЛЮЧАЮЩЕЕ ИЛИ над
регистром данных и операндом в <еа>.
EORI - логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ над
операндом в <еа> и непосредственными
данными.
Запрещенные адресации: An
Флаги : X - не изменяется
V,C = 0
N,Z - изменяются
----------------------------------------------------------------
EORI to CCR - логическое ИСКЛЮЧАЮЩЕЕ ИЛИ с регистром флагов
Синтакс : EORI #<data>,CCR
Размер : .B
Описание : логическое ИСКЛЮЧАЮЩЕЕ ИЛИ над регистром флагов
и непосредственными данными.
Флаги : команда проводится именно на них.
----------------------------------------------------------------
EXG - обменять содержимое регистров
Операция : Rx<->Ry
Синтакс : EXG Dx,Dy
EXG Ax,Ay
EXG Dx,Ay
Размер : .L
Описание : Обменивает содержимое двух 32-разрядных регистров
Флаги : не изменяются
----------------------------------------------------------------
EXT,EXTB - расширить знаком
Синтакс : EXT.W Dn
EXT.L Dn
EXTB.L Dn (только на старших процессорах)
Размер : .W,.L
Описание : Расширяет регистр данных знаком.
Например: расширить байт до слова
было: 00100100 #24
стало: 0000000000100100 #0024
было: 10110100 #B4
стало: 1111111110110100 #FFB4
EXT.W - расширяет байт до слова
EXT.L - расширяет слово до длинного слова
EXTB.L - расширяет байт до длинного слова
Флаги : X - не изменяется
N,Z - изменяются
V,C=0
----------------------------------------------------------------
ILLEGAL - вызвать исключение "несуществующая команда"
Операция : SSP-2,(SSP)=векторное смещение (*)
SSP-4,(SSP)=PC
SSP-2,(SSP)=SR
(*) - на M68000 данная строчка не производится
Синтакс : ILLEGAL
Описание : Вызывает исключение "несуществующая команда"
(вектор 4).
Флаги : не изменяются
----------------------------------------------------------------
JMP - переход на адрес
Операция : PC=<еа>
Синтакс : JMP <ea>
Описание : Выполнение программы продолжается по адресу <ea>
Например: JMP 4(A1) - прога джампнется на адрес
A1+4.
Запрещенные адресации: Dn,An,(An)+,-(An)
Флаги : не изменяются
----------------------------------------------------------------
JSR - вызов подпрограммы
Операция : SP-4, (SP)=PC, PC=<ea>
Синтакс : JSR <ea>
Описание : Толкает на стек адрес следующей за JSR команды, а
затем выполнение программы продолжается с адреса
<еа>.
Запрещенные адресации: Dn,An,(An)+,-(An)
Флаги : не изменяются
----------------------------------------------------------------
LEA - загрузить эффективный адрес
Операция : An=<ea>
Синтакс : LEA <ea>,An
Размер : .L
Описание : Работу этой команды новички часто путают с MOVEA
или вообще не понимают. Постараюсь обьяснить:
В отличии от команды MOVEA, команда LEA загру-
жает в регистр адреса не то, что находится по
адресу заданному в <еа>, а сам этот адрес.
Например:
MOVEA.L $8(A2,D3.W*2),A0
A0 равен длинному слову, которое находится по
адресу (A2+D3.W*2+8)
LEA $8(A2,D3.W*2),A0
A0 = A2+D3.W*2+8
Я надеюсь, что вы поняли о чем идет речь.
Кстати тоже самое относится и к командам JMP и
JSR описаных выше.
Запрещенные адресации: Dn,An,(An)+,-(An)
Флаги : не изменяются
----------------------------------------------------------------
LINK - создать стековый фрейм
Операция : SP-4, (SP)=An, An=SP, SP+disp
Синтакс : LINK An,#<disp>
Размер : .W,.L (.L только на старших процессорах)
Описание : Толкает содержимое заданного регистра адреса на
стек,затем загружает содержимое SP в этот ре-
гистр. И под конец прибавляет к SP смещение
(размер стекового фрейма, который должен быть
отрицательным, если конечно ты не извращенец).
В результате этой операции у вас образуется
область памяти, в которой обычно хранят локаль-
ные переменные. Заданный регистр адреса будет
указывать на конец фрейма. Данный стековый фрейм
убивается командой UNLK.
Флаги : не изменяются
----------------------------------------------------------------
LSL,LSR - логический сдвиг
Синтакс : LSd Dx,Dy
LSd #<data>,Dy
LSd <ea>
,где d - направление сдвига
Размер : .B,.W,.L
Описание : логический сдвиг DST в определенном направлении.
Флаги C,X принимают последний выдвинутый бит.
Счетчик сдвига может задаваться двумя методами:
1) непосредственно от 1 до 8
2) в регистре данных
Команда работающая с памятью (LSd <ea>) произво-
дит сдвиг на 1 бит, размер операнда только .W
<еа> не может иметь адресации: Dn,An
LSL: умножение на 2 в степени SRC
┌───────┐
C,X <────┤ОПЕРАНД│<─── 0
└───────┘
LSR: деление без знака на 2 в степени SRC
┌───────┐
0 ─────┤ОПЕРАНД├────> C,X
└───────┘
Флаги : C,X - последний выдвинутый бит
N,Z - изменяются в зависимости от результата
V=0
----------------------------------------------------------------
MOVE,MOVEA,MOVE to CCR,MOVE from CCR,MOVE from SR,MOVEQ -
команды пересылки
Операция : DST=SRC
Синтакс размер
MOVE <ea>,<ea> .B,.W,.L
MOVEA <ea>,An .W,.L
MOVE CCR,<ea> .W
MOVE <ea>,CCR .W
MOVE SR,<ea> .W
MOVEQ #<data>,Dn .L
Описание : MOVE он и в Африке MOVE, как бы его не называли
на разных платформах: MOV,LD,SW,LW и т.д. и т.п.
Без этой команды жить не может ни один проц,
поэтому об'яснять, шо це таке я думаю не стоит.
Просто перечислю особенности каждой команды,хотя
и без этого все понятно.
MOVE <ea>,<ea>, MOVE <ea>,CCR, MOVE CCR,<ea>,
MOVE SR,<ea> - DST не может быть регистром
адреса,на SRC нет никаких ограничений.
MOVEA <ea>,An - пересылка в регистр адреса.
MOVEQ #<data>,Dn - пересылка в регист данных
байта (то бишь числа от 0 до #FF) расширенного
знаком до 32 бит.
Флаги : MOVE,MOVEQ
X - не изменяется
N,Z - изменяются
C,V = 0
MOVEA,MOVE from CCR,MOVE from SR не влияют на
флаги.
MOVE to CCR записывает число именно в них.
----------------------------------------------------------------
MOVE16 - пересылка 16-байтового блока (M68040,M68060)
Синтакс : MOVE16 (Ax)+,(Ay)+
MOVE16 (xxx).L,(An)
MOVE16 (xxx).L,(An)+
MOVE16 (An),(xxx).L
MOVE16 (An)+,(xxx).L
Размер : 16-байт
Описание : Работает как и команда MOVE только перебрасывает
сразу 16-байтовый блок. Адрес должен быть кратен
16-ти.
Флаги : не изменяются.
----------------------------------------------------------------
MOVEM - пересылка нескольких регистров
Синтакс : MOVEM <список регистров>,<еа>
MOVEM <еа>,<список регистров>
Размер : .W,.L
Описание : Записать/считать в/из <ea> целый ряд регистров.
Чаще всего эта команда используется когда нужно
сохранить несколько регистров на стеке во время
вызова какой-нибудь процедуры.
Например: MOVEM.L D0-D5,D7/A0-A2,-(A7) сохранит
на стеке регистры D0,D1,D2,D3,D4,D5,D7,A0,A1,A2.
При использовании предекрементной адресации
регистры записываются с заданного адреса минус
размер операции.При пересылке следующего регистра
адрес снова декрементируется. Одним словом, как
будто вы пихаете на стек регистр за регистром.
Порядок записи/чтения - A7-A0, D7-D0.
При использовании остальных способов адресации
происходит обратное. Порядок - D0-D7, A0-A7
Флаги : не изменяются
----------------------------------------------------------------
MOVEP - переброска периферийных данных
Синтакс : MOVEP Dx,d16(Ay)
MOVEP d16(Ay),Dx
Размер : .W,.L
Операция : Переброска в память осуществляется так, что каж-
дый байт регистра записывается по четному адре-
су.
Например: в регистре число #FF2375E3
при записи по четному адресу в памяти будет:
#FFxx23xx75xxE3
при записи по нечетному адресу:
#xxFFxx23xx75xxE3
При считывании из памяти происходит обратная
операция.
Флаги : не изменяются.
----------------------------------------------------------------
MULS/MULU - умножение со знаком/без знака
Синтакс : MULS/MULU.W <ea>,Dn 32=16*16
остальные команды только на старших процессорах
MULS/MULU.L <еа>,Dl 32=32*32
MULS/MULU.L <еа>,Dh:Dl 64=32*32
Размер : .W,.L
Описание : умножение двух чисел со знаком (MULS) и без зна-
ка (MULU). Разрядность результата и исходных
данных вы можете узнать в пункте Синтакс.
Запрещеные адресации: An
Флаги : X - не изменяется
N,Z - изменяются
V,C = 0
----------------------------------------------------------------
NBCD - сменить знак BCD-числа с учетом флага X.
Операция : DST=0-DST10-X
Синтакс : NBCD <ea>
Размер : .B
Описание : вычитает операнд в <еа> и флаг X из нуля.
Операция происходит с пакованым BCD-числом
Запрещеные адресации: An
Флаги : C,X - изменяются
N,V - неопределенно
Z - 0, если результат не равен 0, иначе не
изменяется(!). Для корректного определения
данного флага, перед операцией его следует
установить.
----------------------------------------------------------------
NEG - смена знака
Операция : DST=0-DST
Синтакс : NEG <ea>
Размер : .B,.W,.L
Описание : вычитает операнд в <еа> из нуля,тем самым изменяя
знак операнда.
Запрещеные адресации: An
Флаги : изменяются все как при вычитании.
---------------------------------------------------------------
NEGX - сменить знак с учетом флага X.
Операция : DST=0-DST-X
Синтакс : NEGX <ea>
Размер : .B,.W,.L
Описание : вычитает операнд в <еа> и флаг X из нуля.
Запрещеные адресации: An
Флаги : C,X - изменяются
N,V - неопределенно
Z - 0, если результат не равен 0, иначе не
изменяется(!). Для корректного определения
данного флага, перед операцией его следует
установить.
----------------------------------------------------------------
NOP - САМАЯ КРУТАЯ КОМАНДА АССЕМБЛЕРА.
При помощи этой команды вы можете написать свою
первую, а может быть и последнюю программу,
только не забудьте поставить в конце RTS. Эта
команда делает все, что вам захочется, поэтому
желательно после команды RTS оставить текстовик -
чего вам впринципе от этой проги надо.
Все просьбы будут рассмотрены процессором.
Пример этой наиC00Lнейшей программы:
NOP
RTS
или вот так:
NOP
NOP
NOP
NOP
NOP
RTS
и вы уже на новом, более прогрессивном уровне программирования!
----------------------------------------------------------------
NOT - инверсия
Синтакс : NOT <ea>
Размер : .B,.W,.L
Описание : инвертирует операнд в <еа>. Для тех,кто не вку-
рил как происходит инверсия, примерчик:
было : 00101101
стало: 11010010
Запрещеные адресации: An
Флаги : X - не изменяется
N,Z - изменяются
V,C = 0
----------------------------------------------------------------
OR,ORI - логическое ИЛИ
Синтакс : OR <ea>,Dn
OR Dn,<ea>
ORI #<data>,<ea>
Размер : .B,.W,.L
Описание : OR - производит операцию ИЛИ над регистром
данных и операндом в <еа>.
ORI - логическая операция ИЛИ над операндом в
<еа> и непосредственными данными.
Запрещенные адресации: An
Флаги : X - не изменяется
V,C = 0
N,Z - изменяются
----------------------------------------------------------------
ORI to CCR - логическое ИЛИ с регистром флагов
Синтакс : ORI #<data>,CCR
Размер : .B
Описание : логическое ИЛИ над регистром флагов и непосред-
ственными данными.
Флаги : команда проводится именно на них.
----------------------------------------------------------------
PACK - упаковать BCD-число (СТАРШИЕ ПРОЦ.)
Синтакс : PACK -(Ax),-(Ay),#<adjustment>
PACK Dx,Dy,#<adjustment>
Описание : Если используются регистры данных,то 16-битный
параметр #<adjustment> складывается с регистром
Dx,в котором содержится непакованное BCD-число.
Биты 11-8 и 3-0 результата соединяются и зано-
сятся в биты 7-0 регистра Dy. Остальные биты
регистра не изменяются.
DST 00000000|aaaa|bbbb|
^ ^
┌─────┘ │
│ │
SRC+#<adjustment> 0000|aaaa|0000|bbbb|
Если используется предекрементная адресация, то
эта операция производится на слове извлеченном из
памяти, и результат также записывается в память.
Следует заметить, что считываются слово (два
непакованных BCD-числа), а записывается один байт
(пакованное BCD-число).
Флаги : не изменяются
----------------------------------------------------------------
PEA - пнуть на стек эффективный адрес
Операция : SP-4, (SP)=<ea>
Синтакс : PEA <ea>
Размер : .L
Описание : Поскольку название команды похоже на команду LEA
легко догадаться,что эта команда работает с
адресом, а не с тем что по нему находится.
Итак,эта команда вычисляет эффективный адрес
операнда и швыряет его на стек.
Например: PEA $1234(A5) , на стеке будет число
равное A5+1234,а не то что находится в этой
ячейке памяти.
Запрещеные адресации: Dn,An,(An)+,-(An). Адресации с регист-
ром PC использовать можно.
Флаги : не изменяются
----------------------------------------------------------------
(Окончание следует)
Другие статьи номера:
Похожие статьи:
В этот день... 13 ноября