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>. Если используется предекрементная адресация,то считывается один байт, а записывается два. Почему,я объяснять не буду,сами поймете. И вообще пора закругляться. Спать хочу! Завтра на работу! Флаги : не изменяются,какими были такими и остались!
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября