|
Born Dead
#09
30 мая 1999 |
|
Мир Амиги - Амига глазами RRA (часть последняя).

╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟
╠╬╣║╞╪╡███╡╪╞║╣╬╠ МИР АМИГИ. ЧАСТЬ ПОСЛЕДНЯЯ ╠╬╣║╞╪╡███╡╪╞║╣╬╠
╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟
(C) 1999 >>RRA>>/AF/SG
(Окончание. Начало в номерах 5-8)
----------------------------------------------------------------
ROL,ROR - ротация (без флага X)
Синтакс : ROd Dx,Dy
ROd #<data>,Dy
ROd <ea>
,где d - направление сдвига
Размер : .B,.W,.L
Описание : ротация DST в определенном направлении.
Флаг X не участвует в ротации.
Счетчик ротации может задаваться двумя методами:
1) непосредственно от 1 до 8
2) в регистре данных
Команда работающая с памятью (ROd <ea>) произво-
дит ротацию на 1 бит, размер операнда только .W
<еа> не может иметь адресации: Dn,An
ROL:
┌──────────────┐
│ ┌───────┐ │
C <────┴──┤ОПЕРАНД│<──┘
└───────┘
ROR:
┌──────────────┐
│ ┌───────┐ │
└──>│ОПЕРАНД├──┴────> C
└───────┘
Флаги : X - не изменяется
V = 0
N,Z - изменяются в соответствии с результатом
C - последний бит,который участвовал в ротации
----------------------------------------------------------------
ROXL,ROXR - ротация с флагом X
Синтакс : ROXd Dx,Dy
ROXd #<data>,Dy
ROXd <ea>
,где d - направление сдвига
Размер : .B,.W,.L
Описание : ротация DST в определенном направлении.
Флаг X участвует в ротации.
Счетчик ротации может задаваться двумя методами:
1) непосредственно от 1 до 8
2) в регистре данных
Команда работающая с памятью (ROXd <ea>) произ-
водит ротацию на 1 бит, размер операнда только
.W
<еа> не может иметь адресации: Dn,An
ROXL:
┌───────────────────┐
│ ┌───────┐ │
C <────┴──┤ОПЕРАНД│<── X <─┘
└───────┘
ROR:
┌───────────────────┐
│ ┌───────┐ │
└─> X ──>│ОПЕРАНД├──┴───-> C
└───────┘
Флаги : V = 0
N,Z - изменяются в соответствии с результатом
X,C - последний бит,который участвовал в ротации
----------------------------------------------------------------
RTD - возврат из подпрограммы с увеличением SP (незнаю точно
как обозвать по другому эту команду, только она живет на
СТАРШИХ ПРОЦЕССОРАХ)
Операция : PC=(SP), SP+4+disp
Синтакс : RTD #<disp>
Описание : Значение PC снимается со стека,затем к указателю
стека прибавляется параметр #<disp>. Эта команда
обычно используется,если при вызове подпрограммы
несколько параметров были переданы по стеку.
Флаги : не изменяются
----------------------------------------------------------------
RTM - возврат из модуля (MC68020)
Синтакс : RTM Rn
Описание : восстанавливает состояние прежде сохраненного
модуля, затем возвращается в него.
Ничего толкового по модулям я сказать не могу,
поскольку я даже не представляю, что такое модуль
и с чем его едят. Да и знать я не хочу ничего о
них, ведь кроме как на процессоре MC68020, их
нигде больше нет.
----------------------------------------------------------------
RTR - возврат с восстановлением регистра флагов.
Не подумайте, что это наше родное Рекламное Телевидение
России.
Операция : CCR=(SP), SP+2, PC=(SP), SP+4
Синтакс : RTR
Описание : Не подумайте, что это наше родное Рекламное
Телевидение России
Со стека снимается регистр CCR,а затем и PC.
Часть регистра SR доступная в режиме супервизора
не изменяется.
Флаги : как было уже сказано,снимаются со стека.
----------------------------------------------------------------
RTS - возврат из подпрограммы
Операция : PC=(SP), SP+4
Синтакс : RTS
Описание : Самый неизвращенный возврат из подпрограммы.
Просто снимается PC со стека и все!
Флаги : не изменяются
----------------------------------------------------------------
SBCD - десятичное вычитание с учетом флага X
Операция : DST=DST10-SRC10-X
Синтакс : SBCD Dy,Dx
SBCD -(Ay),-(Ay)
другие адресации не возможны.
Размер : .B
Описание : Вычитает одно BCD-число из другого,и для кучи
вычитает из всего этого флаг X.
Флаги : C,X - изменяются
N,V - неопределенно
Z - 0,если результат не равен 0,иначе не
изменяется(!).Для корректного определения
данного флага, перед операцией его следует
установить.
----------------------------------------------------------------
Scc - установить в соответствии с условием
Синтакс : Scc <еа>
Размер : .B
Описание : Если заданное условие верно,то в байт <еа> запи-
шется #FF, иначе 0.
Условия я писал уже дважды, третий раз мне просто
в лом (смотри команды Bcc и DBcc). Хочу отметить
команды:
ST - условие всегда верно,поэтому результат #FF
SF - никогда не верно,значит результат 0.
Кстати, часто используется комбинация команд Scc
и NEG.B. Результат такой комбинации: если условие
верно, то результат 1, иначе 0. Конечно же обе
эти команды должны быть произведены на одном <ea>
Например:
TST.L D1
SMI D0
NEG.B D0
В этом случае если D1 отрицательный,то D0=1,
иначе D0=0.
Флаги : не изменяются
----------------------------------------------------------------
SUB,SUBA,SUBI,SUBQ - вычитание
Синтакс : SUB <ea>,Dn
SUB Dn,<ea>
SUBA <ea>,An
SUBI #<data>,<ea>
SUBQ #<data>,<ea>
Размер : .B,.W,.L
SUBA - .W,.L
Описание : SUB - вычесть из регистра данных операнд в <еа>,
или наоборот.
SUBA - вычесть из регистра адреса операнд в <еа>
SUBI - вычесть из операнда в <еа> любое число.
SUBQ - вычесть из операнда в <еа> число от 1 до
8.
Запрещеные адресации: An доступна только для операций .W,.L
Флаги : изменяются все, исключение команда SUBA, она не
влияет на флаги.
---------------------------------------------------------------
SUBX - вычитание с учетом флага X
Операция : DST=DST-SRC-X
Синтакс : SUBX Dy,Dx
SUBX -(Ay),-(Ay)
другие адресации не возможны.
Размер : .B,.W,.L
Описание : Вычитает одно число с флагом X из другого.
Флаги : C,X - изменяются
N,V - неопределенно
Z - 0, если результат не равен 0, иначе не
изменяется(!). Для корректного определения
данного флага, перед операцией его следует
установить.
----------------------------------------------------------------
SWAP - обменять половинки регистра
Операция : биты 31-16 <-> биты 15-0
Синтакс : SWAP Dn
Описание : Меняет местами 16-разрядные половинки регистра.
Например:
было : 00000000000000001111111111111111 #0000FFFF
стало: 11111111111111110000000000000000 #FFFF0000
Флаги : X - не изменяется
V,C = 0
N,Z - изменяются
----------------------------------------------------------------
TAS - тест и установка операнда
Синтакс : TAS <еа>
Размер : .B
Описание : Тестирует операнд адресуемый полем <еа>, затем
устанавливает его 7-ой бит.
Запрещенные адресации : An
Флаги : X - не изменяется
V,C = 0
N,Z - изменяются
----------------------------------------------------------------
TRAP - вызов исключения TRAP
Операции : бит S регистра SR=1, то бишь режим супервизора
SSP-2, (SSP)=FORMAT/OFFSET (*)
SSP-4, (SSP)=PC, SSP-2, (SSP)=SR
PC=адрес вектора
(*) данная строчка не работает на MC68000
Синтакс : TRAP #<вектор>
Описание : Эта команда впринципе является аналогом писишной
команды INT #N. Она вызывает исключение TRAP
(вектора #20-#2F, 32-47). Номер вектора вычис-
ляется просто: параметр #<вектор>+32. Этот
параметр может иметь значение от 0 до 15.
Принцип исключений и прерываний я опишу очень
скоро, а пока забивать этим текст я не хочу...
Флаги : не изменяются
----------------------------------------------------------------
TRAPcc - TRAP по условию (СТАРШИЕ ПРОЦ.)
Синтакс : TRAPcc
TRAPcc.W #<data>
TRAPcc.L #<data>
Описание : Если заданное условие верно, то вызывается иск-
лючение TRAPcc (вектор 7),иначе прога выполняет-
ся дальше.
А вот для чего нужен параметр #<data> я так и не
вкурил. Когда допрет скажу.
Флаги : не изменяются.
----------------------------------------------------------------
TRAPV - TRAP при переполнении
Синтакс : TRAPV
Описание : эту команду всегда рассматривают отдельно от
команд TRAPcc, потому что в отличии от TRAPcc
команда TRAPV есть на всех процессорах семейства
M680x0. А так, функция одна и та же.
----------------------------------------------------------------
TST - тест операнда
Синтакс : TST <ea>
Размер : .B,.W,.L
Описание : Сравнивает операнд с нулем.
Запрещеные адресации : An и с регистром PC не доступны
на MC68000, на остальных пожалуйста.
Флаги : X - не изменяется
V,C = 0
N,Z - изменяются
---------------------------------------------------------------
UNLK - убить стековый фрейм
Операция : SP=An, An=(SP), SP+4
Синтакс : UNLK An
Описание : Убивает стековый фрейм организованный командой
LINK. А делает он это так: приравнивает SP к
заданному регистру адреса. Затем снимает со стека
сохраненное значение этого же регистра.
И усе в порядке. _ЗАПОМНИТЕ!_ Как и цикл FOR не
может жить без NEXT, так и LINK помрет без UNLK.
Другими словами если LINK был сделан в подпро-
грамме и вы перед выходом не сделали UNLK,то куда
вернется ваша процедура можно лишь догадываться.
Флаги : не изменяются
---------------------------------------------------------------
UNPK - распаковать BCD-число (СТАРШИЕ ПРОЦЕССОРЫ)
Синтакс : UNPK -(Ax),-(Ay),#<adjustment>
UNPK Dx,Dy,#<adjustment>
Описание : Распаковка производится таким макаром:
биты 0-3 и 4-7 операнда-источника (пакованное
BCD-число) переносятся в биты 0-3 и 8-11 соот-
ветственно операнда приемника (получается
распакованное BCD-число),биты 4-7 и 12-15 запол-
няются нулями. И чтобы до конца добить весь этот
процесс к результату прибавляется параметр
#<adjustment>.
Если используется предекрементная адресация,то
считывается один байт, а записывается два.
Почему,я объяснять не буду,сами поймете.
И вообще пора закругляться. Спать хочу!
Завтра на работу!
Флаги : не изменяются,какими были такими и остались!
Другие статьи номера:
Похожие статьи:
В этот день... 17 ноября