Vous êtes sur la page 1sur 17

Manual do PEPE

Introduo ............................................................................................................... 1

Ligaes do mdulo PEPE....................................................................................... 1

Registos................................................................................................................... 3
3.1

Registo de Estado (RE) .................................................................................... 3

3.2

Registo SP (Stack Pointer) ............................................................................... 4

3.3

Registo de Ligao (RL) .................................................................................. 4

3.4

Registo Configurao do Ncleo do PEPE (RCN)............................................ 5

Excepes................................................................................................................ 5

Conjunto de instrues............................................................................................. 6

5.1

Instrues de dados .......................................................................................... 6

5.2

Instrues de controlo de fluxo......................................................................... 8

5.3

Instrues......................................................................................................... 8

Aspectos adicionais do assemblador .......................................................................16


6.1

Comentrios....................................................................................................16

6.2

Literais............................................................................................................16

6.3

Etiquetas .........................................................................................................16

6.4

Pseudo-Instrues ou Directivas......................................................................17

Introduo

O mdulo PEPE implementa um microprocessador de 16 bits. Este manual apenas um


resumo das suas caractersticas.

Ligaes do mdulo PEPE

O mdulo PEPE tem as seguintes ligaes:

Designao

N de bits

Descrio

RESET

Inicializao (activo a 0)

INT0

Interrupo 0 (nvel de activao programvel)

INT1

Interrupo 1 (nvel de activao programvel)

INT2

Interrupo 2 (nvel de activao programvel)

INT3

Interrupo 3 (nvel de activao programvel)

INTA

(Interrupt Acknowledge) Atendimento da Interrupo (activo a 0; s


para a interrupo 3)

CLOCK

Entrada de relgio

DATAH

D(15..8) - Byte de maior peso do barramento de dados

DATAL

D(7..0) - Byte de menor peso do barramento de dados

A15..A0

16

A(15..0) - Barramento de endereos

BA

(Byte Addressing) Endereamento de byte


BA=1 acessos memria em byte
BA=0 acessos memria em palavra

RD

Activo a 0 nos ciclos de leitura memria

WR

Activo no flanco 0 para 1 nos ciclos de escrita na memria

WAIT

WAIT=1 prolonga o ciclo de acesso memria


WAIT=0 ciclo de acesso memria com durao mnima

BRQ

(Bus Request) Pedido de DMA, activo a 1

BGT

(Bus Grant) Autorizao para DMA, activo a 1

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

Byte da palavra acedido

Os dois (acesso a toda a palavra)

Ilegal. Acesso de palavra desalinhado. Gera excepo.

Acede s ao byte no endereo par

Acede s ao byte no endereo mpar

O pinos RD e WR so usados no ciclo de acesso memria para leitura e escrita,


respectivamente, e so activos a 0. Num dado ciclo, apenas um deles estar activo. A
transferncia de dados est completa quando estes pinos transitam de 0 para 1.

Registos

A tabela seguinte indica quais os registos do PEPE.


Nmero

Sigla

Nome e descrio

---

PC

0 a 10

R0 a R10

Registos de uso geral

11

RL ou R11

Registo de Ligao (usado para guardar o PC nas


instrues CALLF e RETF, para optimizar as chamadas a
rotinas que no chamam outras)

12

SP ou R12

Apontador da Pilha (Stack Pointer)

13

RE ou R13

Registo de Estado (flags)

14

BTE ou R14

Base da Tabela de Excepes

15

TEMP ou R15

3.1

Contador de Programa (Program Counter)

Registo temporrio, usado na implementao de algumas


instrues (no usar em programao do utilizador)

Registo de Estado (RE)

O RE (Registo de Estado), contm os bits de estado e de configurao que interessa salvar


(na chamada de rotinas e atendimento de excepes) e repr (no retorno), com a
disposio e significado indicados na figura e tabela seguintes. A operao de reset do
processador coloca todos os bits do Registo de Estado a 0.
15
R

NP

DE IE3 IE2 IE1 IE0

IE

TD TV

0
Z

Bit

Sigla

Nome e descrio

Tipo

Zero. Este bit colocado a 1 pelas operaes da ALU que


produzem zero como resultado.

Negativo. Este bit colocado a 1 pelas operaes da ALU


que produzem um nmero negativo (bit de maior peso a 1)
como resultado.

Estado

Transporte (Carry). Este bit colocado a 1 pelas operaes


da ALU que geram transporte.

Estado

Excesso (Overflow). Este bit colocado a 1 pelas


operaes da ALU cujo resultado demasiado grande (em
mdulo) para ser representado correctamente, seja positivo
ou negativo.

Estado

5, 4

B, A

Reservados para utilizao futura

A definir

Estado

TV

Excepo em caso de excesso (Trap on overflow). Se este


bit estiver a 1, gerada a excepo EXCESSO na instruo
que produzir o excesso. Se estiver a 0, o excesso s
actualiza o bit V.

Configurao

TD

Excepo em caso de diviso por 0 (Trap on DIV0). Se este


bit estiver a 1, gerada a excepo DIV0 numa instruo
DIV ou UDIV com quociente 0 (no gerada a excepo
EXCESSO nem o bit V posto a 1)

Configurao

IE

Permisso de Interrupes Externas (Interrupt Enable). S


com este bit a 1 as interrupes externas podero ser
atendidas

Configurao

IE0

Permisso da Interrupo Externa 0 (Interrupt Enable). S


com este bit a 1 os pedidos de interrupo no pino INT0
podero ser atendidos

Configurao

10

IE1

Idem, para a interrupo INT1

Configurao

11

IE2

Idem, para a interrupo INT2

Configurao

12

IE3

Idem, para a interrupo INT3

Configurao

13

DE

Permisso de accessos directos memria (DMA Enable).


S com este bit a 1 os pedidos de DMA no pino BRQ sero
tidos em conta e eventualmente atendidos pelo processador

Configurao

14

NP

Nvel de Proteco. 0=Sistema; 1=Utilizador. Define o nvel


de proteco corrente.

Estado

15

Reservado para utilizao futura

A definir

3.2

Registo SP (Stack Pointer)

O registo SP (Stack Pointer, ou Apontador da Pilha), contm o ndice da ltima posio


ocupada da pilha (topo), que cresce decrementando o SP. As operaes de PUSH
decrementam o SP de 2 unidades e armazenam um valor na nova posio. As operaes
de POP fazem a sequncia inversa. Por isso, o SP deve ser inicializado com o endereo
imediatamente a seguir zona de memria atribuda pilha (tem de ser um valor par).
3.3

Registo de Ligao (RL)

O RL (Registo de Ligao) destina-se a guardar o endereo de retorno quando a rotina


invocada terminal, isto , no invoca outras. No retorno, o PC ser actualizado a partir
do RL. A vantagem deste esquema evitar uma operao de escrita em memria, causada
pelo guardar do endereo de retorno na pilha. Realmente, muitas rotinas no chamam
outras, e uma simples pilha de uma posio (o RL) em registo muito mais rpida de
aceder do que uma pilha verdadeira em memria. As instrues CALL e RET usam a
pilha normalmente. As instrues CALLF e RETF utilizam o RL. Cabe ao compilador (ou
ao programador de assembly) decidir se usa umas ou outras. Naturalmente, no se pode
invocar uma rotina com CALL e retornar com RETF (ou invocar com CALLF e retornar
4

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

Registo Configurao do Ncleo do PEPE (RCN)

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

Nvel de sensibilidade da interrupo 0 (pino INT0).


00=flanco de 0 para 1 (com memria);
01= flanco de 1 para 0 (com memria) ;
10=nvel 1 (sem memria) ;
11=nvel 0 (sem memria).

3e2

NSI1

Idem, para o pino de interrupo INT1

5e4

NSI2

Idem, para o pino de interrupo INT2

7e6

NSI3

15 a 9

Idem, para o pino de interrupo INT3


Reservados

Excepes

Designam-se por excepes os eventos a que o processador sensvel e que constituem


alteraes, normalmente pouco frequentes, ao fluxo normal de instrues de um
programa.
As excepes podem ter origem externa (correspondentes activao de pinos externos
do processador) ou interna (decorrentes tipicamente de erros na execuo das instrues).
Existem alguns pinos do PEPE (INT0 a INT3) que originam excepes explicitamente
para interromper o fluxo do programa com o fim de lidar com eventos assncronos ao
programa e associados tipicamente com os perifricos. Essas excepes designam-se por
interrupes.
A cada excepo est associada uma rotina de tratamento da excepo (ou rotina de
servio da excepo, ou simplesmente rotina de excepo), cujo endereo consta da
Tabela de Excepes, que contm uma palavra (o endereo da rotina de tratamento) para
cada uma das excepes suportadas pelo processador.
A Tabela de Excepes comea no endereo indicado pelo registo BTE (Base da Tabela
de Excepes), que dever ser previamente inicializado com um valor adequado.
A tabela seguinte descreve as excepes que o PEPE suporta.

Endereo dentro da
Tabela de Excepes
00H
02H
04H
06H
08H
0AH
0CH

0EH

10H
12H

5
5.1

Excepo

Causa

O pino INT0 do processador activado


(com IE=1, IE0=1).
O pino INT1 do processador activado
INT1
(com IE=1, IE1=1).
O pino INT2 do processador activado
INT2
(com IE=1, IE2=1).
O pino INT3 do processador activado
INT3
(com IE=1, IE3=1).
Uma operao aritmtica gera excesso
EXCESSO
(overflow) se TV=1 no RE
Uma operao de diviso falha por o
DIV0
quociente ser zero se TD=1 no RE
A instruo SWE (Software Exception)
SOFTWARE
executada. Usada tipicamente como
chamada ao sistema operativo
A Unidade de Controlo encontra uma
combinao invlida de opcode. Pode ser
encarada como uma excepo SWE com
opcode prprio e portanto permite extender
COD_INV
o conjunto de instrues por meio de
software (rotina de excepo que verifica
qual o opcode que gerou a excepo e
invoca uma rotina adequada).
feito um acesso de 16 bits memria
D_DESALINHADO
(dados) especificando um endereo mpar
feita uma busca memria (fetch) tendo
I_DESALINHADO
o PC um endereo mpar
INT0

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

A tabela seguinte sumariza os modos de endereamento, isto , as formas de obter os


operandos.
Modo de
endereamento

Obteno do
operando

Imediato

Constante
(dados)

N de bits na
instruo

Exemplos de
instrues

ADD R1, 3

MOVL R2, 34H


MOVH R2, 0F3H

Registo

Rs

ADD R1, R2

Indirecto

[Rs]

MOV R1, [R2]

Baseado

[Rs + constante]

4+4

MOV R1, [R2+3]

Indexado

[Rs + Ri]

4+4

MOV R1, [R2+R3]

Relativo

Constante
(endereos)

Implcito

JZ 100H

12

CALL 100H

[SP]

PUSH, POP

SP, PC

RET, CALL

Sim
Sim
Sim
Sim

As instrues MOVL e MOVH permitem especificar uma constante de 8 bits para


inicializar apenas um dos bytes (o de menor e de maior peso, respectivamente) de um
dado registo. Permitem resolver o problema de inicializar os 16 bits de um registo com
instrues de apenas 16 bits (usando duas instrues). O assemblador permite especificar
apenas uma instruo MOV com uma constante de 16 bits, gerando as instrues
necessrias de acordo com o valor da constante

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 }

MOVL Rd, k(7..0)

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

MOVH Rd, k(15..8)

Rd(15..8) k(15..8)

Rd fica com uma cpia do


valor da constante (de 16
bits). O valor anterior de Rd
destrudo.

Exemplos:
Assembly

Constante
(Hexadecimal 16 bits)

Instrues
mquina

MOV

R1, 0

00 00H

MOVL, R1, 00H

MOV

R1, +1

00 01H

MOVL, R1, 01H

MOV

R1, +127

00 7FH

MOVL, R1, 7FH

MOV

R1, +32767

7F FFH

MOVL, R1, FFH


MOVH, R1, 7FH

MOV

R1, -1

FF FFH

MOVL, R1, FFH

MOV

R1, -128

FF80H

MOVL, R1, 80H

MOV

R1, -32768

80 00H

MOVL, R1, 00H


MOVH, R1, 80H

A tabela seguinte descreve as formas de acesso memria em dados e a sua utilizao


tpica.
Instruo

Modos de
endereamento

Operao com a memria

Utilizao tpica

MOV

Rd, [Rs]

Indirecto

MOV

Rd, [Rs + off]

Baseado

MOV

Rd, [Rs + Ri]

Indexado

MOV

[Rd], Rs

Indirecto

MOV

[Rd + off], Rs

Baseado

MOV

[Rd + Ri], Rs

Indexado

MOVB

Rd, [Rs]

Indirecto

Leitura da memria (8 bits)

MOVB

[Rd], Rs

Indirecto

Escrita da memria (8 bits)

MOVP

Rd, [Rs]

Indirecto

MOVP

[Rd], Rs

Indirecto

Leitura da memria (16 bits)


sem usar a cache nem a
memria virtual

Escrita de perifricos

SWAP

Rd, [Rs] ou
[Rs], Rd

Indirecto

Troca atmica de dados (16


bits) entre memria e registo.

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

Mesmo com caches, o acesso


memria forado
PUSH

Rd

Implcito (SP)

Escrita na pilha

Guardar valores para


mais tarde recuperar

POP

Rd

Implcito (SP)

Leitura da pilha

Recuperar valores
guardados na pilha

5.2

Instrues de controlo de fluxo

Os aspectos mais importantes a ter em conta partida so os seguintes:

O PEPE suporta endereamento de byte mas os acessos em busca de instruo tm


de ser alinhados, pelo que os endereos tm de ser pares (seno gerada uma
excepo quando o acesso for feito). Para aumentar a gama de endereos que
possvel atingir a partir das instrues que aceitam um operando imediato, o valor
do operando codificado na instruo entendido pelo PEPE como designando
palavras (instrues) e no bytes, pelo que depois, na implementao das
instrues, o PEPE multiplica automaticamente o operando por 2 (seja positivo ou
negativo) antes de o utilizar no clculo do endereo destino do salto;

Todas as instrues de salto e de chamada de rotinas com operando imediato so


relativas, isto , o operando (em complemento para 2) multiplicado por 2 e
somado ao EIS (Endereo da Instruo Seguinte instruo de salto). No entanto,
para facilitar o utilizador, o assemblador requer no uma constante numrica mas
sim um endereo simblico, ou etiqueta (label), e o assemblador faz as contas. O
assemblador gera um erro caso a constante (8 ou 12 bits, depende da instruo)
no seja suficiente para codificar a diferena entre o valor da etiqueta e EIS. Se for
o caso, o utilizador deve usar as instrues JUMP e CALL com endereamento
por registo. Estas ltimas j tm endereamento absoluto, isto , o valor do registo
o novo endereo da instruo a buscar (e no somado com o anterior). Note-se
que
L1:

JMP

L1

; operando imediato endereamento relativo

resulta num ciclo infinito e o valor do operando codificado na instruo JMP 1


(o que corresponde a subtrair -2 a EIS).
5.3

Instrues

As instrues sombreadas so reconhecidas pelo assemblador mas na realidade podem ser


sintetizadas com recurso a outras, pelo que no gastam codificaes de instrues. So
oferecidas apenas como notao alternativa para comodidade do programador de
linguagem assembly e maior clareza dos programas.
As linhas marcadas com Livre correspondem s codificaes possveis e ainda no
ocupadas.
Os campos marcados com XXXX no so relevantes e podem ter qualquer valor (so
ignorados pelo PEPE).
Na coluna Aces indica-se o significado de cada instruo numa linguagem de
transferncia de registos (RTL), cujos aspectos essenciais so indicados pela tabela
seguinte.

Se o RE for o destino de uma operao, no RE fica exactamente o resultado dessa


operao. Neste caso em particular, os bits de estado no so afectados pelo valor do
resultado (Z1 se o resultado for 0000H, por exemplo) como nas outras operaes, mas
ficam directamente com os bits correspondentes do resultado.
Simbologia

Significado

Exemplo

Ri

Registo principal i (R0 a R15, incluindo RL, SP, RE, BTE e TEMP)

R1

PC

Registo Program Counter. S usado do lado esquerdo da atribuio.

PC expresso

EIS

Endereo da Instruo Seguinte. No um registo, mas apenas uma


notao que representa o valor do endereo da instruo seguinte (ou
seja, o endereo da instruo corrente acrescido de 2 unidades).

EIS

Mw[end]

Clula de memria de 16 bits que ocupa os endereos end e end+1


(end tem de ser par, seno gera uma excepo). O PEPE usa o
esquema Big-Endian, o que significa que o byte de menor peso de
Mw[end] est no endereo end+1.

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]

Bit i de um registo ou de uma clula de memria

R2(4)
Mw[R1](0)

(i)
Ra(i..j)

Bits i a j (contguos) do registo Ra (i >= j)

R2(7..3)

bit{n}

Sequncia de n bits obtida pela concatenao de n cpias de bit, que


uma referncia de um bit (pode ser 0, 1 ou Ra(i))

0{4} equivale a 0000


R1(15){2} equivale a
R1(15) || R1(15)

dest expr

Atribuio do valor de uma expresso (expr) a uma clula de memria


ou registo (dest). Um dos operandos da atribuio (expresso ou
destino) tem de ser um registo ou um conjunto de bits dentro do
processador. O operando da direita todo calculado primeiro e s
depois se destri o operando da esquerda, colocando l o resultado de
expr. dest e expr tm de ter o mesmo nmero de bits.

R1 M[R2]
M[R0] R4 + R2
R1(7..0) R2(15..8)

Z, N, C, V,
IE, IE0 a
IE4, DE, NP

Bits de estado no RE Registo de Estado

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

Concatenao de bits (os bits do operando da esquerda ficam


esquerda, ou com maior peso)

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

Campos da instruo (16 bits)


2 opcode 1 operando 2 operando
(4bits)
(4bits)
(4bits)
ADD
Rd
Rs
ADDI
Rd
k
ADDC
Rd
Rs
SUB
Rd
Rs
SUBI
Rd
k
SUBB
Rd
Rs
CMP
Rd
Rs

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

Campos da instruo (16 bits)


2 opcode 1 operando 2 operando
(4bits)
(4bits)
(4bits)
AND
Rd
Rs
OR
Rd
Rs
NOT
Rd
xxxx
XOR
Rd
Rs
TEST
Rd
Rs
BIT
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)

Campos da instruo (16 bits)


2 opcode 1 operando 2 operando
(4bits)
(4bits)
(4bits)
SHR

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]

Nenhuma off [-16 .. +14]

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

O byte adjacente a Mb[Rd] no


afectado
Idntica a MOVB Rd, [Rs], mas em
Nenhuma
que feita extenso de sinal
Nenhuma No usa memria virtual nem
caches (para acesso aos
Nenhuma
perifricos)
Nenhuma

Classe

Sintaxe em assembly

1 opcode
(4bits)

Campos da instruo (16 bits)


2 opcode 1 operando 2 operando
(4bits)
(4bits)
(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

Campos da instruo (16 bits)


2 opcode 1 operando 2 operando
(4bits)
(4bits)
(4bits)
JZ
dif =(etiqueta EIS)/2
JNZ
dif =(etiqueta EIS)/2
JN
dif =(etiqueta EIS)/2
JNN
dif =(etiqueta EIS)/2
JP
dif =(etiqueta EIS)/2
JNP
dif =(etiqueta EIS)/2
JC
dif =(etiqueta EIS)/2
JNC
dif =(etiqueta EIS)/2
JV
dif =(etiqueta EIS)/2
JNV
dif =(etiqueta EIS)/2
JZ
dif =(etiqueta EIS)/2
JNZ
dif =(etiqueta EIS)/2
JLT
dif =(etiqueta EIS)/2
JLE
dif =(etiqueta EIS)/2
JGT
dif =(etiqueta EIS)/2
JGE
dif =(etiqueta EIS)/2
JA
dif =(etiqueta EIS)/2
JNC
dif =(etiqueta EIS)/2
JC
dif =(etiqueta EIS)/2
JBE
dif =(etiqueta EIS)/2

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 -

256 .. EIS + 254]


256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]
256 .. EIS + 254]

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

Campos da instruo (16 bits)


Aces
2 opcode 1 operando 2 operando
(4bits)
(4bits)
(4bits)
dif =(etiqueta EIS)/2
PC EIS + (2*dif)
JMPR
xxxx
Rs
PC Rs
Mw[SP-2] EIS
dif =(etiqueta EIS)/2
PC EIS + (2*dif)
SP SP - 2
Mw[SP-2] EIS
CR
xxxx
Rs
PC Rs
SP SP - 2
RL EIS
dif =(etiqueta EIS)/2
PC EIS + (2*dif)
RL EIS
CRF
xxxx
Rs
PC Rs
PC Mw[SP]
RET
xxxx
xxxx
SP SP + 2
RETF
xxxx
xxxx
PC RL

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

Nenhuma etiqueta [EIS-4096 .. EIS+4094]


Nenhuma
etiqueta [EIS-4096 .. EIS+4094]
Nenhuma SP s actualizado no fim para ser
re-executvel
Nenhuma

SP s actualizado no fim para ser


re-executvel

Nenhuma etiqueta [EIS-4096 .. EIS+4094]


Nenhuma
Nenhuma
Nenhuma
SP s actualizado no fim para ser
Todas
re-executvel
colocadas
k [0 .. 255]
a zero
Tem de se usar a pilha de sistema
Todas SP s actualizado no fim para ser
restaurad re-executvel
as
Tem de se usar a pilha de sistema
Nenhuma No faz nada

Aspectos adicionais do assemblador

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

Os literais so valores constantes (nmeros ou cadeias de caracteres) podem ser


especificados de seis formas no cdigo assembly:

Valor numrico em binrio: para uma constante numrica ser interpretada em


binrio deve ser terminada com a letra b; so vlidos valores entre 0b e
1111111111111111b.

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.

Valor numrico em hexadecimal: para uma constante numrica ser interpretada


em hexadecimal deve ser terminada com a letra h; so vlidos valores entre 0h e
ffffh. As constantes em hexadecimal cujo digito de maior peso uma letra
(a,b,c,d,e ou f) devem ser escritas com um zero antes da letra, de modo a distinguir
a constante de uma varivel. Assim a constante ffffh dever ser escrita 0ffffh.

Caracter alfanumrico: um caracter entre plicas, por exemplo, g, convertido


para o seu cdigo ASCII.

Cadeia de caracteres alfanumricos: um conjunto de caracteres entre aspas, por


exemplo ola, convertido para um conjunto de caracteres ASCII.

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

Se agora se quiser efectuar um salto para esta instruo, pode-se usar:


JMP

AQUI

em vez de se calcular o endereo em que a instruo ADD R1, 1 ficar depois da


assemblagem.
6.4

Pseudo-Instrues ou Directivas

Chamam-se pseudo-instrues (ou directivas) ao conjunto de comandos reconhecidos


pelo assembler que no so instrues assembly, portanto no geram cdigo binrio no
ficheiro objecto. A funo das pseudo-instrues , por um lado, controlar a forma como
o cdigo gerado (por exemplo, indicando as posies de memria onde colocar o
executvel ou reservando posies de memria para dados), por outro lado, permitir
definir etiquetas (constantes ou posies de memria) que tornam o cdigo mais legvel e
mais fcil de programar. Nesta seco descrevem-se as pseudo-instrues usadas pelo
assembler para o processador fornecido com o simulador de circuitos de arquitectura de
computadores.
PLACE
Formato: PLACE etiqueta
Funo: O assemblador usa um contador de endereos interno, que vai incrementando em
cada instruo assemblada (assim, determina em que endereo fica cada
instruo). O comando PLACE permite especificar no campo <endereo> um
novo valor desse contador, posicionando assim no espao de endereamento
blocos de dados ou instrues. Podem existir vrias instrues PLACE no
mesmo ficheiro assembly correspondentes a vrios blocos de memria.
EQU
Formato: smbolo EQU constante
Funo: o comando EQU permite associar um valor constante a um smbolo.
WORD
Formato: etiqueta: WORD constante
Funo: o comando WORD permite reservar uma posio de memria para conter uma
varivel do programa assembly, associando a essa posio o nome especificado
em etiqueta. O campo constante indica o valor a que essa posio de memria
deve ser inicializada.
STRING
Formato: etiqueta: STRING constante [,constante]
Funo: o comando STRING coloca em bytes de memria consecutivos cada uma das
constantes nele definidas. Se qualquer dessas constantes for uma cadeia de
caracteres o cdigo ASCII de cada um deles colocado sequencialmente na
memria. A etiqueta fica com o endereo do primeiro caracter da primeira
constante.
TABLE
Formato: etiqueta: TABLE constante
Funo: o comando TABLE reserva o nmero de posies de memria especificadas no
campo constante. etiqueta fica com o endereo da primeira posio.
17

Vous aimerez peut-être aussi