Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ARQUITETURA MIPS
Linguagem de Montagem (Assembly) Instrues de acesso memria
Estruturas de dados podem ser bastante complexas, com um nmero de elementos
grande demais para serem armazenados nos registradores;
Estruturas de dados, como vetores, so armazenados na memria
ARQUITETURA MIPS
Memria
Um grande vetor unidimensional, com endereo atuando como ndice
do vetor, comeando do 0.
ARQUITETURA MIPS
Transferindo dados da Memria
ARQUITETURA MIPS
Transferindo dados da Memria
A instruo de transferncia de dados da memria para o
registrador chamada de load.
Formato:
ARQUITETURA MIPS
Transferindo dados da Memria
Formato
ARQUITETURA MIPS
Transferindo dados da Memria
Suponhamos que temos um apontador a para um inteiro que est na memria, com o
endereo de memria dado no registrador $s3 (ou seja, o apontador est em $s3).
Suponha ainda que o compilador associou as variveis g e h aos registradores $s1 e
$s2. Qual o cdigo para o seguinte trecho em C:
Primeiro temos que pegar o operando que est na memria e transferi-lo para um
registrador:
lw
$t0, 0($s3)
add $s1,$s2,$t0
# temporrio $t0
#g
h + *a
*a
ARQUITETURA MIPS
Vetor na Memria
ARQUITETURA MIPS
Vetor na Memria
Suponhamos que o vetor A tenha 100 posies, e que o compilador associou as
variveis g e h aos registradores $s1 e $s2. Temos ainda que o endereo base do
vetor A dado em $s3. Qual o cdigo para:
Primeiro temos que pegar o operando que est na memria e transferi-lo para um
registrador:
lw
$t0, 8($s3)
add $s1,$s2,$t0
# temporrio $t0
#g
h + A[8]
A[8]
ARQUITETURA MIPS
Acesso Memria
Uma vez que bytes (8 bits) so teis em muitos programas, arquiteturas permite
acessar bytes:
Portanto, o endereo de uma palavra o endereo de um dos 4 bytes dentro da
palavra;
Assim, os endereos de palavras consecutivas diferem em 4.
ARQUITETURA MIPS
Vetor na Memria
Cada posio do vetor (de inteiros) uma palavra, e portanto ocupa 4 bytes:
ARQUITETURA MIPS
Vetor na Memria
Suponhamos que o vetor A tenha 100 posies, e que o compilador associou as
variveis g e h aos registradores $s1 e $s2. Temos ainda que o endereo base do
vetor A dado em $s3. Qual o cdigo para:
lw
$t0, 32($s3)
add $s1,$s2,$t0
# temporrio $t0
#g
h + A[8]
A[8]
ARQUITETURA MIPS
Transferindo dados para a Memria
ARQUITETURA MIPS
Transferindo dados para a Memria
A instruo de transferncia de dados de um registrador para a
memria chamada de store.
Formato:
ARQUITETURA MIPS
Transferindo dados para a Memria
Formato
fonte
ARQUITETURA MIPS
Vetor na Memria
Suponhamos que o vetor A tenha 100 posies, e que o compilador associou a
variveis h ao registrador $s2. Temos ainda que o endereo base do vetor A dado
em $s3. Qual o cdigo para:
# temporrio $t0
A[8]
add $t1,$s2,$t0
# temporrio $t1
h + A[8]
# A[12]
$t1
ARQUITETURA MIPS
Vetor na Memria
Suponhamos que o endereo base da matriz B esteja armazenado em $s4. Qual o
cdigo assembly para trocar os valores do B[10] e do B[11]?
Primeiro os dados da memria localizados em B[10] e B[11] devem ser carregados em registradores
temporrios:
lw $t0, 40($s4)
# temporrio $t0
B[10]
lw $t1, 44($s4)
# temporrio $t1
B[11]
Depois os dados dos registradores devem ser guardados nos endereos de memria:
sw $t0, 44($s4)
# B[11]
B[10]
sw $t1, 40($s4)
# B[10]
B[11]
ARQUITETURA MIPS
Vetor na Memria
Suponhamos que o vetor A tenha 100 posies, e que o compilador associou as
variveis g, h e i aos registradores $s1, $s2 e $s4. Temos ainda que o endereo base
do vetor A dado em $s3. Qual o cdigo para:
# temporrio $t1
2xi
add $t1,$t1,$t1
# temporrio $t1
4xi
ARQUITETURA MIPS
Vetor na Memria
Para pegarmos A[i], somamos $t1 com o endereo base de A, dado em $s3:
# temporrio $t1
Agora podemos carregar A[i] para um registrador temporrio, e realizar a soma, que
ser armazenada em g:
lw $t0 0($t1)
# temporrio $t0
#g
h + A[i]
valor de A[i]
ARQUITETURA MIPS
ARQUITETURA MIPS
Vetor na Memria
Suponhamos que o vetor A tenha 100 posies, e que o compilador associou as
variveis g e i aos registradores $s1 e $s2. Temos ainda que o endereo base do
vetor A dado em $s3 e do vetor C dado em $s4. Qual o cdigo para:
C[i] = g + A[i]
Precisamos primeiro calcular o endereo de A[i]. Antes de somar i ao endereo base de
A, devemos multiplicar i por 4. Vamos fazer isto por enquanto da seguinte forma:
# temporrio $t0
2xi
add $t0,$t1,$t1
# temporrio $t0
4xi
ARQUITETURA MIPS
Vetor na Memria
Para pegarmos A[i], somamos $t1 com o endereo base de A, dado em $s3:
# temporrio $t1
Agora podemos carregar A[i] para um registrador temporrio, e realizar a soma, que
ser armazenada:
lw $t2 0($t1)
# temporrio $t2
valor de A[i]
# temporrio $t3
g + A[i]
ARQUITETURA MIPS
Vetor na Memria
Para pegarmos C[i], somamos $t0 (4*i) com o endereo base de C, dado em $s4:
# temporrio $t4
sw $t3, 0($t4)
ARQUITETURA MIPS
Suponha que os valores das variveis x, y e z estejam armazenados em $s2, $s3 e $s4 e
que o endereo base da matriz B esteja armazenada em $s6. Converta o cdigo em C
seguinte para o cdigo assembly usando o conjunto de instrues MIPS:
main() {
int x, y, z;
int B[20];
B[0] = x;
y = B[2] + B[3];
}