AND ender

Propaganda
NEANDERWIN - Resumo operacional
Sumário
Listagem geral das instruções ...................................................................................................................................... 2
NOP........................................................................................................................................................................... 2
LDI imed .................................................................................................................................................................... 2
STA ender ................................................................................................................................................................. 2
LDA ender ................................................................................................................................................................. 3
ADD ender ................................................................................................................................................................ 3
SUB ender ................................................................................................................................................................. 3
OR ender ................................................................................................................................................................... 4
AND ender ................................................................................................................................................................ 4
NOT ........................................................................................................................................................................... 4
JMP ender ................................................................................................................................................................. 5
JN ender .................................................................................................................................................................... 5
JZ ender .................................................................................................................................................................... 6
JNZ ender ................................................................................................................................................................. 6
IN ender .................................................................................................................................................................... 6
OUT ender ................................................................................................................................................................ 7
HLT............................................................................................................................................................................ 7
Modos de Endereçamento: .......................................................................................................................................... 7
imediato ..................................................................................................................................................................... 7
direto ......................................................................................................................................................................... 7
indireto....................................................................................................................................................................... 8
Comentários no programa ............................................................................................................................................ 8
Rótulos .......................................................................................................................................................................... 8
Pseudo Instruções ........................................................................................................................................................ 8
ORG ender ................................................................................................................................................................ 8
const EQU imed ........................................................................................................................................................ 8
END ender ................................................................................................................................................................ 8
[var:] DB imed ........................................................................................................................................................... 8
[var:] DS imed ........................................................................................................................................................... 9
Representação de números ......................................................................................................................................... 9
ANEXO 1 – simulador................................................................................................................................................... 9
ANEXO 2 – tabela ASCII ............................................................................................................................................ 10
ANEXO 3 – exemplos ................................................................................................................................................. 11
Multiplicação ........................................................................................................................................................... 11
Divisão..................................................................................................................................................................... 11
Vetor ........................................................................................................................................................................ 11
ANEXO 4 – referências .............................................................................................................................................. 12
1
Listagem geral das instruções
Todas as instruções ocupam 1 byte. Algumas instruções possuem um operando que ocupa um segundo byte.
Nas instruções, o código da operação ocupa os 4 bits de mais alta ordem, enquanto que os demais bits (mais
baixa ordem) indicam o tipo de endereçamento da instrução.
Instruções de 1 byte:
código da instrução
0 (zero)
Instruções de 2 bytes:
código da instrução
tipo de endereçamento
operando
NOTA: apesar das instruções poderem ser escritas a partir da primeira coluna, é uma boa prática que
sejam escritas a partir da coluna 7 (6 espaços) para melhor visualização. Essa área deve ser então
utilizada para os “rótulos” (ver pág. 8) ou nome de identificador da pseudo-instrução EQU (pág. 8).
NOP
O comando NOP (no operation) é usado apenas para gastar tempo.
NOP
;não faz nada
HLT
;fim do programa
LDI imed
O comando LDI (load immediate) carrega no acumulador o valor dado pelo operando imed.
Endereçamento: imediato.
LDI 10 ;ACC=10
HLT
;fim do programa
DEZ
LDI DEZ ;ACC=10
HLT
;fim do programa
EQU 10 ;define constante=10
VAR:
LDI VAR ;ACC=@VAR (20h)
HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h
DB 10 ;declara variável, valor=10
STA ender
O comando STA (store ACC) guarda o acumulador na posição de memória indicada pelo operando ender.
Endereçamento: direto e indireto.
LDI 2
;ACC=2
STA 10 ;memória posição 10=ACC
HLT
;fim do programa
A:
LDI
STA
HLT
ORG
DS
2
A
10
1
;ACC=2
;memória posição[A]=ACC
;fim do programa
;mem. a partir da posição 10
;declara variável (1 byte)
2
A:
LDI
STA
HLT
ORG
DB
2
@A
;ACC=2
;memória posição[@A]=ACC
;fim do programa
20h ;mem. a partir da posição 10
21h ;declara variável, valor=21h
LDA ender
O comando LDA (load ACC) atribui ao acumulador o conteúdo da posição de memória indicada pelo operando
ender.
Endereçamento: direto e indireto.
LDA 1
;ACC=memória posição 1
HLT
;fim do programa
B:
LDA B
HLT
ORG 20h
DB 10
A:
B:
LDA
HLT
ORG
DB
DB
;ACC=memória posição[B]
;fim do programa
;mem. a partir da posição 20h (16)
;declara variável, valor=10
@B
;ACC=memória posição[@B]
;fim do programa
20h ;mem. a partir da posição 20h (16)
5
;declara variável, valor=5
20h ;declara variável, valor=20h
ADD ender
O comando ADD soma (add) ao acumulador o conteúdo de uma posição de memória indicada pelo operando
ender.
Endereçamento: direto e indireto.
LDI 1
;ACC=1
ADD X
;ACC=ACC+memória posição[X]
HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
X:
DB 10 ;declara variável, valor=10
X:
Y:
LDI
ADD
HLT
ORG
DB
DB
2
@Y
;ACC=2
;ACC=ACC+memória posição[@Y]
;fim do programa
20h ;mem. a partir da posição 20h (16)
5
;declara variável, valor=5
20h ;declara variável, valor=20h
SUB ender
O comando SUB (subtract) subtrai do acumulador o conteúdo de uma posição de memória indicada pelo operando
ender.
Endereçamento: direto e indireto.
LDI 15 ;ACC=15
SUB X
;ACC=ACC-memória posição[X]
HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
X:
DB 10 ;declara variável, valor=10
3
X:
Y:
LDI
SUB
HLT
ORG
DB
DB
2
@Y
;ACC=2
;ACC=ACC-memória posição[@Y]
;fim do programa
20h ;mem. a partir da posição 20h (16)
5
;declara variável, valor=5
20h ;declara variável, valor=20h
OR ender
O comando OR (logical or) realiza um "ou" lógico entre o acumulador e o conteúdo de uma posição de memória
indicada pelo operando ender. O resultado é armazenado no acumulador.
Endereçamento: direto e indireto.
NOTA: a operação lógica é realizada bit a bit de acordo com a seguinte tabela:
ACC Memória resultado (ACC)
0
0
0
0
1
1
1
0
1
1
1
1
X:
LDI
OR
HLT
ORG
DB
0Fh ;ACC=0Fh (15)
X
;ACC=ACC ‘OU’ memória posição[X]
;fim do programa
20h ;mem. a partir da posição 20h (16)
33h ;declara variável, valor=33h (51)
X:
Y:
LDI
OR
HLT
ORG
DB
DB
0Fh ;ACC=0Fh (15)
@Y
;ACC=ACC 'OU' memória posição[@Y]
;fim do programa
20h ;mem. a partir da posição 20h (16)
33h ;declara variável, valor=33h (51)
20h ;declara variável, valor=20h
AND ender
O comando AND (logical and) realiza um "e" lógico entre o acumulador e o conteúdo de uma posição de memória
indicada pelo operando ender. O resultado é armazenado no acumulador.
Endereçamento: direto e indireto.
NOTA: a operação lógica é realizada bit a bit de acordo com a seguinte tabela:
ACC Memória
resultado
(ACC)
0
0
0
0
1
0
1
0
0
1
1
1
Essa instrução é conhecida como “máscara”, pois “deixa passar os bits marcados com ‘1’”.
LDI 0Fh ;ACC=0Fh (15)
AND X
;ACC=ACC ‘E’ memória posição[X]
HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
X:
DB 33h ;declara variável, valor=33h (51)
X:
Y:
LDI
AND
HLT
ORG
DB
DB
0Fh
@Y
;ACC=0Fh (15)
;ACC=ACC 'E' memória posição[@Y]
;fim do programa
20h ;mem. a partir da posição 20h (16)
33h ;declara variável, valor=33h (51)
20h ;declara variável, valor=20h
NOT
O comando NOT (logical not) inverte os bits do acumulador.
NOTA: a operação lógica é realizada bit a bit de acordo com a seguinte tabela:
4
ACC
0
1
resultado
(ACC)
1
0
LDI 0Fh ;ACC=0Fh (15)
NOT
;ACC=bits invertidos
HLT
;fim do programa
JMP ender
O comando JMP (jump) desvia a execução do programa para o endereço indicado pelo operando ender.
Endereçamento: direto e indireto.
NOTA: os exemplos a seguir executam indefinidamente (não tem fim), servindo apenas como
exemplo do funcionamento da instrução JMP.
LDI 0
;ACC=0
LOOP: ADD UM
;ACC=ACC+memória posição[UM]
JMP LOOP ;pula para LOOP
HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
UM:
DB 1
;declara variável, valor=1
LDI
STA
LDI
LOOP: ADD
JMP
HLT
ORG
UM:
DB
PULO: DS
LOOP ;ACC=posição LOOP
PULO ;memória posição[PULO]=ACC
0
;ACC=0
UM
;ACC=ACC+memória posição[UM]
@PULO ;pula para @PULO
;fim do programa
20h ;mem. a partir da posição 20h (16)
1
;declara variável, valor=1
1
;declara variável (1 byte)
JN ender
O comando JN (jump if negative) desvia a execução do programa para o endereço indicado pelo operando ender
apenas quando a última operação realizada produziu um valor com o bit 7 ligado (negativo).
Endereçamento: direto e indireto.
LDI 5
;ACC=5
LOOP: SUB UM
;ACC=ACC-memória posição[UM]
JN FIM ;pula para FIM se bit 7(ACC)=1
JMP LOOP ;pula para LOOP
FIM: HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
UM:
DB 1
;declara variável, valor=1
LDI
SUB
LOOP: ADD
JN
HLT
ORG
UM:
DB
TRES: DB
0
TRES
UM
LOOP
20h
1
3
;ACC=0
;ACC=ACC-memória posição[TRES]
;ACC=ACC+memória posição[UM]
;pula para LOOP se bit 7(ACC)=1
;fim do programa
;mem. a partir da posição 20h (16)
;declara variável, valor=1
;declara variável, valor=3
5
LDI
STA
LDI
SUB
LOOP: ADD
JN
HLT
ORG
UM:
DB
TRES: DB
PULO: DS
LOOP ;ACC=posição LOOP
PULO ;memória posição[PULO]=ACC
0
;ACC=0
TRES ;ACC=ACC-memória posição[TRES]
UM
;ACC=ACC+memória posição[UM]
@PULO ;pula para @PULO se bit 7(ACC)=1
;fim do programa
20h ;mem. a partir da posição 20h (16)
1
;declara variável, valor=1
3
;declara variável, valor=3
1
;declara variável (1 byte)
JZ ender
O comando JZ (jump if zero) desvia a execução do programa para o endereço indicado pelo operando ender,
apenas quando a última operação realizada produziu um valor zero.
Endereçamento: direto e indireto.
LDI 5
;ACC=5
LOOP: SUB UM
;ACC=ACC-memória posição[UM]
JZ FIM ;pula para FIM se ACC=0
JMP LOOP ;pula para LOOP
FIM: HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
UM:
DB 1
;declara variável, valor=1
LDI
STA
LDI
LOOP: SUB
JZ
JMP
FIM: HLT
ORG
UM:
DB
PULO: DS
FIM ;ACC=posição FIM
PULO ;memória posição[PULO]=ACC
5
;ACC=5
UM
;ACC=ACC-memória posição[UM]
@PULO ;pula para @PULO se ACC=0
LOOP ;pula para LOOP
;fim do programa
20h ;mem. a partir da posição 20h (16)
1
;declara variável, valor=1
1
;declara variável (1 byte)
JNZ ender
O comando JNZ (jump if not zero) desvia a execução do programa para o endereço indicado pelo operando
ender, apenas quando a última operação realizada produziu um valor diferente de zero.
Endereçamento: direto e indireto.
LDI 5
;ACC=5
LOOP: SUB UM
;ACC=ACC-memória posição[UM]
JNZ LOOP ;pula para LOOP se ACC<>0
HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
UM:
DB 1
;declara variável, valor=1
LDI
STA
LDI
LOOP: SUB
JNZ
HLT
ORG
UM:
DB
PULO: DS
LOOP ;ACC=posição LOOP
PULO ;memória posição[PULO]=ACC
5
;ACC=5
UM
;ACC=ACC-memória posição[UM]
@PULO ;pula para @PULO se ACC<>0
;fim do programa
20h ;mem. a partir da posição 20h (16)
1
;declara variável, valor=1
1
;declara variável (1 byte)
IN ender
O comando IN (input) traz para o acumulador o valor lido num dispositivo externo indicado pelo operando ender.
Os dispositivos são:


endereço 0: valor das chaves
endereço 1: status de "dado disponível" das chaves .
6
LAB1: IN 1
JZ LAB1
IN 0
HLT
LAB1: IN
JZ
IN
HLT
DISP EQU
LEIT EQU
;verifica se o valor está disponível
;fica em loop
;ACC=valor lido
;fim do programa
DISP ;verifica se o valor está disponível
LAB1 ;fica em loop
LEIT ;ACC=valor lido
;fim do programa
1
;define constante=1
0
;define constante=0
OUT ender
O comando OUT (output) descarrega o conteúdo do acumulador em um dispositivo externo indicado pelo
operando ender.
Os dispositivos disponíveis são:



endereço 0: descarrega no visor (hexadecimal)
endereço 2: descarrega no banner o caracter ASCII cujo código está no acumulador (ver anexo).
endereço 3: limpa o banner
LDI 32
;ACC=32
V:
OUT 0
;visor=ACC
OUT 2
;banner=ACC
OUT 3
;limpa banner
ADD UM
;ACC=ACC+1
JMP V
;pula para V
HLT
;fim do programa
ORG 100 ;mem. a partir da posição 100
UM:
DB 1
;declara variável, valor=1
LDI
OUT
LDI
OUT
LDI
OUT
LDI
OUT
HLT
83
2
105
2
109
2
33
2
;ACC=63 ('S')
;banner=ACC
;ACC=63 ('i')
;banner=ACC
;ACC=63 ('m')
;banner=ACC
;ACC=63 ('!')
;banner=ACC
;fim do programa
HLT
O comando HLT (halt) para a máquina.
Modos de Endereçamento:
imediato
O segundo byte da instrução é o operando.
A única instrução que usa este modo de endereçamento é a LDI.
LDI 2
;ACC=2
HLT
;fim do programa
direto
O segundo byte da instrução é o endereço de memória do operando.
7
A:
LDI
STA
HLT
ORG
DS
2
A
10
1
;ACC=2
;memória posição[A]=ACC
;fim do programa
;mem. a partir da posição 10
;declara variável (1 byte)
indireto
O segundo byte da instrução contém o endereço de memória onde está o endereço do operando (ou seja, o
segundo byte da instrução é o endereço do ponteiro para o operando).
Para indicar que um operando é indireto, deve-se precedê-lo pela letra "@" (arrôba).
LDA @B ;ACC=memória posição[@B]
HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
A:
DB 5
;declara variável, valor=5
B:
DB 20h ;declara variável, valor=20h
Comentários no programa
Os comentários começam “;” (ponto e vírgula) e podem também ocorrer no final das linhas de instruções.
LDI 10 ;ACC=10
HLT
;fim do programa
Rótulos
Um rótulo é um nome dado à próxima posição de memória. O nome é seguido por dois pontos.
LDA B
;ACC=memória posição[B]
HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
B:
DB 10 ;declara variável, valor=10
Pseudo Instruções
ORG ender
A pseudo-instrução ORG (origin) indica ao montador que a próxima instrução será colocado na posição ender de
memória.
LDI 2
;ACC=2
STA A
;memória posição[A]=ACC
HLT
;fim do programa
ORG 10 ;mem. a partir da posição 10
A:
DS 1
;declara variável (1 byte)
const EQU imed
A pseudo-instrução EQU (equate) atribui um nome (rótulo) a um certo valor, identificando assim uma constante.
LDI DEZ ;ACC=10
HLT
;fim do programa
DEZ
EQU 10 ;define constante=10
END ender
A pseudo-instrução END indica que o programa fonte acabou.
O operando ender é usado para pré-carregar o PC com o endereço inicial de execução do programa.
Essa pseudo-instrução é opcional.
[var:] DB imed
A pseudo-instrução DB (define byte) carrega a memória (byte) com o valor dado pelo operando imed.
8
Quando [var] (opcional) é definido, pode ser usado para referenciar a posição de memória reservada.
LDA B
;ACC=memória posição[B]
HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
B:
DB 10 ;declara variável, valor=10
Normalmente essa pseudo-instrução não é útil sem a referência var.
Essa pseudo-instrução, apesar de pouco comum, pode ser usada no meio das instruções, o que deve ser feito
com muito cuidado e atenção, pois os resultados podem ser imprevisíveis.
LDA B
;ACC=memória posição[B]
DB 0F0h ;declara variável, valor=0F0h (HLT)
ORG 20h ;mem. a partir da posição 20h (16)
B:
DB 10
;declara variável, valor=10
[var:] DS imed
A pseudo-instrução DS (define storage) reserva um número de palavras na memória definido pelo valor imed.
Quando [var] (opcional) é definido, pode ser usado para referenciar a posição de memória reservada.
LDI 2
;ACC=2
STA A
;memória posição[A]=ACC
HLT
;fim do programa
ORG 10 ;mem. a partir da posição 10
A:
DS 1
;declara variável (1 byte)
Normalmente essa pseudo-instrução não é útil sem a referência var.
Essa pseudo-instrução, apesar de pouco comum, pode ser usada no meio das instruções, o que deve ser feito
com muito cuidado e atenção, pois os resultados podem ser imprevisíveis.
LDI 5
;ACC=5
STA OP
;memória posição[OP]=ACC
DB 0E0h ;declara variável, valor=0E0h (LDI)
OP:
DS 1
;declara variável (1 byte)
HLT
;fim do programa
Representação de números
Decimal: 30
Binário: 00110000b
Hexadecimal: 30h
Nota: Números hexadecimais maiores que 7Fh devem ser precedidos por um zero, p. ex. 0F3h
ANEXO 1 – simulador
O NeanderWin é um simulador da máquina Neander, definida no livro “Fundamentos de Arquitetura de
Computadores “, Raul F. Weber (UFRGS), Ed. Sagra Luzzatto. A máquina original foi estendida para incluir
algumas instruções extras, incluindo a carga de dados imediatos no acumulador e operações de entrada e saída
de dados. Nesse simulador estão mapeados apenas dois dispositivos: um teclado e um visor.
Cada instrução ocupa 1 byte. Na parte mais alta está o código da instrução propriamente dito. A parte mais baixa
indica se a instrução usa endereçamento direto (0) ou indireto (1).
Instrução
operando
ADD
ender
30h
31h
soma ao acumulador o conteúdo de [ender] ou de [@ender].
AND
ender
50h
51h
"e" lógico entre o acumulador e o conteúdo de [ender] ou de [@ender].
F0h
parada da máquina.
C0h
traz para o acumulador o valor lido num dispositivo externo indicado por
[ender].
0 = valor das chaves
1 = status de "dado disponível" nas chaves
HLT
IN
ender
código
Descrição
9
JMP
ender
80h
81h
desvia a execução do programa para o endereço ender ou [@ender].
JN
ender
90h
91h
desvia a execução do programa para o endereço ender ou @ender SE a
última operação realizada produziu um valor com o bit 7 ligado
(negativo).
JNZ
ender
B0h
B1h
desvia a execução do programa para o endereço ender ou @ender SE a
última operação realizada produziu um valor diferente de zero.
JZ
ender
A0h
A1h
desvia a execução do programa para o endereço ender ou @ender SE a
última operação realizada produziu um valor zero.
LDA
ender
20h
21h
atribui ao acumulador o conteúdo de [ender] ou de [@ender]
LDI
imed
E0h
carrega no acumulador o valor dado pelo operando imed.
NOP
00h
gastar tempo.
NOT
60h
inverte os bits do acumulador.
OR
ender
40h
41h
"ou" lógico entre o acumulador e o conteúdo de [ender] ou de [@ender].
OUT
ender
E0h
descarrega o acumulador no dispositivo externo indicado por ender.
0 = visor
2 = banner para escrever o dado do ACC
3 = limpar
STA
ender
10h
11h
guarda o acumulador na posição ender ou @ender
SUB
ender
70h
71h
subtrai do acumulador o conteúdo de [ender] ou de [@ender].
ANEXO 2 – tabela ASCII
DEC HEX CARAC DEC HEX CARAC DEC HEX CARAC DEC HEX CARAC
32
20 espaço 56
38
8
80
50
P
104 68
h
33
21
!
57
39
9
81
51
Q
105 69
i
34
22
"
58
3ª
:
82
52
R
106 6A
j
35
23
#
59
3B
;
83
53
S
107 6B
k
36
24
$
60
3C
<
84
54
T
108 6C
l
37
25
%
61
3D
=
85
55
U
109 6D
m
38
26
&
62
3E
>
86
56
V
110 6E
n
39
27
'
63
3F
?
87
57
w
111 6F
o
40
28
(
64
40
@
88
58
X
112 70
p
41
29
)
65
41
A
89
59
Y
113 71
q
42
2A
*
66
42
B
90
5A
Z
114 72
r
43
2B
+
67
43
C
91
5B
[
115 73
s
44
2C
,
68
44
D
92
5C
\
116 74
t
45
2D
69
45
E
93
5D
]
117 75
u
46
2E
.
70
46
F
94
5E
^
118 76
v
47
2F
/
71
47
G
95
5F
_
119 77
w
48
30
0
72
48
H
96
60
`
120 78
x
49
31
1
73
49
I
97
61
a
121 79
y
50
32
2
74
4A
J
98
62
b
122 7A
z
51
33
3
75
4B
K
99
63
c
123 7B
{
52
34
4
76
4C
L
100 64
d
124 7C
|
53
35
5
77
4D
M
101 65
e
125 7D
}
54
36
6
78
4E
N
102 66
f
126 7E
~
55
37
7
79
4F
O
103 67
g
127 7F
DEL
10
ANEXO 3 – exemplos
Multiplicação
Exibe o resultado N1 x N2
VLT: LDA MLT
ADD N1
STA MLT
LDA N2
SUB UM
STA N2
JNZ VLT
LDA MLT
OUT 0
HLT
ORG 20h
UM:
DB 1
N1:
DB 5
N2:
DB 4
MLT: DB 0
;MLT=MLT+N1
;N2=N2-1
;volta se ACC<>0
;exibe MLT
;fim do programa
;mem. a partir da posição 20h (16)
;resultado
Divisão
Exibe o resultado da divisão inteira de N1 por N2. No final ACC=resto da divisão.
LDA N1
STA RST
VLT: LDA DIV
ADD UM
STA DIV
LDA RST
SUB N2
JN FIM
STA RST
JMP VLT
FIM: LDA DIV ;exibe DIV
OUT 0
LDA RST
HLT
;fim do programa
ORG 20h ;mem. a partir da posição 20h (16)
UM:
DB 1
N1:
DB 22
N2:
DB 4
DIV: DB 0FFh ;resultado
RST: DS 1
;resto
Vetor
O vetor (VET) é delimitado pelo valor 0FFh (-1).
É exibido o valor da soma dos elementos do vetor.
11
VLT:
LDI
ADD
STA
LDA
JN
ADD
STA
LDA
ADD
STA
JMP
FIM: LDA
OUT
HLT
ORG
UM:
DB
IND: DB
ENDR: DS
SOMA: DB
VET: DB
DB
DB
DB
DB
VET
IND
ENDR
@ENDR
FIM
SOMA
SOMA
IND
UM
IND
VLT
SOMA
0
20h
1
0
1
0
2
4
6
8
0FFh
;ENDR=VET[IND]
;ACC=@ENDR
;ACC<0 ?
;SOMA=SOMA+ACC
;IND=IND+1
;volta
;exibe SOMA
;fim do programa
;mem. a partir da posição 20h (16)
ANEXO 4 – referências
http://equipe.nce.ufrj.br/gabriel/estacio/MaquinaNeander.pdf
http://www.ppgee.pucminas.br/weac/2006/PDF/WEAC-2006-Artigo-05.pdf
http://www.dcc.ufrj.br/~gabriel/WEAC2006.pdf
12
Download