As instrues inerentes ao microcontrolador possuem algumas classificaes,
listadas abaixo:
Instrues de movimentao de dados para efetuar a carga, movimentao e manipulao de dados;
Instrues de manipulao de bits para setar/apagar bits na memria ou no registrador CCR (code condition register);
Instrues aritmticas e lgicas para realizar operaes matemticas ou lgicas;
Instrues de teste condicional e desvio para realizar testes e desvios no fluxo do programa;
Instrues de controle do processador para o controle interno do processador.
A seguir, os comandos usados em cada classificao:
Instrues de movimentao de dados
LDA
Carrega um valor imediato ou da memria no acumulador (A).
Exemplos
LDA #5 ;Carrega A com o valor 5 LDA 128 ;Supondo que o contedo da posio 128 da memria igual $10, tal comando carrega no Acumulador esse contedo, fazendo com que A=$10.
STA
Copia o contedo do acumulador (A) para a memria.
Exemplos
Considerando A=$50: STA $80 ;Armazena o valor de A na posio $80 da memria STA ,X ;Armazena o contedo do Acumulador na posio de memria indicada por X:H.
LDX
Carrega um valor imediato ou da memria no registrador X.
Exemplos
LDX #5 ;Carrega X com o valor 5 decimal LDX 128 ;Supondo que o contedo da posio 128 da memria $81, esse comando carrega tal contedo ($81) em X.
STX
Armazena o contedo do registrador X numa posio especificada de memria.
Exemplos
STX $80 ;Considerando o valor de X igual a 40 ($40), tal comando armazena na posio $80 da memria o valor de X, 40.
LDHX
Carrega um valor imediato ou da memria no par de registradores H:X.
Exemplos
LDHX #$1234 ;Carrega H:X com $1234 (H=$12 e X=$34) LDHX 128 ;Supondo que o contedo da posio de memria 128 igual a $F0 e 129 igual a $00, tal comando carrega H com o contedo da posio 128 da memria e X com o contedo da posio 129. (H=$F0 e X=$00).
STHX
Copia o contedo de 16 bits de H:X para a posio de memria (Sendo X armazenado no endereo seguinte).
Exemplos
STHX $80 ;Supondo que H:X valha $1234, tal comando armazena o valor de H (no caso, $12) na posio 80 da memria e o valor de X ($34) na posio seguinte, 81.
MOV
Copia uma constante imediata para uma posio de memria ou um valor entre um aposio de memria e outra.
Exemplos
MOV $80,$81 ;Se o contedo da posio de memria $80 igual a $10, esse comando copia tal valor na posio $81 de memria (assim, ($81)=$10). MOV ,X+,$80 ;Supondo que H:X aponta para o endereo $90 e esse endereo armazena o valor 0, tal comando copia o contedo do endereo $90 para o endereo $80, fazendo com que $80 seja igual a 0. Aps essa operao H:X ser incrementado (H:X = $91 (armazenar o endereo 91).
CLR
Apaga o contedo de um registrador ou posio de memria especificada.
Exemplos
CLRA ;Apaga o contedo do acumulador (A=0) CLRX ;Apaga o contedo de X (X=0) CLRH ;Apaga o contedo de H (H=0) CLR $80 ;Apaga o contedo da posio $80 da memria
TAP
Copia o contedo do Acumulador para o CCR (registrador de estado do processador).
Exemplos
LDA #$FA ;Carrega o acumulador com o valor $FA TAP ;Copia o contedo de A para o registrador CCR
TPA
Copia o contedo do CCR para o acumulador
Exemplo
TPA ;Copia o contedo do CCR para A
TAX
O contedo do Acumulador copiado para o registrador X.
Exemplos
LDA #5 ;Carrega o acumulador com o valor 5 decimal TAX ;Copia o valor e A para X (A=5)
TXA
O contedo do registrador X copiado para o Acumulador.
Exemplo
TXA ;Supondo que X valha $10, esse comando copia o valor de X para o acumulador (A).
TSX
O contedo do apontador de pilha (SP) mais 1 copiado para o registrador de ndice (H:X).
Exemplo
TSX ;Supondo que SP=$F0, esse comando copia o contedo do SP mais 1, para H:X, fazendo com que H:X = $F1
TXS
O contedo do registrador de ndice (H:X) menos 1 copiado para o apontador de pilha (SP).
Exemplo
TXS ;supondo que H:X = $F1, tal comando copia o contedo de H:X menos 1 para o SP, fazendo com que SP=$F0
RSP
Reseta o contedo do SP (apontador de pilha), restaurando sua condio-padro ($00FF).
Exemplo
RSP ;Supondo que SP =$F0, esse comando reinicia o apontador de pilha (SP=$00FF) PSHA (Pop A)
Armazena o Acumulador na Pilha, e logicamente o apontador da pilha decrementado em 1.
Exemplo
PSHA ;Supondo que o Acumulador seja $AB e que o apontador aponte para $FF (SP=$FF), esse endereo, $FF, conter o valor do Acumulador, $AB, e SP valer $FE, pois foi decrementado.
PULA (PUSH AND LOAD A)
O acumulador carregado com o contedo do endereo apontado pelo apontador de pilha, SP. Este incrementado em 1 para apontar para o prximo endereo.
Exemplo
PULA ;Supondo que SP=$FE e que ($FF)=$1F. O apontador SP incrementado, valendo $FF e o valor do endereo $FF ser imbutido no Acumulador
PSHH (POP H)
O contedo do registrador H armazenado no topo da pilha e o SP decrementado em 1.
Exemplo
PSHH ;Supondo que H=$10 e que SP=$FF. Assim, nesse comando o contedo do endereo $FF passa a valer $10, e o SP decrementa e contm $FE
PULH (PUSH AND Load H)
O indicador do topo da pilha incrementado e o ultimo valor empilhado retirado da pilha e armazenado em H .
Exemplo
PULH ;Supondo que SP=$F0 e ($F1)=$05. Tal comando faz SP conter $F1 e faz o registrador H conter $05
PSHX (POP X)
O contedo do registrador X armazenado no topo da pilha e o apontador da pilha decrementado em 1.
Exemplo
PSHX ;Supondo que X=$15 e que SP=$F5. Aps a execuo da instruo, SP ir conter $F4 e o contedo do endereo $F5 conter o valor do registrado X, no caso, $15.
PULX (PUSH AND LOAD X)
O indicador do topo da pilha (SP) incrementado e o ultimo valor empilhado retirado da pilha e armazenado em X.
Exemplo
PULX ;Supondo que SP=$F4 e $F5=$1A. Esse comando incrementa o SP, valendo agora $F5 e coloca o valor dessa posio de memria em X. Instrues de Manipulao de Bits
BSET (BIT SET)
Seta o bit n(de 0 a 7) de uma posio da memria.
Exemplos
CLR $80 ;Limpa o contedo da posio $80 da memria BSET 0,$80 ;Seta o bit 0 da posio $80 da memria BSET 1,$80 ;Seta o bit 1 da posio $80 da memria BSET 7,$80 ;Seta o bit 7 da posio $80 da memria. Ao total, nesse ponto o valor contido nessa posio de memria de zero ser $83 ou 10000011B (Binrio)
BCLR (BIT CLEAR)
Apaga o bit n (de 0 a 7) de uma posio de memria.
Exemplos
MOV #$FF, $80 ;Primeiro copiamos o valor $FF (11111111B) para a posio $80 da memria BCLR 3,$80 ;Apaga o bit 3 da posio $80 da memria BCLR 2,$80 ;Apaga o bit 2 da posio $80 d amemria BCLR 7,$80 ;Apaga o bit 7 da posio $80 da memria. Nesse ponto, o seu contedo valer $73 (01110011B) Instrues Aritmticas e Lgicas
ADC (ADD WITH CARRY)
Efetua adio com o Acumulador mais o operando de algum endereo de memria mais o contedo de Carry. O Carry, ou C, est presente no registrador de cdigo de condio (CCR). Nesse caso, C ser 1 se a soma ultrapassou 8 bits. (Realiza soma para valores maiores que 8 bits).
Exemplos
MOV #10, $90 ;Copia o valor 10 decimal para o endereo $90 LDA #10 ;Copia o valor 10 decimal para o acumulador SEC ;SET C seta o bit de carry no CCR ADC $90 ;soma tudo, A + ($90) + C -> $10 + $10 +1, que ser $21. como a soma no deu overflow, o bit C do CCR ser zero de novo... ADC #$FF ;soma, A + $FF + C -> $21 + $FF + 0, que ser 276 (100010100B). A soma ultrapassou 8 bits, ento ser armazenado apenas os 8 bits inferiores( 00010100B) em A e o nono bit ir para o C, valendo 1 no caso.
ADD
Soma o contedo do Acumulador com o do operando da memria. O resultado da soma armazenado em A.
Exemplos
MOV #10, $90 ;Copia o valor 10 decimal para o endereo $90 LDA #10 ;Copia o valor 10 decimal para o acumulador SEC ;SET C seta o bit de carry no CCR ADD $90 ;Soma tudo, A + ($90) -> $10 + $10, que ser $20. como a soma no deu overflow, o bit C do CCR ser zero de novo... ADD #$FF ;Soma, A + $FF + -> $20 + $FF + , que ser 275 (100010011B). A soma ultrapassou 8 bits, ento ser armazenado apenas os 8 bits inferiores( 00010011B) em A e o nono bit ir para o C, valendo 1 no caso.
AIS
O operando sinalizado imediato adicionado ao contedo do apontador de pilha (SP).
Exemplos
LDHX #$1234 ;Carrega H:X com o valor $1234 TXS ;Copia o contedo de H:X -1 para SP (SP=$1233) AIS #$10 ;Adiciona 10 ao contedo de H:X (H:X=$1243) AIX
O operando sinalizado imediato adicionado ao contedo do registrador de ndice (H:X).
Exemplos
LDHX #$1234 ;Carrega H:X com o valor $1234 AIX #$10 ;Adiciona 10 ao contedo de H:X (H:X=$1234)
SBC (SUBTRACT WITH CARRY)
Efetua subtrao com o Acumulador mais o operando de algum endereo de memria mais o contedo de Carry. O Carry, ou C, est presente no registrador de cdigo de condio (CCR). Nesse caso, C ser 1 se o resultado da subtrao ultrapassou 8 bits. (Valor da memria mais C eram maiores que o contedo do acumulador).
Exemplos
MOV #40,$81 ;Copia o valor 20 decimal para o endereo $81 LDA #100 ;Copia o valor 100 decimal para o acumulador CLC ;CLEAR C, ou seja, apaga o flag C do CCR (C=0) SBC $81 ;Subtrai o Acumulador com o contedo da posio $81 e o flag C (A=A-($81)-C = 100 -40 -0 =60 SEC ;Seta o flag C (C=1) SBC #59 ;Subtrai 59 e o C do contedo de A (A=60-59-1=0) SBC #1 ;Subtrai 1 e C do contedo de A (A=0-1-0=$FF). Nesse caso, o bit C foi setado pois o resultado um nmero negativo
SUB
Subtrai o contedo do acumulador do operando. O resultado armazenado no acumulador (A)
Exemplos
MOV #40,$81 ;Copia o valor 20 decimal para o endereo $81 LDA #100 ;Copia o valor 100 decimal para o acumulador CLC ;Apaga o flag C (C=0) SUB $81 ;Subtrai o contedo da posio $81 do contedo do acumulador (A=A-($81) = 100 40=60 SUB #70 ;Subtrai 60 do contedo de A (A=60-70=-10=$F6). Comoo resultado deu negativo, o valor binrio de C foi setado (C=1)
MUL
Multiplicao do contedo de X pelo contedo de A, armazenando o resultado de at 16 bits de forma concatenada nos registradores X (parte alta do resultado) e A (parte baixa do resultado).
Exemplos
LDX #$10 ;Carrega X com o valor $10 LDA #$8 ;Carrega A com o valor $8 MUL ;Multiplica A*X = $8 * $10 = $80 (A=$8, X=0) LDX #$10 ;Carrega X com o valor $10 MUL ;Multiplica A * X = $80 * $10 = $800 (A=0, X=$8)
DIV
Efetua a operao H:A / X, ou seja, divide o contedo de 16 bits formado pela concatenao de H(parte alta do valor) e A(parte baixa) pelo contedo de X. O quociente da diviso armazenado em A e o resto armazenado em H. Caso o quociente seja maior que 255 ($FF) ou X seja igual a zero (diviso por zero), o flag C ser setado, indicando o erro. Nesse caso, o resultado em A e H indeterminado.
Exemplos
LDA #$03 ;Carrega A com $03 PSHA ;Guarda A na pilha LDA #$E8 ;Carrega A com $E8 PULH ;Carrega H da pilha (H=$03), H:A = $03EB (1000 decimal) LDX #$14 ;Carrega X com $14 (20 decimal) DIV ;Divide H:A por X ($03EB / $14 = $32, ou seja, 1000 / 20 = 50. O valor $32 armazenado em A e o resto armazenado em H (H=0)
INC Incrementa ao contedo de um registrador ou posio de memria.
Exemplos
LDA #100 ;Copia o valor 100 decimal para o Acumulador INCA ;Incrementa A STA $80 ;Copia o contedo de A ,101, para o endereo $80 da memria INC $80 ;Incrementa o valor aramzenado na posio $80 da memria, que passa ser 102
DEC Decrementa (subtrai 1) do contedo de um registrador ou posio de memria.
Exemplos
LDA #100 ;Copia o valor 100 decimal para o acumulador DECA ;Decrementa A (A=99 decimal) STA $80 ;Copia o contedo de A para o endereo $80 da memria DEC $80 ;Decrementa o contedo do endereo $80 de memria
DAA
Aps uma operao, tal comando ajusta o resultado no formato BCD (Binary Code Decimal)
Exemplos
MOV #$39,$81 ;Copia o valor 39 hexadecimal para o endereo $81 da memria LDA #3 ;Carrega o valor 3 no Acumulador ADD $81 ;Adiciona o acumulador ao valor contido no endereo $81 da memria (A = $3 + $30 = $3C) DAA ;Ajusta o valor do acumulador (A = 42) MOV #$60,$80 ;Copia o valor hexadecimal 60 para o endereo $80 da memria ADD $80 ;Adiciona o acumulador ao contedo do endereo $80 de memria. Assimo acumulador contm o valor $102. DAA ;Ajusta o acumulador (A=$02) e C=1, indicando o estouro da capacidade de representao BCD do Acumulador
AND
Realiza a operao AND, bit a bit, do contedo do acumulador e um valor contido em alguma posio especfica de memria.
Exemplos
MOV #$67, $80 ;Copia o valor 67 hexadecimal para a posio $80 de memria LDA #$F0 ;Carrega A com $F0 AND $80 ;Efetua a operao AND entre o contedo do acumulador e o contedo da posio $80 de memria (A= $FO & $67 = $60) AND #$85 ;Efetua a operao AND entre o contedo do acumulador e aconstante imediata $85 (A = $60 & $85 = $00)
ORA
Efetua OU lgico, bit a bit, do contedo do acumulador com alguma posio especfica de memria
Exemplos
MOV #$67, $80 ;Copia o valor hexadecimal $67 para a posio $80 d ememria LDA #$10 ;Carrega A com $10 ORA $80 ;Efetua OU lgico entre o Acumulador e o valor da posio $80 de memria(A = $10 + $67 = $77) ORA #$85 ;Efetua o OU lgico entre o Acumulador e a constante imediata $85, ou seja, o resultado ser $F7
EOR
Efetua a operao OU EXCLUSIVO bit a bit do contedo do acumulador ao contedo de algum endereo de memria especificado.
EXEMPLOS
MOV #$67, $80 ;Copia o valor 67 hexadecimal para o endereo $80 da memria LDA #$12 ;Carrega A com 12 EOR $80 ;Efetua o OR EXCLUSIVO entre o contedo do Acumulador e o endereo $80. (A=$12 XOU $67 = $75) EOR #$75 ;Efetua a operao XOR entre o contedo do acumulador e a constante imediata $85 (A=$75 XOU $75 = $00)
COM
Faz o complemento de um em algum oerando especificado (A, X ou memria) e armazenado tambm.
Exemplos
MOV #$67, $80 ;Copia o valor 67 hexa na posio $80 da mem LDA #$F1 ;Carrega A Com $F1 COM $80 ;Complementa o contedo da posio 80 de mem (era $67, passa a ser $98) COMA ;Complementa o contedo do acumulador (seu contedo, que era $F1, passa a ser $0E
NEG
Faz a negao do operando especificado (A, X ou memria) e armazenado tambm. Ela equivale a operao complemento de dois, que o complemento de um seguido de um incremento.
Exemplos
MOV #$67, $80 ;Copia o valor 67 hexa na posio $80 da mem LDA #$F1 ;Carrega A Com $F1 NEG $80 ;Nega o contedo da posio $80 de memria (de $67 passa a ser $99) NEGA ;Nega o contedo do Acumulador (o seu contedo, que era $F1, passa a ser $0F)
NSA (NIBBLE AND STORE A)
Faz a troca dos Nibbles (grupo de 4 dgitos) do acuulador e armazena o resultado no prprio Acumulador.
Exemplos
LDA #$F1 ;Carrega A com $F1 NSA ;Troca os nibbles do acumulador, ou seja, aps a operao, passa conter $1F
ASL (ARITMETIC SHIFT LEFT)
Efetua o deslocamento aritmtico em uma unidade esquerda do operando (A, X ou memria). O bit mais significativo vai pro Carry - C e o bit menos significativo preenchido com zero.
Exemplos
MOV #$13,$80 ;Copia o valor 13 hexa para o endereo $80 ASL $80 ;Desloca o contedo de $80 uma posio esquerda e seu contedo passa valer $26.
O deslocamento de um bit esquerda equivale a multilicar por dois. Por exemplo, 01B vale 1 decimal. Deslocando esquerda temos 010, que 2, e deslocando mais uma vez teremos 0100, o valor 4. ASLA desloca A esquerda.
LSL (LOGICAL SHIFT LEFT)
O mesmo que ASL. ROL (ROTATE LEFT)
Faz a rotao do contedo do operando (A, X ou a memria), ou seja, os bits do operando so deslocados uma posio esquerda, sendo o bit mais significativo deslocado para o carry C e o contedo de C anterior armazenado no bit menos significativo.
Exemplos
MOV #$34,$80 ;Copia o valor 34 hexadecimal para o endereo $80 da memria SEC ;Seta o carry ROL $80 ;Rotaciona o valor contido em $80 0011 0100 ($34) 0011 0100 1 (Carry) (Carry) 0 0110 1001
ASR (ARITMETIC SHIFT RIGTH)
Efetua o deslocamento aritmtico em uma unidade direita do operando (A, X ou memria). O bit mais significativo (o da extrema esquerda) permanece inalterado e o bit menos significativo deslocado pro Carry -C-.
Exemplos
MOV #$FA, $80 ;copia o valor hexadecimal FA para a posio de memria $80 ASR $80 ;Desloca o contedo do endereo $80 da memria uma posio direita. O 1 extrema esquerda permanece inalterado e o zero extrema direita vai pro Carry do registrador CCR. 1111 1010 ($FA) 1111 1010 1111 1101 0 ($FD)
LSR (LEFT SHIFT RIGTH) O mesmo esquema com o ASR, porem ao invz de copiar o bit extrema esquerda, ele preenchido com zero.
Exemplos
MOV #$FA, $80 ;copia o valor hexadecimal FA para a posio de memria $80 ASR $80 ;Desloca o contedo do endereo $80 da memria uma posio direita. O 1 extrema esquerda preenchido com zero e o zero extrema direita vai pro Carry do registrador CCR. 1111 1010 ($FA) 1111 1010 0111 1101 0 ($FD)
ROR (ROTATE RIGTH)
Faz a rotao do contedo do operando (A, X ou a memria), ou seja, os bits do operando so deslocados uma posio direita, sendo o bit menos significativo deslocado para o carry C e o contedo de C anterior armazenado no bit mais significativo.
Exemplos
MOV #$65,$80 ;Copia o valor 67 hexadecimal para o endereo $80 de memria CLC ;Apaga o flag C (C=0) ROR $80 ;Rotaciona o contedo do endereo $80 0110 0101 ($65) 0110 0101 (aqui entra o zero do C) 0011 0010 1 pro C (valor=$32)
Instrues de teste e desvio
CMP (COMPARE)
Compara o contedo do acumulador com o contedo da posio de memria ou do operando imediato especificado. Tal comparao feita subtraindo o contedo da memria do contedo do acumulador.
Exemplos
MOV #$39, $80 ;Copia o valor 39 hexadecimal para o endereo $81 LDA #$38 ;Carrega o valor $38 para o Acumulador CMP $80 ;Compara o acumulador com a posio $80 de memria. C=1, indicando que o contedo da memria maior que o contedo do Acumulador. MOV #$10,$80 ;Copia o valor hexa 10 para o endereo $80 CMP $80 ;Compara o valor contido nesse endereo com o acumulador. C=0, indicando que o contedo da memria menor que o contedo do acumulador. O flag Z, presente no registrador CCR, ser zero (Z=0) pois o resultado no foi igual a zero (38 do acumulador 10 da posio de memoria > 0). Nos outros caso acima tambm. MOV #$38,$80 ;Copia o valor hexa 38 para a posio $80 de memria CMP $80 ;Compara o valor contido nesse endereo com o acumulador. O flag Z, presente no registrador CCR, ser setado (Z=1) pois o resultado foi igual a zero (38 do acumulador 38 da posio de memoria = 0) realizado na comparao.
CPX (COMPARE X)
Compara o contedo do registrador de ndice X com o contedo da posio de memria ou do operando imediato especificado. A comparao feita subtraindo o contedo da posio de memria especificado com o contedo armazenado em X. Z ser setado se tal subtrao for igual a 0 e C ser setado se se o resultado for menor que zero (Valor da memria maior que o contedo do registrador X).
Exemplos
MOV #$5A, $80 ;Copia o valor 5A hexadecimal para o endereo $81 LDX #$80 ;Carrega o valor $80 para o X CMP $80 ;Compara o X com a posio $80 de memria. Como X maior que o contedo de memria, V=1 e C=0
CPHX (COMPARE HX)
Compara o contedo do par de registradores H:X com o contedo de 16 bits da memria ou do operando imediato. Como envolve uma comparao de 16 bits, usa-se o endereo especificado (MSB MOST SIGNIFICANT BIT) e o endereo seguinte (LSB LESS SIGNIFICANT BIT).Os bits C e Z se comportam de maneira similar ao CPX
Exemplos
MOV #$12,$80 ;Copia o valor hexa 12 para a posio $80 de memria MOV #$35,$81 ;Copia o valor hexa 35 para a posio seguinte de memria, $81 LDHX #$1234 ;Carrega em HX o valor $1234 CPHX $80 ;Compara H:X com o contedo do endereo $80 e $81.C NO ser setado pois o resultado da subtrao no menor que zero ($1235 - $1234 >0)
CBEQ (COMPARE AND BRANCH IF EQUAL)
Compara o contedo do acumulador (A) ou registrador de ndice (X) com o contedo de uma posio especfica de memria e desvia se forem iguais. uma instruo que considerada a unio de outras duas, a CMP e BEQ(desvia se igual), e tem o bebefcio de no alterar os flags e ser mais rapida que as outas duas. Existem variantes, com mnemonicos diferentes: CBEQA (para o Acumulador) e CBQEX (para o X).
Exemplos
Nesse exmplo tem-se uma rotina que procura um caractere (no caso o espao) em uma string de memria. LDA #$20 ;Carrega o valor $20 um codigo de um caractere a ser procurado LDHX #$0080 ;Carrega o endereo inicial da string em H:X DENOVO CBEQ X+,DENOVO ;Compara o contedo do acumulador com o contedo da posio de memria apontada por H:X AIX #-1 ;Subtrai 1 de H:X
BRA (BRANCH)
Efetua o desvio do fluxo do programa. O operando da instruo um endereo relativo de 8 bits em complemento de dois, permitindo o desvio para at 127 posies adiante e 128 posies para trs.
Ao todo so 24 instrues diferentes para o desvio do programa
BRA desvio incondicional BRN no desvia (equivale a um NOP d etrs ciclos) BEQ desvia se igual (ou seja, Z=1) BNE desvia se diferente (se Z=0) BPL desvia se positivo (se N=0) BMI desvia se negativo (se N=1) BCC desvia se o carry igual a zero (C=0) BCS desvia se o carry igual a um (C=1) BHCC desvia se o carry de dgito igual a zero (H=0) BHCS desvia se o carry de dgito igual a um (H=1) BMC desvia se as interrupes estiverem habilitadas (se I=0) BMS desvia se as interrupes estiverem desabilitadas (se I=1) BRCLR desvia se o bit n da memria estiver apagado (nivel 0) BRSET desvia se o bit n d amemria estiver apagado (nivel 1) Aps operaes (CMP, CPHX, CPX, SBC, ou SUB)envolvendo operandos sem sinal: BHI desvia se maior (se C e Z=0) BHS desvia se maior ou igual (se C=0) BLS desvia se menor ou igual (se C ou Z=1) BLO desvia se menor (se C=1) Aps operaes (CMP, CPHX, CPX, SBC ou SUB) envolvendo operandos no formato complemento de dois: BGT desvia se maior(se Z=1 ou N=V) BGE desvia se maior ou igual (se N=V) BLE desvia se menor ou igual (se Z=1 ou N=V) BLT desvia se menor (se N!=V)(N no igual a V)
Exemplos
MOV #$14, $80 ;Carrega o valor $14 (00010100B) no endereo $80 BRSET 2,$80,Teste ;Testa se o bit 2 do valor da posio de memria $80 est em nvel 1. Como o caso, desvia para o fluxo Teste. BRA FIM ;Desvia o programa para a etiqueta FIM
BIL Testa o pino IRQ e desvia para o endereo relativo caso esteja em nvel 0
Exemplo
BIL IRQ_ZERO ;Teste o pino IRQ e se estiver em 0 desvia para IRQ_ZERO
BIH Testa o pino IRQ e desvia para o endereo relativo caso esteja em nvel 1
Exemplo
BIH IRQ_UM ; Teste o pino IRQ e se estiver em 1 desvia para IRQ_UM
TST
Testa o contedo do registrador A,X ou da memria, modificando os bits Z e N no CCR, de acordo.
Exemplos
TSTA ;Caso o contedo do acumulador seja 0, tal comando testa esse valor e como ele zero, o bit Z setado e o N apagado, pois A=0 TST $90 ; Caso o contedo da posio d ememria $90 seja 129, tal comando testa esse valor e como ele maior que 8 bits, o bit Z apagado e o N setado, pois o bit 7 do valor esta em nivel lgico 1.
DBNZ
Decrementa o contedo do operando (A, Xou a memria) e desvia para o endereo relativo caso o resultado seja diferente de zero.
Exemplos
DBNZA PONTO_A ;Decremnta o acumulador (A) e desvia para o endereo PONTO_A caso A difira de zero DBNZX REPETE ;Decrementa X e desvia para REPETE caso X seja diferente de zero DBNZ $80,REP ;Decremneta o contedo do endereo $80 e desvia para REP caso o contedo do mesmo seja diferente de zero DBNZ 5,X,LOOP ;Decrementa o contedo do endereo especificado pela soma de H:X mais 5. Caso o resultado seja diferente de zero, desvia para LOOP
BSR
Faz o desvio do fluxo do programa. O operando da instruo um endereo relativo de 8 bits em complemento de dois, permitindo io desvio para at 127 posies adiante e 128 posies para trs. O contedo do PC mais 2 salvo na pilha em duas partes: primeiro empilhada a parte baixa (8 bits menos significativos) depois a parte alta (8 bits mais significativos). Em seguida, o endereo da subrotina carregado no PC, fazendo com que o programa desvie.
Exemplo
BSR MULT16 ;Desvia para a subrotina chamada MULT16
JMP (JUMP)
Desvio absoluto da rotina
Exemplos
JMP $80 ;Desvia para o endereo $0080 da memria JMP $1000 ;Desvia para o endereo $1000 da memria JMP INICIO;Desvia para o endereo DESVIO da memria JMP 10,X ;Desvia para o endereo obtido oela soma do contedo de H:X mais 10
JSR
Retorno de uma subrotina
Exemplos
JSR $20 ;Desvia para a subrotina no endereo $20 JSR CALCULA ;Desvia para a subrotina CALCULA JSR 1000,X ;Desvia para a subrotina no endereo especificado pelo contedo de H:X + 1000
RTS
Retorno de interrupo.
Exemplo
RTS ;Retorna da rubrotina atual
RTI
Provoca o retorno do fluxo do programa ao ponto seguinte ao de onde ocorreu a interrupo.
Exemplo
RTI ;Retorno de interrupo
Instrues de controle do Processador
SEC (SET C)
Seta o flag de transporte, ou carry, fazendo com que C=1.
Exemplo
SEC ;Seta C (C=1)
CLC (CLEAR C)
Apaga o flag de transporte, ou carry, fazendo com que C=0.
Exemplo
CLC ;Apaga C (C=0)
SEI (SET INTERRUPTION)
Seta o bit de interrupo (flag I do CCR registrador de codigo de condio) fazendo com que as interrupes sejam desabilitadas.
Exemplo
SEI ;Seta o bit I do CCR
CLI (CLEAR INTERRUPTION)
Limpa o bit de interrupo (flag I do CCR registrador de codigo de condio) fazendo com que as interrupes sejam habilitadas.
Exemplo
CLI ;Limpa o bit I do CCR
NOP (NO OPERATION) Interrupo por software, nenhuma instruo executada. Apenas o PC incrementado de forma a apontar a prxima instruo a ser executada.
Exemplo
NOP ;Gasta 4 ciclos de clock principal
SWI
Parada completa do processador, ocorrndo um interrupo na execuo do programa. Possui a mais alta prioridade dentre as interrupes.
Exemplo
SWI ;Provoca uma interrupo
STOP
Parada do processador, desligando o clock da CPU, reduzindo o consumo de energia.
Exemplo
STOP ;Coloca a CPU em modo de parada
WAIT
Coloca a CPU em modo de espera (WAIT) no qual o clock da CPU paralizado, mas os perifricos continuam ativos (caso estejam habilitados) e sa capazes de gerar interrupes.