aula

Propaganda
Assembly
8051
Aplicações de Microprocessadores 2006/2007
Sintaxe do Assembly
[Label]
tabela:
2
movc
Op-code
a,@a+dptr
[Operando]
[Comentário]
; vai à tabela buscar o seu correspondente ASCII
2
Instruções que afectam Flags
3
3
1
4
4
Endereçamento directo
z
No endereçamento directo o operando é
especificado num registo de 8 bits. Só a RAM
interna e os registos de funções especiais podem
utilizar este modo de endereçamento
add
a,7fh
anl
7fh,a
push
pop
7fh
7fh
5
;soma Acc com o conteúdo de 7fh, resultado
;em Acc
;faz o‘e’lógico entre o conteúdo de 7fhe
;Acc, resultado em 7fh
; coloca o conteúdo de 7fh na pilha
; retira da pilha para 7fh
5
Endereçamento Indirecto
z
6
Neste modo o operando especifica um registo que
contem o endereço. Ambas RAM’s internas e
externa podem ser indirectamente endereçadas.
Os registos de endereços para 8 bits podem ser
R0 ou R1, do respectivo banco que estiver
seleccionado ou Stack Pointer SP. No caso do
endereço ser de 16bits só pode ser utilizado o
data pointer DPTR.
add
a,@r0
mov
a,@r0
movx
a,@r1
; Soma Acc com o conteúdo da posição de memória cujo
; endereço está em r0, resultado em Acc
; move o conteúdo da posição de memória cujo endereço está
; r0, resultado em Acc
; move o conteúdo da posição de memória (externa) cujo e
; endereço está em r0, resultado em Acc
6
2
Instruções de Registos
z
Existem instruções que permitem o acesso aos
registos de R0 a R7. Como são possíveis 8
registos significa que podemos indicar qual o
registo pretendido nessas instruções em apenas
três bits.
mov
anl
addc
r7,a
7fh,r0
a,r0
7
; move de Acc para r7
; faz o ‘e’ lógico de r0 com o conteúdo de 7fh
; soma r0 a Acc mais o bit de carry, resultado
; em Acc
7
Instruções especificas a registos
z
Há instruções que são específicas a certos
registos, por exemplo algumas apenas operam
com o acumulador ou com o DPTR, o op-code da
instrução por si só faz isso.
clr
swap
inc
8
a
a
dptr
; coloca o acumulador a zero
; troca nibbles em Acc
; incrementa o dptr
8
Endereçamento Imediato
z
Quando um valor constante é utilizado como
operando. É comum em operações aritméticas,
lógicas e de transferência de dados
mov
anl
subb
9
a, #100
;coloca 100 decimal em Acc
a, #11110000b ; coloca a zero os 4 bits menos
; significativos Acc
a,#0ah
; subtraí 0ah de Acc e carry e coloca,
; resultado em Acc
9
3
Endereçamento Indexado
z
Aqui só a memória de programa pode ser acedida
com este modo de endereçamentos como é óbvio
só pode ser utilizado para leitura. Este modo é
direccionado para utilização com look-up tables,
em que se pode usar como referência da tabela o
PC program counter ou o DPTR data pointer
movc
a, @a+dptr
movc
a, a+pc
; coloca em Acc o conteúdo da posição de
; memória de programa apontado pela
; soma de dptr e de Acc
; coloca em o conteúdo da posição de
; memória de programa apontado pela
; soma de pc e de Acc
10
10
8051-SET.PDF
Ocupação na memória de programa
Tempo de execução
11
11
8051-SET.PDF
Ocupação na memória de programa
Código Máquina
12
12
4
Grupos de Instruções
z
z
z
z
z
Aritméticas
Lógicas
Transferência de dados
Variáveis Boleanas (ao bit)
Saltos e controlo de fluxo de programa
13
13
Aritméticas
14
14
Aritméticas
15
15
5
Aritméticas
16
16
Lógicas
17
17
Lógicas
18
18
6
Lógicas
19
19
Lógicas
20
20
Lógicas
21
21
7
Lógicas
22
22
Transferência
23
23
Transferência
24
24
8
Transferência
25
25
Transferência
26
26
Boleanas
27
27
9
Salto e de controlo
28
28
Salto e de controlo
29
29
Rotinas
rotina:
…
…
ret
PC=[rotina]
PC=[proxima instrução]
Lcall
rotina
; proxima instrução
Quando da chamada de rotina, o endereço da próxima instrução a ser
executada é guardado na pilha e o PC toma o valor de endereço da
rotina. Quando a rotina termina, instrução RET o valor do topo da pilha é
30 restaurado em PC.
30
10
Exemplo de “look-up table”
31
31
Exemplo
;*****************************************************************************
;** Nome: converte_ASCII
;** Descrição: Faz a conversão de um numero de 0-9 para equivalente ASCII
;** Entradas: Em A numero a converter
;** Saídas: Em A o seu equivalente em ASCII
;** Registos utilizados: a,dptr
;*****************************************************************************
converte_ASCII:
Lcall
db
tabela:
pop
pop
movc
ret
32
tabela
30h,31h,32h,33h,34h,35h,36h,37h,38h,39h ; valores para a tabela
dph
dpl
a,@a+dptr
; coloca o dptr a apontar para o inicio da tabela
; vai à tabela buscar o
seu correspondente em ASCII
32
11
Download