ELT043_Aula_09
-
Upload
italo-pereira-guimaraes -
Category
Documents
-
view
9 -
download
1
description
Transcript of ELT043_Aula_09
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