Académique Documents
Professionnel Documents
Culture Documents
Introduo ............................................................................................................... 1
Registos................................................................................................................... 3
3.1
3.2
3.3
3.4
Excepes................................................................................................................ 5
Conjunto de instrues............................................................................................. 6
5.1
5.2
5.3
Instrues......................................................................................................... 8
Comentrios....................................................................................................16
6.2
Literais............................................................................................................16
6.3
Etiquetas .........................................................................................................16
6.4
Pseudo-Instrues ou Directivas......................................................................17
Introduo
Designao
N de bits
Descrio
RESET
Inicializao (activo a 0)
INT0
INT1
INT2
INT3
INTA
CLOCK
Entrada de relgio
DATAH
DATAL
A15..A0
16
BA
RD
WR
WAIT
BRQ
BGT
Os pinos INT0 a INT3 permitem gerar interrupes externas. Estes pinos so activos no
flanco de 0 para 1. Os pinos esto ordenados por prioridade, sendo INT0 o mais
prioritrio e o INT3 o menos prioritrio. possvel inibir todas as interrupes externas e
cada interrupo em particular de forma independente das restantes.
A interrupo correspondente ao pino INT3 vectorizada e exige um controlador de
interrupes (PIC Programmable Interrupt Controller) adequado (no descrito neste
documento). Quando atende esta interrupo, o processador leva o pino INTA (Interrupt
Acknowledge) a 0. Esse pino deve ligar ao PIC, que nessa altura suposto colocar no byte
de menor peso do barramento de dados um nmero (0 a 255) que a rotina de atendimento
desta excepo pode usar para identificar a fonte da interrupo.
O pino BA destina-se a suportar o endereamento de byte, juntamente com o bit A0 do
barramento de endereos. Os bits A15 a A1 definem qual a palavra de memria
endereada, ficando o acesso a cada um dos bytes dessa palavra dependente dos valores
de A0 e BA, de acordo com a seguinte tabela.
Tipo de
acesso
BA
Palavra
(16 bits)
Byte
(8 bits)
A0
Registos
Sigla
Nome e descrio
---
PC
0 a 10
R0 a R10
11
RL ou R11
12
SP ou R12
13
RE ou R13
14
BTE ou R14
15
TEMP ou R15
3.1
NP
IE
TD TV
0
Z
Bit
Sigla
Nome e descrio
Tipo
Estado
Estado
Estado
5, 4
B, A
A definir
Estado
TV
Configurao
TD
Configurao
IE
Configurao
IE0
Configurao
10
IE1
Configurao
11
IE2
Configurao
12
IE3
Configurao
13
DE
Configurao
14
NP
Estado
15
A definir
3.2
com RET). O RL (ou R11) pode ser usado como um registo de uso geral quando no
estiver em uso por um par CALLF-RETF.
3.4
Este um registo auxiliar que pode ser escrito ou lido (com MOV) e serve para configurar
a sensibilidade dos pinos de interrupo (por omisso so sensveis ao flanco de 0 1).
O formato dos bits deste registo o seguinte:
Bit
Sigla
Nome e descrio
1e0
NSI0
3e2
NSI1
5e4
NSI2
7e6
NSI3
15 a 9
Excepes
Endereo dentro da
Tabela de Excepes
00H
02H
04H
06H
08H
0AH
0CH
0EH
10H
12H
5
5.1
Excepo
Causa
Ocorre
em
Qualquer
altura
Qualquer
altura
Qualquer
altura
Qualquer
altura
Masca
rvel
Execuo
Sim
Execuo
Sim
Execuo
No
Descodificao
No
Execuo
No
Busca
No
Conjunto de instrues
Instrues de dados
Obteno do
operando
Imediato
Constante
(dados)
N de bits na
instruo
Exemplos de
instrues
ADD R1, 3
Registo
Rs
ADD R1, R2
Indirecto
[Rs]
Baseado
[Rs + constante]
4+4
Indexado
[Rs + Ri]
4+4
Relativo
Constante
(endereos)
Implcito
JZ 100H
12
CALL 100H
[SP]
PUSH, POP
SP, PC
RET, CALL
Sim
Sim
Sim
Sim
assembly
Instrues
equivalentes
Exemplos
RTL
-128 k +127
MOV
MOV
MOV
R0,-128
R3, 0
R6, +127
MOVL Rd, k
Rd(7..0) k(7..0)
Rd(15..8) k(7){8 }
Rd(7..0) k(7..0)
Rd(15..8) k(7){8 }
MOV Rd, k
Efeito
Rd fica com uma cpia do
valor da constante (de 8
bits) estendida para 16 bits
com o seu bit de sinal, k(7).
O valor anterior de Rd
destrudo.
k -129 ou k 128
MOV
MOV
MOV
MOV
R7, -32768
R2, -1000
R5, +500
R8, +32767
Rd(15..8) k(15..8)
Exemplos:
Assembly
Constante
(Hexadecimal 16 bits)
Instrues
mquina
MOV
R1, 0
00 00H
MOV
R1, +1
00 01H
MOV
R1, +127
00 7FH
MOV
R1, +32767
7F FFH
MOV
R1, -1
FF FFH
MOV
R1, -128
FF80H
MOV
R1, -32768
80 00H
Modos de
endereamento
Utilizao tpica
MOV
Rd, [Rs]
Indirecto
MOV
Baseado
MOV
Indexado
MOV
[Rd], Rs
Indirecto
MOV
[Rd + off], Rs
Baseado
MOV
[Rd + Ri], Rs
Indexado
MOVB
Rd, [Rs]
Indirecto
MOVB
[Rd], Rs
Indirecto
MOVP
Rd, [Rs]
Indirecto
MOVP
[Rd], Rs
Indirecto
Escrita de perifricos
SWAP
Rd, [Rs] ou
[Rs], Rd
Indirecto
Troca de dados,
semforos
Leitura da memria
(16 bits)
Escrita da memria
Transferncia de
variveis (16 bits) entre
memria e registos
(16 bits)
Processamento de bytes
individuais (cadeias de
caracteres ASCII, por
exemplo)
Leitura de perifricos
Rd
Implcito (SP)
Escrita na pilha
POP
Rd
Implcito (SP)
Leitura da pilha
Recuperar valores
guardados na pilha
5.2
JMP
L1
Instrues
Significado
Exemplo
Ri
Registo principal i (R0 a R15, incluindo RL, SP, RE, BTE e TEMP)
R1
PC
PC expresso
EIS
EIS
Mw[end]
Mw[R1+2]
Se R1=1000H, o byte de
menor peso est em
1003H e o de maior peso
em 1002H
Mb[end]
Clula de memria de 8 bits cujo endereo end (que pode ser par ou
mpar)
Mb[R3+R4]
R2(4)
Mw[R1](0)
(i)
Ra(i..j)
R2(7..3)
bit{n}
dest expr
R1 M[R2]
M[R0] R4 + R2
R1(7..0) R2(15..8)
Z, N, C, V,
IE, IE0 a
IE4, DE, NP
V0
Expr :
aco
Executa a aco se expr for verdadeira (expr tem de ser uma expresso
booleana)
((NV)Z)=1 :
PC EIS + 2
, ,
E, OU, OU-exclusivo
R1 R2 R3
R1 R2(15..8) || 00H
||
Classe
Sintaxe em assembly
ADD
ADDC
SUB
SUBB
CMP
Instrues
aritmticas MUL
1 opcode
(4bits)
Rd, Rs
Rd, k
Rd, Rs
Rd, Rs
Rd, k
Rd, Rs
Rd, Rs
Rd, k
Rd, Rs
ARITOP
Aces
Rd Rd + Rs
Rd Rd + k
Rd Rd + Rs + C
Rd Rd Rs
Rd Rd k
Rd Rd Rs C
(Rd Rs)
CMPI
Rd
(Rd k)
MUL
Rd
Rs
Rd Rd * Rs
DIV
Rd, Rs
DIV
Rd
Rs
Rd quociente(Rd / Rs)
MOD
Rd, Rs
MOD
Rd
Rs
Rd resto(Rd / Rs)
NEG
Rd
NEG
Rd
xxxx
Livre
Livre
10
Rd Rd
Flags
afectadas
Comentrios
Z, N, C, V
Z, N, C, V k [-8 .. +7]
Z, N, C, V
Z, N, C, V
Z, N, C, V k [-8 .. +7]
Z, N, C, V
Z, N, C, V Rd no alterado
k [-8 .. +7]
Z, N, C, V
Rd no alterado
Z, N, C, V O registo Rs alterado
Z, N, C,
Diviso inteira
V0
Z, N, C,
Resto da diviso inteira
V0
Complemento para 2
Z, N, C, V
V1 se Rd for 8000H
Classe
Sintaxe em assembly
AND
OR
NOT
XOR
TEST
BIT
Rd, Rs
Rd, Rs
Rd
Rd, Rs
Rd, Rs
Rd, n
SET
Rd, n
EI
EI0
EI1
EI2
EI3
Instrues SETC
de bit
EDMA
CLR
BITOP
Rd, n
DI
DI0
DI1
DI2
DI3
CLRC
DDMA
CPL
CPLC
1 opcode
(4bits)
Rd, n
Aces
Rd Rd Rs
Rd Rd Rs
Rd Rd FFFFH
Rd Rd Rs
Rd Rs
Z Rd(k) 1
SETBIT
Rd
SETBIT
SETBIT
SETBIT
SETBIT
SETBIT
SETBIT
SETBIT
RE
RE
RE
RE
RE
RE
RE
IE_index
IE0_index
IE1_index
IE2_index
IE3_index
C_index
DE_index
CLRBIT
Rd
CLRBIT
CLRBIT
CLRBIT
CLRBIT
CLRBIT
CLRBIT
CLRBIT
RE
RE
RE
RE
RE
RE
RE
IE_index
IE0_index
IE1_index
IE2_index
IE3_index
C_index
DE_index
RE (IE_index) 0
RE (IE0_index) 0
RE (IE1_index) 0
RE (IE2_index) 0
RE (IE3_index) 0
RE (C_index) 0
RE (DE_index) 0
CPLBIT
Rd
Rd(n) Rd(n) 1
CPLBIT
RE
C_index
11
Rd(n) 1
RE(IE_index) 1
RE (IE0_index) 1
RE (IE1_index) 1
RE (IE2_index) 1
RE (IE3_index) 1
RE (C_index) 1
RE (DE_index) 1
Rd(n) 0
RE (C_index) RE(C_index) 1
Flags
afectadas
Z, N
Z, N
Z, N
Z, N
Z, N
Z
Z, N ou
outra (se
Rd for RE)
EI
EI0
EI1
EI2
EI3
C
DE
Z, N ou
outra (se
Rd for RE)
EI
EI0
EI1
EI2
EI3
C
DE
Z, N ou
outra (se
Rd for RE)
C
Comentrios
Complemento para 1
Rd no alterado
Rd no alterado
n [0 .. 15]
Se Rd=RE, afecta apenas RE(n)
Enable interrupts
Enable interrupt 0
Enable interrupt 1
Enable interrupt 2
Enable interrupt 3
Set Carry flag
Enable DMA
n [0 .. 15]
Se Rd=RE, afecta apenas RE(n)
Disable interrupts
Disable interrupt 0
Disable interrupt 1
Disable interrupt 2
Disable interrupt 3
Clear Carry flag
Disable DMA
n [0 .. 15]
Se Rd=RE, afecta apenas RE(n)
Complement Carry flag
Classe
Sintaxe em assembly
SHR
Rd, n
SHL
1 opcode
(4bits)
Rd
Rd, n
SHL
Rd
SHRA
Rd, n
SHRA
Rd
SHLA
Rd, n
SHLA
Rd
ROR
Rd, n
ROR
Rd
ROL
Rd, n
ROL
Rd
RORC
Rd, n
RORC
Rd
ROLC
Rd, n
ROLC
Rd
BITOP
ARITOP
Instrues
de bit
BITOP
Aces
n>0 : C Rd(n-1)
n>0 : Rd 0{n} || Rd(15..n)
n>0 : C Rd(15-n+1)
n>0 : Rd Rd(15-n..0) || 0{n}
n>0 : C Rd(n-1)
n>0 : Rd Rd(15){n} || Rd(15..n)
n>0 : C Rd(15-n+1)
n>0 : Rd Rd(15-n..0) || 0{n}
n>0 : C Rd(n-1)
n>0 : Rd Rd(n-1..0) || Rd(15..n)
n>0 : C Rd(15-n+1)
n>0 : Rd Rd(15-n..0) || Rd(15..15n+1)
n>0 : (Rd || C) Rd(n-2..0) || C ||
Rd(15..n-1)
n>0 : (C || Rd) Rd(15-n+1..0) || C ||
Rd(15..15-n+2)
Flags
afectadas
Comentrios
n [0 .. 15]
Se n=0, actualiza Z e N (C no)
n [0 .. 15]
Z, N, C
Se n=0, actualiza Z e N (C no)
n [0 .. 15]
Z, N, C
Se n=0, actualiza Z e N (C no)
n [0 .. 15]
Se n=0, actualiza Z e N (C no)
Z, N, C, V
V1 se algum dos bits que sair for
diferente do Rd(15) aps execuo
n [0 .. 15]
Z, N, C
Se n=0, actualiza Z e N (C no)
Z, N, C
Z, N, C
Z, N, C
Z, N, C
n [0 .. 15]
Se n=0, actualiza Z e N (C no)
n [0 .. 15]
Se n=0, actualiza Z e N (C no)
n [0 .. 15]
Se n=0, actualiza Z e N (C no)
Livre
Rd, [Rs + off]
MOV
Instrues
de
transfernMOVB
cia de dados
MOVBS
MOVP
Rd
Rs
off/2
Rd
Rd
Rs
Rs
Rs
Rs
Rs
Rd
Rd
Rd
0000
Ri
off/2
0000
Ri
Rd Mw[Rs + off]
Rd Mw[Rs + 0000]
Rd Mw[Rs + Ri]
Mw[Rd + off] Rs
Mw[Rd + 0000] Rs
Mw[Rd + Ri] Rs
Nenhuma
Nenhuma
Nenhuma off [-16 .. +14]
Nenhuma
Nenhuma
Rd, [Rs]
LDB
Rd
Rs
Rd 0{8} || Mb[Rs]
Nenhuma
[Rd], Rs
STB
Rd
Rs
Mb[Rd] Rs(7..0)
LDBS
Rd
Rs
Rd Mb[Rs](7){8} || Mb[Rs]
Rd, [Rs]
LDP
Rd
Rs
Rd Mw[Rs]
[Rd], Rs
STP
Rd
Rs
Mw[Rd] Rs
Rd, [Rs]
Rd, [Rs + Ri]
[Rd + off], Rs
[Rd], Rs
[Rd + Ri], Rs
Rd, [Rs]
LDO
LDR
STO
STR
XFER
12
Classe
Sintaxe em assembly
1 opcode
(4bits)
Aces
MOVL
Rd, k
MOVL
Rd
Rd k(7){8} || k
MOVH
Rd, k
MOVH
Rd
Rd(15..8) k
MOV
Rd, k
MOVL
MOVL
MOVH
k
k(7..0)
k(15..8)
Rd, Rs
Ad, Rs
Rd, As
Rd
Rd
Rd
MOVRR
MOVAR
MOVRA
Rd
Ad
Rd
Rs
Rs
As
Rd, USP
MOVRU
Rd
xxxx
Rd USP
USP, Rs
MOVUR
xxxx
Rs
USP Rs
SWAPR
Rd
Rs
SWAPM
Rd
Rs
Rd, k
MOV
Instrues
de
transferncia de dados
Rd, Rs
XFER
SWAP
Rd, [Rs] ou
[Rs], Rd
PUSH
Rs
PUSH
Rs
xxxx
POP
Rd
POP
Rd
xxxx
Livre
Livre
13
Rd k(7){8} || k
Rd k(7){8} || k(7..0)
Rd(15..8) k(15..8)
Rd Rs
Ad Rs
Rd As
TEMP Rd
Rd Rs
Rs TEMP
TEMP Mw[Rs]
Mw[Rs] Rd
Rd TEMP
Mw[SP-2] Rs
SP SP 2
Rd Mw[SP]
SP SP + 2
Flags
afectadas
Comentrios
k [-128 .. +127]
k estendido a 16 bits com sinal
k [0 .. 255]
Nenhuma O byte de menor peso no
afectado
Nenhuma Se k [-128 .. +127]
Se k [-32768 .. -129] ou
Nenhuma
k [+128 .. +32767]
Nenhuma
Nenhuma
Nenhuma
O SP lido o de nvel utilizador,
Nenhuma independentemente do bit NP do
RE
O SP escrito o de nvel utilizador,
Nenhuma independentemente do bit NP do
RE
Nenhuma
Nenhuma
Recomevel sem reposio de
Nenhuma estado mesmo que um dos acessos
memria falhe
SP s actualizado no fim para ser
Nenhuma
re-executvel
Nenhuma
Classe
Sintaxe em assembly
JZ
JNZ
JN
JNN
JP
JNP
JC
JNC
Instrues JV
de controlo JNV
de fluxo JEQ
JNE
JLT
JLE
JGT
JGE
JA
JAE
JB
JBE
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
etiqueta
1 opcode
(4bits)
COND
14
Aces
Z=1: PC EIS + (2*dif)
Z=0: PC EIS + (2*dif)
N=1: PC EIS + (2*dif)
N=0: PC EIS + (2*dif)
(NZ)=0: PC EIS + (2*dif)
(NZ)=1: PC EIS + (2*dif)
C =1: PC EIS + (2*dif)
C =0: PC EIS + (2*dif)
V=1: PC EIS + (2*dif)
V=0: PC EIS + (2*dif)
Z=1: PC EIS + (2*dif)
Z=0: PC EIS + (2*dif)
NV =1 : PC EIS + (2*dif)
((NV)Z)=1 : PC EIS + (2*dif)
((NV)Z)=0 : PC EIS + (2*dif)
NV =0 : PC EIS + (2*dif)
(CZ)=0 : PC EIS + (2*dif)
C =0: PC EIS + (2*dif)
C =1: PC EIS + (2*dif)
(CZ)=1 : PC EIS + (2*dif)
Flags
afectadas
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Nenhuma
Comentrios
etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS etiqueta [EIS -
Classe
Sintaxe em assembly
JMP
etiqueta
Rs
1 opcode
(4bits)
JMP
CODE
etiqueta
CALL
Rs
CODE
etiqueta
CALLF
CALL
CALLF
Rs
RET
RETF
Instrues
de controlo
de fluxo
SWE
SWE
CODE
RFE
RFE
xxxx
xxxx
NOP
Livre
Livre
Livre
Livre
Livre
Livre
Livre
Livre
NOP
xxxx
xxxx
15
TEMP RE
RE 0
Mw[SP-2] EIS
Mw[SP-4] TEMP
PC Mw[BTE+2*k]
SP SP - 4
TEMP Mw[SP]
PC Mw[SP+2]
SP SP + 4
RE TEMP
Flags
afectadas
Comentrios
6.1
Comentrios
Texto ignorado pelo assemblador e til apenas para informao adicional para o
programador. Em cada linha, um comentrio comea por ;. Exemplo:
MOV R1, R2
6.2
; copia R2 para R1
Literais
Valor numrico em decimal: qualquer valor inteiro entre 32768 e 65535. Pode
opcionalmente ser terminado com a letra d, embora tal seja assumido quando
nenhuma outra base for indicada.
de notar, no entanto, que o uso de literais em cdigo assembly (ou qualquer outra
linguagem de programao) desaconselhvel. Em vez disso, deve-se usar o comando
EQU para definir constantes (ver seco seguinte). Esta prtica por um lado torna o
cdigo mais legvel, pois o smbolo associado constante d uma pista sobre a aco que
se est a tomar, e por outro lado permite uma actualizao mais fcil do cdigo, pois
constantes que esto associadas no tm que ser alteradas em vrios stios dentro do
cdigo, mas simplesmente na linha do comando EQU.
6.3
Etiquetas
Para referenciar uma dada posio de memria, pode-se colocar uma etiqueta (label)
antes da instruo que vai ficar nessa posio. A etiqueta consiste num nome (conjunto de
caracteres alfanumricos, mais o caracter _, em que o primeiro no pode ser um
algarismo) seguida de :. Por exemplo,
AQUI: ADD R1, 1
16
AQUI
Pseudo-Instrues ou Directivas