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 использовать можно. Флаги : не изменяются ---------------------------------------------------------------- (Окончание следует)
Другие статьи номера:
Похожие статьи:
В этот день... 12 ноября