Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / Lab_moto / 2.doc
Скачиваний:
13
Добавлен:
16.04.2013
Размер:
265.73 Кб
Скачать

1.4 Команды пересылки данных.

· Загрузить аккумулятор или индексный регистр содержимым ячейки памяти (LDA-loadAccumulator/LDX-LoaDindeXregister).

Команда пересылает содержимое ячейки памяти в аккумулятор или в индексный регистр. В соответствии с записываемыми в регистры данными устанавливаются биты в регистре признаков.

Бит N вCCR устанавливается, если установлен старший бит аккумулятораB7, в противном случае сбрасывается. БитZвCCR установлен, если в аккумуляторе$00, иначе сброшен.

К данным командам применимы все методы адресации, кроме относительного.

· Записать содержимое аккумулятора или индексного регистра в ячейку памяти (STA-SToreAccumulator/STX-STore indeXregister).

Команды STxперемещают содержимое аккумулятора или индексного регистра в ячейку памяти, адресуемую операндом. Содержимое регистра остается неизменным.

Биты NиZвCCRустанавливаются так же как и при использовании командLDA/LDX.

С этими командами можно использовать все методы адресации, кроме относительной.

·Обменять содержимое аккумулятора и индексного регистра (TAX/TXA).

Команда TAX(TransferAccumulator to indeXregister) пересылает содержимое аккумулятора в индексный регистр, действиеTXA(Transfer indeXregister toAccumulator) прямо противоположно. Воздействие на регистр признаков аналогично командамLDA/LDXиSTA/STX.

Заметим, что эти команды используют неявную адресацию.

· Обнулить (команды типа CLR - CLeaR).

Команды типа CLRсбрасывают в нуль содержимое операнда, при этом вCCRзнаковый битNочищается, а флаг нуляZустанавливается в единицу.

К команде CLRприменимы прямая, индексная без базы и индексная с восьмиразрядной базой режимы адресации. КомандыCLRA(CLeaRAccumulator) иCLRX(CLeaRindeXregister) используют неявную адресацию операнда (аккумулятор и индексный регистр).

· Проинициализировать указатель стека (RSP - ResetStackPointer).

В регистр указателя стека SPпересылается значение$00FF, тем самым он устанавливается на вершину стека, регистр признаков при этом не изменяется.

Данная команда использует неявную адресацию.

1.5. Команды передачи управления.

· Команда перехода по условию ?1=1, которое выполнено всегда (BRA - BRanchAlways).

Команда осуществляет переход по адресу, вычисляемому по приведенной ниже формуле, где Rel-относительное смещение, которое содержится в последнем байте кода команды.

PC ¬(PC)+$0002+Rel.

В исходном тексте адрес перехода задается абсолютным значением, символом или выражением, которое может быть вычислено ассемблером (заметим, что правила записи меток или выражений для вычисления адреса перехода могут различаться при использовании разных ассемблеров). Ассемблер вычисляет смещение Relиз абсолютного адреса перехода и текущего значения программного счетчикаPC.

Регистр признаков не изменяется.

· Переход по условию ?1=0, который не выполняется никогда (BRN - BRanchNever).

Команда используется как двухбайтовый вариант команды NOP(нет операции) при отладке программ, когда нужно отменить действие команды перехода, и выполняется за3 цикла. Действие этой команды противоположно действию командыBRA.

Регистр признаков не изменяется.

· Переход, если бит n ячейки памяти равен 0 (BRCLR - BRanch if bitCLeaR).

PC ¬ (PC)+$0003+Rel, если битnячейкиMравен нулю.

Команда проверяет бит nячейки памятиMна равенство нулю. Переход осуществляется, если проверяемый бит равен нулю.Mможет быть в адресном пространстве RAM или регистров ввода/вывода в пределах от$0000до$00FF(таким образом используется прямая адресация). БитCрегистра признаков устанавливается в состояние тестируемого бита.

C:устанавливается, еслиMn=1, иначе сбрасывается.

· Переход, если бит n ячейки памяти равен 1 (BRSET - BRanch if bitSET).

PC ¬(PC)+$0003+Rel, если битnячейкиMравен единице.

Команда проверяет бит nячейки памятиMна равенство единице. Переход осуществляется, если проверяемый бит равен единице.Mможет быть в адресном пространстве RAM или регистров ввода/вывода в пределах от$0000до$00FF(таким обрезом используется прямая адресация). БитCрегистра признаков устанавливается в состояние тестируемого бита.

C:устанавливается, еслиMn=1, иначе сбрасывается.

· Переход, если больше (BHI - Branch if HIgher).

PC¬(PC)+$0002+Rel, если(C)+(Z)=0, т.е. если(A)>(M)(беззнаковые двоичные числа)

Возникает переход, если оба бита CиZрегистра признаков сброшены в ноль. Когда командаBHIиспользуется сразу после выполнения командCMPилиSUB, возникает переход, если беззнаковое число, содержащееся в аккумуляторе, больше, чем беззнаковое число в ячейке памятиM.

Регистр признаков не изменяется.

· Переход, если меньше или равно (BLS - Branch ifLower orSame).

PC¬(PC)+$0002+Rel, если(C)+(Z)=1, т.е. если(A)£(M) (беззнаковые двоичные числа)

Возникает переход, если бит CилиZрегистра признаков установлен в единицу. Когда командаBLSиспользуется сразу после выполнения командCMPилиSUB, возникает переход, если беззнаковое число, содержащееся в аккумуляторе, меньше или равно беззнакового числа в ячейке памятиM.

Регистр признаков не изменяется.

· Переход, если сброшен флаг переноса/если больше или равно (BCC/BHS - Branch if Carry bit Clear/Branch if Higher or Same).

PC¬(PC)+$0002+Rel, если (C)=0

Проверяется состояние бита Cрегистра признаков. Переход возникает, если битСсброшен. МнемоникуBHSпринято использовать после командCMPиSUB, так как переход в данном случае возникает, если беззнаковое число в аккумуляторе больше или равно беззнакового числа, содержащегося в ячейке памятиM.

Регистр признаков не изменяется.

· Переход, если установлен флаг переноса/если меньше (BCS/BLO -Branch ifCarrySet/Branch ifLOwer).

PC¬(PC)+$0002+Rel, если(C)=1

Тестируется состояние бита Cрегистра признаков. Если битCустановлен в единицу, то возникает переход. Если командаBCS/BLOвыполняется сразу после выполнения командCMPилиSUB, переход возникает, если беззнаковое число, содержащееся в аккумуляторе, меньше беззнакового числа, содержащегося в ячейке памятиM.

Регистр условий не изменяется.

· Переход, если не равно (BNE - Branch if Not Equal to zero).

PC¬(PC)+$0002+Rel, если (Z)=0

Тестируется состояние бита Zрегистра условий. Возникает переход, если битZсброшен. Следуя после сравнения или вычитания,BNEвызовет переход, если аргументы не равны.

Регистр условий не изменяется.

· Переход, если равно (BEQ - Branch if EQual).

PC¬(PC)+$0002+Rel, если (Z)=1

Тестируется состояние бита Z регистра условий. Возникает переход, если бит Z установлен. Следуя после сравнения или вычитания, BEQ вызовет переход, если аргументы равны.

Регистр условий не изменяется.

· Переход, если сброшен флаг переноса из младшей тетрады (BHCC - Branch ifHalfCarryClear).

PC¬(PC)+$0002+Rel, если (H)=0

Тестируется состояние бита Hрегистра условий. Возникает переход, если битHсброшен. Команда используется при работе с числами вBCDформате.

Регистр условий не изменяется.

· Переход, если установлен флаг переноса из младшей тетрады (BHCS -Branch ifHalfCarrySet).

PC¬(PC)+$0002+Rel, если (H)=1

Тестируется состояние бита Hрегистра условий. Возникает переход, если битHустановлен. Команды используется при работе с числами вBCDформате.

Регистр условий не изменяется.

· Переход, если плюс (BPL - Branch if PLus).

PC¬(PC)+$0002+Rel, если (N)=0

Тестируется состояние бита Nрегистра условий. Возникает переход, если битNсброшен.

Регистр условий не изменяется.

· Переход, если минус (BMI - Branch if MInus).

PC¬(PC)+$0002+Rel, если (N)=1

Тестируется состояние бита Nрегистра условий. Возникает переход, если битNустановлен.

Регистр условий не изменяется.

· Переход, если бит маскирования прерываний сброшен (BMC - Branch if interruptMaskClear).

PC¬(PC)+$0002+Rel, если (I)=0

Тестируется состояние бита Iрегистра условий. Возникает переход, если битI сброшен (то есть прерывания разрешения).

Регистр условий не изменяется.

· Переход, если бит маскирования прерываний установлен (BMS - Branch if interruptMaskSet).

PC¬(PC)+$0002+Rel, если (I)=1

Тестируется состояние бита Iрегистра условий. Возникает переход, если битIустановлен (то есть прерывания запрещены).

Регистр условий не изменяется.

· Переход, если вход запроса прерывания в 0 (BIL - Branch ifIRQpinLower).

PC¬(PC)+$0002+Rel, еслиIRQ\=0

Тестируется состояние вывода микропроцессора запроса внешнего прерывания. Возникает переход, если на входе нулевой логический уровень.

Регистр условий не изменяется.

· Переход, если вход запроса прерывания в 1 (BIH - Branch if IRQ pinHigher).

PC¬(PC)+$0002+Rel,еслиIRQ\=1

Тестируется состояние вывода микропроцессора запроса внешнего прерывания. Возникает переход, если на входе логическая единица.

Регистр условий не изменяется.

· Переход на подпрограмму (BSR - Branch toSubRoutine).

PC¬(PC)+$0002вPCзаносится адрес возврата

ß(PCL)в стеке сохраняется младший байт адреса возврата

SP¬(SP)-$0001

ß(PCH)в стеке сохраняется старший байт адреса возврата

SP¬(SP)-$0001

PC¬(PC)+RelвPCзагружается адрес подпрограммы

Программный счетчик увеличивается на 2от адреса кода операцииBSR, таким образом, вPCоказывается адрес следующей заBSRкоманды, который является адресом возврата из подпрограммы. Младший байт программного счетчика помещается в стек. Указатель стека уменьшается на1. Затем старший байт программного счетчика помешается в стек, указатель стека уменьшается на1. Производится переход по адресу, определяемому смещением.

Регистр условий не изменяется.

· Длинный безусловный переход (JMP - JuMP).

PC¬Эффективный адрес

Осуществляется переход по эффективному адресу. Эффективный адрес вычисляется в соответствии с правилами для расширенного, прямого и индексного режимов адресации.

Регистр условий не изменяется.

· Длинный вызов подпрограммы (JSR - Jump toSubRoutine).

PC¬(PC)+n n=1,2,3в зависимости от режима адресации

ß(PCL); SP¬ SP-$0001Младший байт адреса возврата в стек

ß(PCH); SP¬ SP-$0001Старший байт адреса возврата в стек

PC¬Эффективный адресЗагрузить вPCадрес подпрограммы

Программный счетчик увеличивается на n, то есть до адреса следующей заJSRкоманды. ЗатемPCсохраняется в стеке. Не используемые биты программного счетчика сохраняются как единицы. Указатель стека указывает на следующую свободную ячейку памяти. Осуществляется переход по эффективному адресу. Эффективный адрес вычисляется в соответствии с правилами для расширенного, прямого и индексного режимов адресации.

Регистр условий не изменяется.

· Возврат из подпрограммы (RTS - ReTurn fromSubroutine).

SP¬(SP)+$0001 PCH PCHиз стека

SP¬(SP)+$0001 PCL PCLиз стека

Указатель стека увеличивается на единицу. Содержимое ячейки памяти, на которую указывает указатель стека, записывается в старший байт программного счетчика. Указатель стека еще раз увеличивается на единицу. Содержимое ячейки памяти, не которую указывает указатель стека, записывается в младший байт программного счетчика.

Регистр признаков не изменяется.

Соседние файлы в папке Lab_moto