You are on page 1of 22

Instrues do Microcontrolador HC908Q

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 CLRX CLRH CLR $80 TAP Copia o contedo do Acumulador para o CCR (registrador de estado do processador). Exemplos LDA #$FA TAP TPA Copia o contedo do CCR para o acumulador Exemplo TPA ;Copia o contedo do CCR para A ;Carrega o acumulador com o valor $FA ;Copia o contedo de A para o registrador CCR ;Apaga o contedo do acumulador (A=0) ;Apaga o contedo de X (X=0) ;Apaga o contedo de H (H=0) ;Apaga o contedo da posio $80 da memria

TAX O contedo do Acumulador copiado para o registrador X. Exemplos LDA #5 TAX TXA O contedo do registrador X copiado para o Acumulador. Exemplo TXA 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 (SP=$00FF) ;Supondo que SP =$F0, esse comando reinicia o apontador de pilha ;Supondo que X valha $10, esse comando copia o valor de X para o ;Carrega o acumulador com o valor 5 decimal ;Copia o valor e A para X (A=5)

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 TXS AIS #$10 ;Carrega H:X com o valor $1234 ;Copia o contedo de H:X -1 para SP (SP=$1233) ;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 AIX #$10 ;Carrega H:X com o valor $1234 ;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 DECA STA $80 DEC $80 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) ;Copia o valor 100 decimal para o acumulador ;Decrementa A (A=99 decimal) ;Copia o contedo de A para o endereo $80 da memria ;Decrementa o contedo do endereo $80 de memria

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 LDA #$F1 COM $80 passa a ser $98) COMA era $F1, passa a ser $0E ;Copia o valor 67 hexa na posio $80 da mem ;Carrega A Com $F1 ;Complementa o contedo da posio 80 de mem (era $67, ;Complementa o contedo do acumulador (seu contedo, que

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 LDA #$F1 NEG $80 ser $99) NEGA $F1, passa a ser $0F) ;Copia o valor 67 hexa na posio $80 da mem ;Carrega A Com $F1 ;Nega o contedo da posio $80 de memria (de $67 passa a ;Nega o contedo do Acumulador (o seu contedo, que era

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 NSA passa conter $1F ;Carrega A com $F1 ;Troca os nibbles do acumulador, ou seja, aps a operao,

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 ASL $80 contedo passa valer $26. ;Copia o valor 13 hexa para o endereo $80 ;Desloca o contedo de $80 uma posio esquerda e seu

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 memria SEC ROL $80 ;Copia o valor 34 hexadecimal para o endereo $80 da

;Seta o carry ;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 $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 $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) ;copia o valor hexadecimal FA para a posio de memria ;copia o valor hexadecimal FA para a posio de memria

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 memria CLC ROR $80 (aqui entra o zero do C) ;Copia o valor 67 hexadecimal para o endereo $80 de ;Apaga o flag C (C=0) ;Rotaciona o contedo do endereo $80 0110 0101 ($65) 0110 0101 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 MOV #$35,$81 $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) ;Copia o valor hexa 12 para a posio $80 de memria ;Copia o valor hexa 35 para a posio seguinte de memria,

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 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 IRQ_ZERO ;Teste o pino IRQ e se estiver em 0 desvia para IRQ_ZERO

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 JMP JMP JMP 10 JSR Retorno de uma subrotina Exemplos JSR $20 JSR CALCULA JSR 1000,X contedo de H:X + 1000 RTS Retorno de interrupo. Exemplo RTS RTI Provoca o retorno do fluxo do programa ao ponto seguinte ao de onde ocorreu a interrupo. Exemplo RTI ;Retorno de interrupo ;Retorna da rubrotina atual ;Desvia para a subrotina no endereo $20 ;Desvia para a subrotina CALCULA ;Desvia para a subrotina no endereo especificado pelo $80 ;Desvia para o endereo $0080 da memria $1000 ;Desvia para o endereo $1000 da memria INICIO;Desvia para o endereo DESVIO da memria 10,X ;Desvia para o endereo obtido oela soma do contedo de H:X mais

Instrues de controle do Processador


SEC (SET C) Seta o flag de transporte, ou carry, fazendo com que C=1. Exemplo SEC CLC (CLEAR C) Apaga o flag de transporte, ou carry, fazendo com que C=0. Exemplo CLC ;Apaga C (C=0) ;Seta C (C=1)

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 STOP Parada do processador, desligando o clock da CPU, reduzindo o consumo de energia. Exemplo STOP 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. Exemplo WAIT ;Coloca a CPU no modo de espera ;Coloca a CPU em modo de parada ;Provoca uma interrupo

You might also like