elt043_aula_09

25
ELT043 – Microcontroladores Graduação em Engenharia Eletrônica Universidade Federal de Itajubá IESTI Prof. Rodrigo de Paula Rodrigues Programação do HCS12 - Parte 4 Aula 09

Upload: italo-pereira-guimaraes

Post on 22-Dec-2015

7 views

Category:

Documents


1 download

DESCRIPTION

notas de aula sobre o microprocessador HCS12

TRANSCRIPT

ELT043 – MicrocontroladoresGraduação em Engenharia Eletrônica

Universidade Federal de Itajubá IESTI

Prof. Rodrigo de Paula Rodrigues

Programação do HCS12 - Parte 4

Aula 09

HCS12 | Execução de instruções

Implementação de algoritmos

Ação X

?

Ação Y

Ação W

Memória de dados

...

E E+1 E+2 E+3 ...Endereço:

Dado:

ELT043 - Microcontroladores Prof. Rodrigo

Ação Z

Interação: N N+1 N+2 N+3 …

Modo de endereçamento indexado

HCS12 | Assembly para o HCS12

Parâmetros a serem utilizados pela instrução

CÓD. OPE OPERANDO

O que deve ser feito

Deslocamento a partir de uma base (índice)

ELT043 - Microcontroladores Prof. Rodrigo

Instrução a ser efetuada pelo µP (OPCODE)

Parâmetros a serem utilizados pela instrução

HCS12 | Modo de endereçamento indexado

Endereçamento indexado

CÓD. OPE DESLOCAMENTO

Índice base

+

ENDEREÇO EFETIVO Memória

ELT043 - Microcontroladores Prof. Rodrigo

ENDEREÇO EFETIVO

OPERANDO

HCS12 | Modo de endereçamento indexado

Endereçamento indexado no HCS12

CÓD. OPE DES. de 3, 5, 9 ou 16 bits

X+

ENDEREÇO EFETIVO

Y, SP, PCou

Memória

ELT043 - Microcontroladores Prof. Rodrigo

ENDEREÇO EFETIVO

OPERANDO

Memória

HCS12 | Modo de endereçamento indexado

Deslocamento fixo sinalizado de 5 ou 9 bits

INSTRUÇÃO Operando de 5 ou 9 bits , BASE

X Y SP PC

Exemplos ( X ← $1000, Y ← $2000 )

ELT043 - Microcontroladores Prof. Rodrigo

Exemplos ( X ← $1000, Y ← $2000 )

LDAA 0, X

A ← M[ X+0 ]A ← M[ $1000 ]

STAB -8, Y

M[ Y - 8 ] ← BM[ $1FF8 ] ← B

LDAB $FF, Y

A ← M[ Y+$FF ]A ← M[ $20FF ]

HCS12 | Modo de endereçamento indexado

Deslocamento fixo de 16 bits

INSTRUÇÃO Operando de 16 bits , BASE

X Y SP PC

Exemplos ( X ← $1000, Y ← $2000 )

ELT043 - Microcontroladores Prof. Rodrigo

Exemplos ( X ← $1000, Y ← $2000 )

LDAA $1234, X

A ← M[ X+ $1234 ]A ← M[ $2234 ]

STAB $FF00, Y

M[ Y+$FF00 ] ← BM[ $1F00 ] ← B

LDAB $81FF, Y

A ← M[ Y+$81FF ]A ← M[ $A1FF ]

HCS12 | Modo de endereçamento indexado

Pós-incremento /decremento de 3 bits

INSTRUÇÃO Operando de 3 bits , BASE +/-

X Y SP

Exemplos ( X ← $1000, Y ← $2000 )

ELT043 - Microcontroladores Prof. Rodrigo

Exemplos ( X ← $1000, Y ← $2000 )

LDAA 1, X+

A ← M[ $1000 ]X ← X + 1 = $1001

STAB %101, Y+

M[ $2000 ] ← BY ← Y + 5 = $2005

LDAB 8, Y-

A ← M[ $2000 ]Y ← Y - 8 = $1FF8

HCS12 | Modo de endereçamento indexado

Pré-incremento /decremento de 3 bits

INSTRUÇÃO Operando de 3 bits , +/- BASE

X Y SP

Exemplos ( X ← $1000, Y ← $2000 )

ELT043 - Microcontroladores Prof. Rodrigo

Exemplos ( X ← $1000, Y ← $2000 )

LDAA 1, +X

X ← X + 1 = $1001A ← M[ $1001 ]

STAB %101, +Y

Y ← Y + 5 = $2005M[ $2005 ] ← B

LDAB 8, -Y

Y ← Y - 8 = $1FF8A ← M[ $1FF8 ]

HCS12 | Modo de endereçamento indexado

Deslocamento por acumulador

INSTRUÇÃO Acumulador , BASE

X Y SP PC

Exemplos ( A ← $10, B ← $20, X ← $1000, Y ← $2000 )

A B D

ELT043 - Microcontroladores Prof. Rodrigo

Exemplos ( A ← $10, B ← $20, X ← $1000, Y ← $2000 )

LDAA B, X

A ← M[ $1000+$20 ]A ← M[ $1020 ]

STAB D, Y

M[ $1020+$2000] ← BM[ $3020 ] ← B

LDAB A, Y

A ← M[ $2000 + $10 ]A ← M[ $2010 ]

HCS12 | Modo de endereçamento indexado

Indireto por 16 bits

INSTRUÇÃO Operando de 16 bits , BASE

X Y SP PC

Exemplo ( X ← $1000, M[$100A:$100B ] ← $2000, M[ $2000 ] ← $3A )

ELT043 - Microcontroladores Prof. Rodrigo

Exemplo ( X ← $1000, M[$100A:$100B ] ← $2000, M[ $2000 ] ← $3A )

LDAA [ 10, X ]1º: EE1 ← 10 + $1000 ← $100A 2º: EE2 ← M[ E1:E1+1 ] ← $20003º: A ← M[ EE2 ] ← $3A

HCS12 | Modo de endereçamento indexado

Indireto pelo acumulador D

INSTRUÇÃO D , BASE

X Y SP PC

Exemplo ( SP,D ← $1000, M[$2000:$2001 ] ← $1234, M[ $1234 ] ← $A3 )

ELT043 - Microcontroladores Prof. Rodrigo

Exemplo ( SP,D ← $1000, M[$2000:$2001 ] ← $1234, M[ $1234 ] ← $A3 )

LDAA [ D, SP ]1º: EE1 ← $1000 + $1000 ← $2000 2º: EE2 ← M[ E1:E1+1 ] ← $12343º: A ← M[ EE2 ] ← $A3

Instruções de trabalho com os registros de índice

HCS12 | Modo de endereçamento indexado

os registros de índice

XGD(X/Y) – Troca de valoresLD (X/Y/S) - Carregamento

ST(X/Y/S) - Armazenamento IN(X/Y/S) – Incremento

ELT043 - Microcontroladores Prof. Rodrigo

T(SX/SY/XS/YS) - Transferência DE (X/Y/S) – Decremento

Carregar o registro de índice

HCS12 | Modo de endereçamento indexado

S X H I N Z V CLDXLDYLDS

X ← M:M+1Y ← M:M+1S ← M:M+1

0

Imediato Direto Estendido Indexado

ELT043 - Microcontroladores Prof. Rodrigo

Imediato

LDS #$1234

SP ← $1234

Direto Estendido Indexado

LDX $12

X ← M[ $0012 ]: M[ $0013 ]

LDY $1234

Y ← M[ $1234 ]:M[ $1235 ]

LDS 0, X

SP ← M[ X ]:M[X+1]

Armazenar o registro de índice

HCS12 | Modo de endereçamento indexado

S X H I N Z V C

0

Direto Estendido Indexado

STXSTYSTS

M:M+1 ← XM:M+1 ← YM:M+1 ← S

ELT043 - Microcontroladores Prof. Rodrigo

Direto Estendido Indexado

STX $12

M[$0012]:M[$0013] ← X

STY $1234

M[$1234]:M[$1234] ← Y

STS 0, Y

M[ Y ]:M[Y+1] ← SP

Transferir entre os registros de índice

HCS12 | Modo de endereçamento indexado

TSXTSYTXSTYS

Inerente

S X H I N Z V C

X ← SX ← YS ← XS ← Y

ELT043 - Microcontroladores Prof. Rodrigo

Inerente

TSX

X ← S

TSX

X ← S

Trocar valores entre os registros de índice

HCS12 | Modo de endereçamento indexado

XGDXXGDY

X ↔ DY ↔ D

S X H I N Z V C

Inerente

ELT043 - Microcontroladores Prof. Rodrigo

Inerente

XGDY

Y ↔ D

Incrimentar registro de índice

HCS12 | Modo de endereçamento indexado

S X H I N Z V CINXINY

INS

X ← X + 1Y ← Y + 1

SP ← SP + 1

ELT043 - Microcontroladores Prof. Rodrigo

Inerente

INX

X ← X + 1

Decrementar registro de índice

HCS12 | Modo de endereçamento indexado

S X H I N Z V CDEXDECY

DECS

X ← X - 1Y ← Y – 1

SP ← SP - 1

ELT043 - Microcontroladores Prof. Rodrigo

Inerente

DES

SP ← SP - 1

Exemplo 1

HCS12 | Modo de endereçamento indexado

Somar os 10 primeiros valores presentes a partir da posição de memória$1000. Considerar que os valores sejam não sinalizados de 8 bits e que oresultado da soma não seja superior ao valor 255.O resultado da soma deveser armazenado na posição de memória $1020.

ELT043 - Microcontroladores Prof. Rodrigo

Exemplo 1

HCS12 | Modo de endereçamento indexado

XDEF InicioABSENTRY Inicio

ORG $1000V: DS.B 10 ; Valores a somar

ORG $1020VR: DS.B 1 ; Resultado

ORG $4000Inicio: CLRA ; A ← 0

LDX #V ; X ← $1000LDAB #10 ; B ← 10

Somar: ADDA 0, X ; A ← A + M[ X ]INX ; X ← X + 1

A ← A + M[ X ]

A ← 0, X ← $1000 e B ← 10

X ← X+1, B ← B - 1

B = 0 ?Não

ELT043 - Microcontroladores Prof. Rodrigo

INX ; X ← X + 1DECB ; B ← B - 1BNE Somar ; Se B = 0, parar a somaSTAA VR ; M[$1020] ← Soma

ORG $FFFEDC.W Inicio

END

Armazenar o resultado

B = 0 ?Não

Exemplo 1 (solução alternativa)

HCS12 | Modo de endereçamento indexado

XDEF InicioABSENTRY Inicio

ORG $1000V: DS.B 10 ; Valores a somar

ORG $1020VR: DS.B 1 ; Resultado

ORG $4000Inicio: CLRA ; A ← 0

LDY #V ; Y ← $1000LDAB #9 ; B ← 9

Somar: ADDA B, Y ; A ← A + M[ Y + B ]DECB ; B ← B - 1

A ← A + M[ Y + B ]

A ← 0, Y ← $1000 e B ← 9

B ← B - 1

B < 0 ?Não

ELT043 - Microcontroladores Prof. Rodrigo

DECB ; B ← B - 1BPL Somar ; Se B = 0, parar a somaSTAA VR ; M[$1020] ← Soma

ORG $FFFEDC.W Inicio

END

Armazenar o resultado

B < 0 ?Não

Exemplo 2

HCS12 | Modo de endereçamento indexado

Para o exemplo anterior, o aletre de forma a considerar que o resultado dasoma seja de 16 bits e o armazena a partir da posição de memória $1030.

ELT043 - Microcontroladores Prof. Rodrigo

Exemplo 2

HCS12 | Modo de endereçamento indexado

XDEF InicioABSENTRY InicioABSENTRY Inicio

ORG $4000Inicio: CLRA ; A , B ← 0

CLRB LDX #$1000 ; X ← $1000LDY #10 ; Y ← 10

Somar: ADDB 1, X+ ; B ← B + M[ X ] e, depois, X ← X + 1ADCA #0 ; A ← A + 0 + CDEY ; Y ← Y - 1BNE Somar ; Se Y = 0, parar a soma

A:B ← A:B + 0:M[ X ], X ← X + 1

A, B ← 0, X ← $1000 e Y ← 10

Y ← Y - 1

Y = 0 ?Não

ELT043 - Microcontroladores Prof. Rodrigo

BNE Somar ; Se Y = 0, parar a somaSTD $1030 ; M[$1030]:M[$1031] ← A:B (Soma)

ORG $FFFEDC.W Inicio

ENDArmazenar o

resultado

Y = 0 ?Não

HCS12 | Fim

Obrigado

ELT043 - Microcontroladores Prof. Rodrigo