Born Dead #08
19 апреля 1999
  Amiga  

Мир Амиги - Амига глазами RRA (часть 4).

<b>Мир Амиги</b> - Амига глазами 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 использовать можно.
  Флаги      : не изменяются
----------------------------------------------------------------

                     (Окончание следует)



Другие статьи номера:

Coding - Компрессия картинок (screen to text).

Game - 12 Тайных книг. Миссия: Советы бывалых ведунов.

Games - Heavy on the Magic: Вскрытие показало.

Games - Игры, которые ждет весь мир.

Вступление - Натовский самолет "Стелс".

Другие новости - О Complex Compo, Чёрный Ворон 2, возрождение газеты RIP.

Злоба дня - FreeDom! Цена сцены.

Мир Амиги - Амига глазами RRA (часть 4).

Новости - Новинки: PT v3.4 r(Final), First Associacion, MMA CD-ROM.

Обзор софта - Обзор журнала Demo Or Die #1.

Приложение - Doxycon'99 - Invitation intro.

Реклама - Реклама и объявления.


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

Похожие статьи:
Part 9 - Spectrum books database (part 2).
Программинг - новый быстрой и короткий PT3.x Player от RSM.
Конструктор - монументальная статья по универсальному контроллеру периферии SMUC.
I love amiga - в Коврове всего два амижника.
Smile - звонок Ldir'у.

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