Born Dead
#07
12 марта 1999 |
|
Мир Амиги - Амига глазами RRA (часть 3): Основные команды.
════════════════════════════════════════════════════════════════ ╠╬╣║╞╪╡██████╡╪╞║╣╬╠ МИР АМИГИ. ЧАСТЬ III ╠╬╣║╞╪╡██████╡╪╞║╣╬╠ ════════════════════════════════════════════════════════════════ (C)1999 >>RRA>>/AF/SG (Продолжение. Начало в номерах 5 и 6) ОСНОВНЫЕ КОМАНДЫ ---------------------------------------------------------------- ABCD - десятичное сложение с учетом флага X. Операция : DST=SRC10+DST10+X Синтакс : ABCD Dy,Dx ABCD -(Ay),-(Ay) другие адресации не возможны. Размер : .B Описание : складывает два пакованых BCD-числа и флаг X. Флаги : C,X - изменяются N,V - неопределенно Z - 0, если результат не равен 0, иначе не изменяется (!). Для корректного определения данного флага, перед операцией его следует установить. ---------------------------------------------------------------- ADD,ADDA,ADDI,ADDQ - сложение Операция : DST=DST+SRC Синтакс : ADD <ea>,Dn ADD Dn,<ea> ADDA <ea>,An ADDI #<data>,<ea> ADDQ #<data>,<ea> Размер : ADD,ADDI,ADDQ - .B,.W,.L ADDA - .W,.L Описание : ADD - сложение регистра данных с операндом в <ea> или наоборот. ADDA - регистр адреса+операнд в <еа> ADDI - операнд в <ea>+непосредственные данные (то бишь любое число). Невозможные способы адресации: An ADDQ - операнд в <еа>+число от 1 до 8. Флаги : изменяются все,исключением является команда ADDA. Она не влияет на флаги. ---------------------------------------------------------------- ADDX - сложение с учетом флага X Операция : DST=SRC+DST+X Синтакс : ADDX Dy,Dx ADDX -(Ay),-(Ay) другие адресации не возможны. Размер : .B,.W,.L Описание : складывает два числа и флаг X. Флаги : C,X - изменяются N,V - неопределенно Z - 0, если результат не равен 0, иначе не изменяется(!). Для корректного определения данного флага, перед операцией его следует установить. ---------------------------------------------------------------- AND,ANDI - логическое И Операция : DST=DST&SRC Синтакс : AND <ea>,Dn AND Dn,<ea> ANDI #<data>,<ea> Размер : .B,.W,.L Описание : AND - производит операцию И над регистром данных и операндом в <еа>. ANDI - логическая операция И над операндов в <еа> и непосредственными данными. Запрещенные адресации: An Флаги : X - не изменяется V,C = 0 N,Z - изменяются ---------------------------------------------------------------- ANDI to CCR - логическое И с регистром флагов Операция : CCR=CCR&SRC Синтакс : ANDI #<data>,CCR Размер : .B Описание : логическое И над регистром флагов и непосредст- венными данными. Флаги : команда проводится именно на них. ---------------------------------------------------------------- ASL,ASR - арифметический сдвиг влево/вправо Операция : DST=DST сдвинутое SRC раз. Синтакс : ASd Dx,Dy ASd #<data>,Dy ASd <ea> ,где d - направление сдвига (L/R). Размер : .B,.W,.L Описание : арифметический сдвиг DST в определенном направ- лении. Флаги C,X принимают последний выдвинутый бит. Счетчик сдвига может задаваться двумя методами: 1) непосредственно от 1 до 8 2) в регистре данных Команда работающая с памятью (ASd <ea>) произво- дит сдвиг на 1 бит, размер операнда только .W <еа> не может иметь адресации: Dn,An ASL: умножение на 2 в степени SRC ┌───────┐ C,X <────┤ОПЕРАНД│<────0 └───────┘ ASR: деление со знаком на 2 в степени SRC ┌───┬───────┐ ┌─->│MSB│ОПЕРАНД├─────>C,X │ └─┬─┴───────┘ │ │ └─────┘ Флаги : C,X - последний выдвинутый бит N,Z - изменяются в зависимости от результата V - 1, если была смена знака ---------------------------------------------------------------- Bcc - условное ветвление Операция : если условие верно, PC=PC+disp Синтакс : Bcc <метка> Размер : смещение может иметь размер .B,.W,.L .L - только на старших процессорах. Описание : Если заданное условие верно, то выполнение прог- раммы продолжается по адресу PC+смещение. На мо- мент выполнения команды PC равен адресу команды+2 УСЛОВИЯ : BHI - больше C=0,Z=0 BLS - меньше или равно C=1 OR Z=1 BCC - нет переноса C=0 BCS - перенос C=1 BNE - не равно Z=0 BEQ - равно Z=1 BVC - нет переполнения V=0 BVS - переполнение V=1 BPL - плюс N=0 BMI - минус N=1 BGE - больше или равно Z=1 OR N=V BLT - меньше N<>V BGT - больше N,V=1,Z=0 OR N,V,Z=0 BLE - меньше или равно Z=1 OR N<>V Флаги : не изменяются ---------------------------------------------------------------- ВНИМАНИЕ!!!! Операции с битами СНАЧАЛА ТЕСТИРУЮТ, a затем уже влияют на заданные биты. А сам результат операции флаги не изменяет. BCHG - тест и инверсия бита Операция : Z=результат теста бита бит=Z Синтакс : BCHG Dn,<ea> BCHG #<data>,<ea> Размер : .B,.L Описание : Флаг Z устанавливается в соответствии с тестом заданного бита, затем данный бит инвертируется. Если операция происходит на регистре данных, то размер операции - .L, номер бита задается числом от 0 до 31. Если же команда оперирует с памятью, размер операции - .B, номер бита от 0 до 7. Номер бита может задаваться двумя способами: 1) непосредственно 2) в регистре данных Запрещенные адресации: An Флаги : Z - изменяется в результате теста бита C,X,N,V - не изменяются ---------------------------------------------------------------- BCLR - тест и очистка бита Операция : Z=результат теста бита бит=0 Синтакс : BCLR Dn,<ea> BCLR #<data>,<ea> Размер : .B,.L Описание : Флаг Z устанавливается в соответствии с тестом заданного бита, затем данный бит зануляется. Если операция происходит на регистре данных, то размер операции - .L, номер бита задается числом от 0 до 31. Если же команда оперирует с памятью, размер операции - .B, номер бита от 0 до 7. Номер бита может задаваться двумя способами: 1) непосредственно 2) в регистре данных Запрещенные адресации: An Флаги : Z - изменяется в результате теста бита C,X,N,V - не изменяются ---------------------------------------------------------------- BFCHG - тест и инверсия битового поля (СТАРШИЕ ПРОЦЕССОРЫ) Операция : N,Z = результат теста поля <битовое поле>=инвертированное <битовое поле> Синтакс : BFCHG <ea>{offset:width} Описание : тестирует, а затем инвертирует битовое поле. Параметр offset задает начальный бит поля, а параметр width количество бит в поле. Запрещенные адресации: An,(An)+,-(An) Флаги : X - не изменяются C,V=0 N - знак поля Z - 1,все биты поля равны 0. ---------------------------------------------------------------- BFCLR - тест и очистка битового поля (СТАРШИЕ ПРОЦЕССОРЫ) Операция : N,Z = результат теста поля <битовое поле>=0 Синтакс : BFCLR <ea>{offset:width} Описание : тестирует, а затем зануляет битовое поле. Параметр offset задает начальный бит поля, а параметр width количество бит в поле. Запрещенные адресации: An,(An)+,-(An) Флаги : X - не изменяются C,V=0 N - знак поля Z - 1,все биты поля равны 0. ---------------------------------------------------------------- BFEXTS - извлечение битового поля со знаком (СТАРШИЕ ПРОЦ.) Операция : Dn=<битовое поле> Синтакс : BFEXTS <ea>{offset:width},Dn Описание : Извлекает битовое поле, расширяет его знаком до 32 бит и заносит в заданный регистр данных. Тест поля также имеет место. Параметр offset задает начальный бит поля, а параметр width количество бит в поле. Запрещенные адресации: An,(An)+,-(An). Флаги : X - не изменяются C,V=0 N - знак поля Z - 1,все биты поля равны 0. ---------------------------------------------------------------- BFEXTU - извлечение битового поля без знака (СТАРШИЕ ПРОЦ.) Операция : Dn=<битовое поле> Синтакс : BFEXTU <ea>{offset:width},Dn Описание : Извлекает битовое поле, расширяет его нулями до 32 бит и заносит в заданный регистр данных. Тест поля также имеет место. Параметр offset задает начальный бит поля, а параметр width количество бит в поле. Запрещенные адресации: An,(An)+,-(An). Флаги : X - не изменяются C,V=0 N - знак поля Z - 1, все биты поля равны 0. ---------------------------------------------------------------- BFFFO - поиск первой единицы в битовом поле (СТАРШИЕ ПРОЦ.) Операция : Dn=<битовое смещение> Синтакс : BFFFO <ea>{offset:width},Dn Описание : Ищет в битовом поле самую старшую единицу. Для тех кто не понял,пример: битовое поле 001010110 ^ │ вот она В регистр данных заносится номер найденного бита (битовое смещение заданное в команде плюс смещение бита в поле). Если бит не найден, то бишь битовое поле равно 0 в регистр данных заносится битовое смещение заданное в команде плюс кол-во бит в поле. Параметр offset задает начальный бит поля, а параметр width количество бит в поле. Запрещенные адресации: An,(An)+,-(An). Флаги : X - не изменяются C,V=0 N - знак поля Z - 1,все биты поля равны 0. ---------------------------------------------------------------- BFINS - вставить битовое поле. (СТАРШИЕ ПРОЦ.) Операция : <битовое поле>=Dn Синтакс : BFINS Dn,<ea>{offset,width} Описание : Вставляет битовое поле,которое берется из младших битов заданного регистра данных. Например: BFINS SRC,DST{5,4} DST: 0110|xxxx|01101 ^ │ └────┐ │ SRC: 110100101|xxxx| Параметр offset задает начальный бит поля, а параметр width количество бит в поле. Запрещенные адресации: An,(An)+,-(An) Флаги : X - не изменяются C,V=0 N - знак поля Z - 1,все биты поля равны 0. ---------------------------------------------------------------- BFSET - тест и установка битового поля (СТАРШИЕ ПРОЦ.) Операция : N,Z = результат теста поля <битовое поле>=1 Синтакс : BFSET <ea>{offset:width} Описание : тестирует, а затем заполняет единицами битовое поле. Параметр offset задает начальный бит поля, а параметр width количество бит в поле. Запрещенные адресации: An,(An)+,-(An) Флаги : X - не изменяются C,V=0 N - знак поля Z - 1,все биты поля равны 0. ---------------------------------------------------------------- BFTST - тест битового поля (СТАРШИЕ ПРОЦ.) Операция : N,Z = результат теста поля Синтакс : BFTST <ea>{offset:width} Описание : тестирует битовое поле. Параметр offset задает начальный бит поля, а параметр width количество бит в поле. Запрещенные адресации: An,(An)+,-(An). Флаги : X - не изменяются C,V=0 N - знак поля Z - 1,все биты поля равны 0. ---------------------------------------------------------------- BRA - безусловное ветвление. Операция : PC=PC+disp Синтакс : BRA <метка> Размер : смещение может иметь размер .B,.W,.L .L - только на старших процессорах. Описание : выполнение программы продолжается по адресу PC+смещение. На момент выполнения команды PC равен адресу команды+2. Флаги : не изменяются. ---------------------------------------------------------------- BSET - тест и установка бита. Операция : Z=результат теста бита бит=1 Синтакс : BSET Dn,<ea> BSET #<data>,<ea> Размер : .B,.L Описание : Флаг Z устанавливается в соответствии с тестом заданного бита, затем данный бит устанавливается в единицу. Если операция происходит на регистре данных, то размер операции - .L,номер бита задается числом от 0 до 31. Если же команда оперирует с памятью, размер операции - .B,номер бита от 0 до 7. Номер бита может задаваться двумя способами: 1) непосредственно 2) в регистре данных Запрещенные адресации: An Флаги : Z - изменяется в результате теста бита C,X,N,V - не изменяются ---------------------------------------------------------------- BSR - вызов подпрограммы. Операция : SP=SP-4 (SP)=PC PC=PC+disp Синтакс : BSR <метка> Размер : смещение может иметь размер .B,.W,.L .L - только на старших процессорах. Описание : Толкает на стек адрес следующей команды, а затем выполнение программы продолжается по адресу PC+смещение. На момент выполнения команды PC равен адресу команды+2. Флаги : не изменяются. ---------------------------------------------------------------- BTST - тест бита. Операция : Z=результат теста бита Синтакс : BTST Dn,<ea> BTST #<data>,<ea> Размер : .B,.L Описание : Флаг Z устанавливается в соответствии с тестом заданного бита. Если операция происходит на регистре данных, то размер операции - .L, номер бита задается числом от 0 до 31. Если же команда оперирует с памятью, размер операции - .B, номер бита от 0 до 7. Номер бита может задаваться двумя способами: 1) непосредственно 2) в регистре данных Запрещенные адресации: An. Флаги : Z - изменяется в результате теста бита C,X,N,V - не изменяются ---------------------------------------------------------------- CALLM - вызов модуля (только на 68020) Синтакс : CALLM #<data>,<ea> Описание : <еа> является адресом дескриптора внешнего моду- ля. Фрейм модуля создается на вершине стека. Состояние текущего модуля сохраняется в этом фрейме. Операнд #<data> задает размер (в байтах) аргументов, которые передаются вызываемому модулю. Состояние нового модуля загружается из дескриптора по адресу <еа>. Эта команда живет только на процессоре M68020. Похоже разработчики процессоров MC680x0, не посчитали нужным использовать команды работы с модулями в следующих процессорах, поэтому использовать эту команду я не рекомендую. Флаги : не изменяются. ---------------------------------------------------------------- CAS,CAS2 - сравнение и обмен (СТАРШИЕ ПРОЦ.) Синтакс : CAS Dc,Du,<ea> CAS2 Dc1:Dc2,Du1:Du2,(Rn1):(Rn2) Размер : CAS - .B,.W,.L CAS2 - .W,.L Описание : Команда CAS сравнивает операнд в <еа> с операн- дом Dc. Если операнды равны, то команда записы- вает операнд Du в <еа>,иначе операнд в <еа> за- писывается в Dc. Запрещеные адресации: Dn,An Команда CAS2 сравнивает операнд в памяти (Rn1) с операндом Dc1. Если операнды равны,то сравниваются операнды (Rn2) и Dc2. Если и эти операнды равны, то операнды Du1 и Du2 записываются в (Rn1) и (Rn2) соответственно, иначе операнды в (Rn1) и (Rn2) записываются в Dc1 и Dc2. Rn1 и Rn2 - регистры данных или адреса, которые содержат адрес операнда в памяти. Флаги : X - не изменяется N,Z,V,C - изменяются ---------------------------------------------------------------- CHK - проверка значения регистра на принадлежность к заданному диапазону чисел. Синтакс : CHK <ea>,Dn Размер : .W,.L (.L только на старших процессорах) Описание : Сравнивает число в регистре данных с нулем и операндом заданным в <еа>. Если это число меньше нуля или больше верхней границы (в <еа>), то происходит исключение команд CHK,CHK2 (вектор 6) Запрещеные адресации: An Флаги : X - не изменяется N - 1,если Dn<0 0,если Dn>операнда в <еа> иначе неопределено. Z,V,C - неопределено. ---------------------------------------------------------------- CHK2 - проверка значения регистра на принадлежность к задан- ному диапазону чисел. (СТАРШИЕ ПРОЦ.) Синтакс : CHK2 <ea>,Rn Размер : .B,.W,.L Описание : Сранивает Rn по двум границам. По адресу <еа> располагаются нижняя,а затем верхняя границы. Границы - числа со знаком. Если Rn является регистром адреса, а размер операции .B или .W то границы при сравнении расширяются знаком до 32 бит. Если значение регистра меньше нижней границы или больше верхней,то происходит исключение команд CHK,CHK2 (вектор 6). Запрещеные адресации: Dn,An,(An)+,-(An) Флаги : X - не изменяется N,V - неопределено Z - 1,Rn равен какой-либо границе C - 1,Rn вне границ ---------------------------------------------------------------- CLR - очистить операнд. Операция : DST=0 Синтакс : CLR <ea> Размер : .B,.W,.L Описание : Хоть и так все понятно скажу: команда зануляет операнд в <еа>. Запрещеные адресации: An Флаги : X - не изменяется N,V,C=0 Z=1 ---------------------------------------------------------------- CMP,CMPA,CMPI - сравнение. Операция : флаги=DST-SRC Синтакс : CMP <ea>,Dn CMPA <ea>,An CMPI #<data>,<ea> Размер : CMP,CMPI - .B,.W,.L CMPA - .W,.L Описание : Сравнение происходит посредством вычитания SRC из DST (DST не портится). Флаги устанавливаются в соответствии с этим вычитанием. CMP - сравнение регистра данных с операндом в <еа> CMPA - сравнение регистра адреса с операндом в <еа> CMPI - сравнение операнда в <еа> с непосредст- венными данными. Запрещенные адресации: в команде CMPI нельзя использовать An. Использовать адресации с регистром PC разрешается. В командах CMP и CMPA можно использо- вать все виды адресации. Флаги : X - не изменяется N,Z,V,C - изменяются ---------------------------------------------------------------- CMPM - сравнение памяти Синтакс : CMPM (Ay)+,(Ax)+ Размер : .B,.W,.L Описание : Сравнение двух ячеек памяти, адреса которых заданы в двух регистрах адреса. Команда всегда использует постинкрементную адресацию, то бишь после сравнения оба регистра инкрементируются на 1,2 или 4 байта в зависимости от размера операции. Флаги : X - не изменяется N,Z,V,C - изменяются ---------------------------------------------------------------- CMP2 - сравнение регистра с границами (СТАРШИЕ ПРОЦ.) Синтакс : CMP2 <ea>,Rn Размер : .B,.W,.L Описание : Сранивает Rn по двум границам. По адресу <еа> располагаются нижняя,а затем верхняя границы. Границы - числа со знаком. Если Rn является регистром адреса, а размер операции .B или .W то границы при сравнении расширяются знаком до 32 бит. Эта команда очень похожа на CHK2, единственным отличием является то, что команда не вызывает исключения. Запрещеные адресации: Dn,An,(An)+,-(An) Флаги : X - не изменяется N,V - неопределено Z - 1,Rn равен какой-либо границе C - 1,Rn вне границ ---------------------------------------------------------------- DBcc - проверка условия, декремент и ветвление Синтакс : DBcc Dn,<метка> Размер : .W Описание : Команда предназначена для организации циклов. Для начала команда проверяет флаги, если условие заданное в команде верно, то цикл прерывается. (В команде DBF выхода по условию нет, поскольку условие всегда не верно). Если условие не верно, то 16-битный счетчик Dn декрементируется. Если счетчик не равен -1 (#FFFF), то происходит ветвление на адрес <метка>, иначе цикл прерывается. Адрес задается 16-битным смещением от PC. На момент выполнения команды PC равен адресу команды+2. Ассемблеры понимают и мнемонику DBRA - тоже самое что и DBF. УСЛОВИЯ : DBF или DBRA - FALSE DBT - TRUE DBHI - больше C=0,Z=0 DBLS - меньше или равно C=1 OR Z=1 DBCC - нет переноса C=0 DBCS - перенос C=1 DBNE - не равно Z=0 DBEQ - равно Z=1 DBVC - нет переполнения V=0 DBVS - переполнение V=1 DBPL - плюс N=0 DBMI - минус N=1 DBGE - больше или равно Z=1 OR N=V DBLT - меньше N<>V DBGT - больше N,V=1,Z=0 OR N,V,Z=0 DBLE - меньше или равно Z=1 OR N<>V Флаги : не изменяются ---------------------------------------------------------------- DIVS,DIVSL - деление со знаком Синтакс : DIVS.W <ea>,Dn 16r/16q=32/16 остальные только на старших процессорах DIVS.L <ea>,Dq 32q=32/32 DIVS.L <ea>,Dr:Dq 32r/32q=64/32 DIVSL.L <ea>,Dr:Dq 32r/32q=32/32 ,где q - частное, r - остаток Размер : .W,.L Описание : Производит деление со знаком. Команда может иметь четыре вида: 1) DIVS.W <еа>,Dn делит длинное слово Dn на слово в <ea>. Частное размещается в младшем слове регистра Dn, остаток в старшем. Знак остатка такой же как и у делимого. 2)DIVS.L <ea>,Dq делит длинное слово Dq на длинное слово в <еа>. Результат 32-битное частное, остаток не учитывается. 3)DIVS.L <ea>,Dr:Dq делит четверное слово Dr:Dq на длинное слово в <еа>. 32-битное частное поме- щается в Dq, 32-битный остаток в Dr. 4)DIVSL.L <ea>,Dr:Dq делит длинное слово Dq на длинное слово в <еа>. 32-битное частное поме- щается в Dq, 32-битный остаток в Dr. При делении на нуль генерируется соответстующее исключение. Если команда определила переполнение,то устанав- ливается флаг V, а операнды не изменяются. Флаги : X - не изменяется C=0 N,Z - изменяются в соответствии с частным. неопределены при делении на 0 и при пере- полнении. V - 1, при переполнении. Неопределен при делении на 0. ---------------------------------------------------------------- DIVU,DIVUL - деление без знака Как и DIVS, DIVSL только без знака. По поводу этой команды смотрите чуть-чуть выше. (Продолжение Следует)
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября