Aula 22: Linguagem de Montagem e Tipos de Endereçamento

Propaganda
Aula 22: Linguagem de Montagem e Tipos de Endereçamento
Diego Passos
Universidade Federal Fluminense
Fundamentos de Arquiteturas de Computadores
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
1 / 32
.
Revisão
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
2 / 32
.
Nas Aulas Anteriores. . .
Vimos como implementar um processador simplificado.
▶
▶
10 instruções.
Caminho de dados e lógica de controle.
Implementamos vários tipos de instruções.
▶
▶
▶
Instruções de desvio condicional e incondicional.
Instruções lógicas e aritméticas.
Instruções de transferência de memória.
Também vimos como implementar um pipeline.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
3 / 32
.
Na Aula de Hoje
Aprenderemos como programar nosso processador.
▶
▶
Como escrever programas.
Compostos por sequências das 10 instruções estudadas.
Discutiremos o que é uma linguagem de montagem.
▶
E como ela simplifica a escrita dos programas.
Finalmente, discutiremos os modos de endereçamento usados pelas instruções.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
4 / 32
.
Linguagem de Montagem
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
5 / 32
.
Motivação
Instruções são armazenadas em memória como sequências de bits.
▶
Subdivididos em campos: OpCode, operandos, . . .
Em aulas anteriores, vimos o formato de cada uma das instruções do processador
estudado na disciplina.
Exemplo (instrução add):
0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0
Opcode:
000000(2) = 0(10)
Operando 1:
10001(2)=17(10)
Operando 2:
10010(2)=18(10)
Resultado:
01000(2)=8(10)
Significado:
Operação Lógica
ou
Aritmética
Significado:
Primeiro
Operando está
no Reg. 17
Significado:
Segundo
Operando está
no Reg. 18
Significado:
Armazenar
Resultado
no Reg. 8
Campo não
Utilizado
Nesta
Instrução
(deve sempre
ser 0)
Função:
100000(2)=32(10)
Significado:
Operação de
Soma
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
6 / 32
.
Motivação (II)
Se tivéssemos um processador como o estudado nas últimas aulas, poderíamos
programá-lo.
▶
▶
Escrever sequências de instruções na memória.
Já em formato binário.
Tarefa não-trivial por dois motivos:
▶
▶
Dificuldade em representar algoritmos complexos na forma de instruções básicas.
Pouca praticidade na representação das instruções na memória.
⋆
⋆
Decorar Opcodes, números de função, IDs de registradores, . . .
Manipular bits.
Nesta aula, atacaremos o segundo problema.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
7 / 32
.
Simplificando a Programação dos Computadores
Esta mesma dificuldade de programação existia nos primeiros computadores eletrônicos.
▶
▶
Era necessário conhecer intimamente o hardware.
E manipular diretamente as instruções que compunham o programa.
O ideal é que pudéssemos automatizar, de alguma forma, o processo de programação.
▶
Ou ao menos parte dele.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
8 / 32
.
Simplificando a Programação dos Computadores (II)
Mais especificamente, seria interessante se:
▶
▶
▶
Pudéssemos pensar nas instruções em um nível mais alto de abstração.
Esquecer os detalhes dos bits que devem ser colocados em posições específicas da memória.
Pensar apenas em termos como:
⋆
⋆
▶
Somar registradores 2 e 3, e colocar resultado no registrador 4.
Saltar para certo endereço se os registradores 0 e 5 forem iguais.
Algum processo automático traduziria esta abstração para as sequências de bits corretas.
A solução encontrada foi a criação das chamadas Linguagens de Montagem.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
9 / 32
.
Linguagem de Montagem
; Carregar um ponteiro com endereço base dos operandos.
addi $0, $0, 100
; Ler valores dos operandos
; Durante a execução, $1 acumula o quociente, $2 guarda
o dividendo, $3 guarda o divisor, $4 é usado para
comparações, $5 é usado como 0 para referência.
lw $2, 0($0)
lw $3, 4($0)
TESTE:
; Teste: dividendo é menor que divisor?
slt $4, $2, $3
beq $4, $5, SUBTRACAO
Linguagem de programação.
Programas descritos como sequências de
instruções do processador.
Instruções descritas por strings.
▶
; Fim do algoritmo. Vamos salvar o quociente e o resto.
sw $1, 8($0)
sw $2, 12($0)
FIM:
j FIM ; loop infinito no final do programa
SUBTRACAO:
; Aqui, subtraímos o dividendo do divisor e
; voltamos para o teste.
sub $2, $2, $3
addi $1, $1, 1
j TESTE
Nome, argumentos.
Pode haver ainda outros elementos.
▶
Labels, constantes, IDs de registradores,
comentários, . . .
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
10 / 32
.
Linguagem de Montagem: Instruções
; Carregar um ponteiro com endereço base dos operandos.
Operandos
addi $0, $0, 100
Mnemônico
; Ler valores dos operandos
; Durante a execução, $1 acumula o quociente, $2 guarda
o dividendo, $3 guarda o divisor, $4 é usado para
comparações, $5 é usado como 0 para referência.
lw $2, 0($0)
lw $3, 4($0)
TESTE:
; Teste: dividendo é menor que divisor?
slt $4, $2, $3
beq $4, $5, SUBTRACAO
; Fim do algoritmo. Vamos salvar o quociente e o resto.
sw $1, 8($0)
sw $2, 12($0)
FIM:
j FIM ; loop infinito no final do programa
SUBTRACAO:
; Aqui, subtraímos o dividendo do divisor e
; voltamos para o teste.
sub $2, $2, $3
addi $1, $1, 1
j TESTE
Instruções são identificadas por
mnemônicos.
▶
▶
Determinam a instrução a ser executada.
Nomes mais intuitivos para campos
OpCode, função.
Operandos especificados através de
notações específicas.
▶
▶
Registradores.
Constantes numéricas.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
11 / 32
.
Linguagem de Montagem: Labels
; Carregar um ponteiro com endereço base dos operandos.
addi $0, $0, 100
; Ler valores dos operandos
; Durante a execução, $1 acumula o quociente, $2 guarda
o dividendo, $3 guarda o divisor, $4 é usado para
comparações, $5 é usado como 0 para referência.
lw $2, 0($0)
lw $3, 4($0)
Declaração
TESTE:
; Teste: dividendo é menor que divisor?
slt $4, $2, $3
beq $4, $5, SUBTRACAO
; Fim do algoritmo. Vamos salvar o quociente e o resto.
sw $1, 8($0)
sw $2, 12($0)
FIM:
j FIM ; loop infinito no final do programa
SUBTRACAO:
; Aqui, subtraímos o dividendo do divisor e
; voltamos para o teste.
sub $2, $2, $3
Uso
addi $1, $1, 1
Labels são marcadores de “pontos” do
programa.
▶
Endereços de instruções.
Ao inserir um label, podemos referenciar a
posição de memória por um nome.
▶
▶
Mais legível.
Simplifica processo de relocação.
Referências a labels são comuns.
▶
Instruções de desvio (condicional ou não).
j TESTE
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
12 / 32
.
Linguagem de Montagem: Portabilidade
Diferentemente de linguagens de alto nível (e.g., C, Pascal, Java), a linguagem de
montagem é pouco portável.
Existe uma forte correspondência entre a linguagem de montagem e o conjunto de
instruções.
▶
▶
Normalmente 1 para 1.
Cada linha (útil) do programa corresponde a uma instrução.
Por isso, cada conjunto de instrução possui sua linguagem de montagem particular.
▶
▶
Portar um programa em linguagem de montagem significa reescrevê-lo.
Alterar as instruções para as do conjunto do processador de destino.
Para linguagens de alto nível, muitas vezes é suficiente trocar o compilador.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
13 / 32
.
Linguagem de Montagem: Múltiplas Linguagens
Note que uma mesma linguagem de montagem não é compatível com conjuntos de
instruções diferentes.
Mas, para um mesmo conjunto de instruções, podem existir múltiplas linguagens de
montagem.
Exemplo para a arquitetura x86:
Sintaxe AT&T
Sintaxe Intel
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
14 / 32
.
Linguagem de Montagem: o Montador
Nome dado ao “compilador” da linguagem de montagem.
Responsável por:
▶
▶
Ler um arquivo texto contendo código na linguagem de montagem.
Gerar um executável, i.e., sequência de instruções em formato binário.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
15 / 32
.
Linguagem de Montagem: Nesta Disciplina
Ao invés de trabalharmos com uma linguagem de montagem real, complexa, usaremos
uma simplificada.
▶
▶
Específica para o conjunto de instruções visto até aqui.
Apenas 10 instruções.
Esta linguagem é a que deverá ser usada no restante da disciplina.
▶
▶
Último Trabalho.
Próximas provas.
Nos próximos slides, veremos as regras e estrutura desta linguagem.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
16 / 32
.
Instruções Disponíveis e Suas Representações
Instrução
lw reg1, imm(reg2)
sw reg1, imm(reg2)
add reg1, reg2, reg3
addi reg1, reg2, imm
sub reg1, reg2, reg3
slt reg1, reg2, reg3
and reg1, reg2, reg3
or reg1, reg2, reg3
beq reg1, reg2, imm
j imm
Descrição
Carrega palavra de memória da posição reg2
+ imm para o registrador reg1.
Escreve valor da palavra em reg1 para a
posição de memória reg2 + imm.
Soma os valores dos registradores reg2 e reg3
e armazena resultado em reg1.
Soma o valor do registrador reg2 ao valor do
imediato e armazena resultado em reg1.
Subtrai os valores dos registradores reg2 e
reg3 e armazena resultado em reg1.
Se o valor de reg2 é maior ou igual ao valor
de reg3, escreve 0 em reg1. Escreve 1, caso
contrário.
Realiza operação lógica AND bit a bit entre
reg2 e reg3 e armazena resultado em reg1.
Realiza operação lógica AND bit a bit entre
reg2 e reg3 e armazena resultado em reg1.
Se os valores de reg1 e reg2 forem iguais,
salta para PC + imm.
Salto incondicional para endereço dado pelo
imediato vezes 4, concatenado com 4 bits
mais significativos do PC.
Observações
Imediato de 16 bits em complemento
a dois.
Imediato de 16 bits em complemento
a dois.
—
Imediato de 16 bits em complemento
a dois.
Subtração com sinal em complemento a dois.
Comparação com sinal em complemento a dois.
—
—
Imediato de 16 bits em complemento
a dois.
Imediato de 28 bits sem sinal.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
17 / 32
.
Instruções Disponíveis e Suas Representações (II)
Em resumo, a instrução é composta por seu mnemônico e seus operandos.
Operandos são separados por vírgula.
Há três tipos de operandos:
▶
Registradores.
⋆
⋆
▶
Imediatos.
⋆
⋆
⋆
▶
Denotados por $x.
x é inteiro, decimal, de 0 a 31.
Constantes numéricas.
Decimais ou hexadecimais (precedidos de “0x”).
Decimais podem ser precedidos de menos.
imm(reg).
⋆
⋆
Base + deslocamento.
Operando é resultado da soma da constante com o conteúdo do registrador.
Note ainda que os imediatos estão sujeitos aos limites impostos pelos números de bits da
representação.
▶
e.g., na instrução addi, imediato tem, no máximo 16 bits em complemento a dois.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
18 / 32
.
Declaração e Uso de Labels
A linguagem permite a declaração e o uso de labels.
▶
▶
Nomes que identificam pontos específicos no código.
i.e., as posições de memória que correspondem às instruções.
Labels podem ser compostos por letras maiúsculas e minúsculas, além de algarismos
decimais.
▶
Mas devem, necessariamente, começar por uma letra.
A declaração de um label deve ser feita da seguinte forma:
▶
▶
▶
O nome do label deve ser colocado no início de uma linha.
O nome deve ser seguido de dois pontos (“:”).
Exemplos:
InicioLoop1:
add $0, $1, $2
InicioLoop2: add $0, $1, $2
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
19 / 32
.
Declaração e Uso de Labels (II)
Um label assume como valor a posição de memória referente à próxima instrução.
▶
i.e., à instrução que vem imediatamente após a declaração do label.
Labels declarados em algum ponto do código, podem ser usados em instruções de
desvio.
▶
▶
Em substituição aos imediatos.
Equivalem ao endereço de memória para onde saltar.
Note que:
▶
Um label pode ser referenciado antes de ser declarado.
⋆
▶
Mas ele precisa ser declarado em algum ponto do código.
Labels são usados igualmente para desvios condicionais e incondicionais.
⋆
Que esperam endereços relativos e “absolutos”.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
20 / 32
.
Outras Características da Linguagem
Linhas em branco e espaços adicionais são ignorados.
▶
▶
Podem ser inseridos pelo programador.
Não serão considerados pelo montador.
Comentários podem ser inseridos através do caractere ponto-e-vírgula.
▶
▶
Qualquer coisa à direita de um ponto-e-vírgula é considerada comentário.
E ignorada pelo montador.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
21 / 32
.
Um Programa de Exemplo: Divisão
; Carregar um ponteiro com endereço base dos operandos.
addi $0, $0, 100
; Ler valores dos operandos
; Durante a execução, $1 acumula o quociente, $2 guarda
o dividendo, $3 guarda o divisor, $4 é usado para
comparações, $5 é usado como 0 para referência.
lw $2, 0($0)
lw $3, 4($0)
TESTE:
; Teste: dividendo é menor que divisor?
slt $4, $2, $3
beq $4, $5, SUBTRACAO
; Fim do algoritmo. Vamos salvar o quociente e o resto.
sw $1, 8($0)
sw $2, 12($0)
FIM:
j FIM ; loop infinito no final do programa
SUBTRACAO:
; Aqui, subtraímos o dividendo do divisor e
; voltamos para o teste.
sub $2, $2, $3
addi $1, $1, 1
j TESTE
Programa realiza divisão (inteira) entre dois
valores.
Assume que valores de entrada estão nas
posições 100 e 104 da MP.
Funciona realizando subtrações sucessivas
do dividendo pelo divisor.
▶
Quando o divisor é maior, chegamos ao
resultado final.
Há, portanto, uma repetição indefinida e um
condicional.
▶
Note o uso dos labels TESTE e SUBTRACAO.
Resultados são armazenados nas posições
108 e 112 da MP.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
22 / 32
.
Modos de Endereçamento
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
23 / 32
.
Modos de Endereçamento
Instruções normalmente precisam acessar/armazenar dados em algum lugar.
Exemplos:
▶
▶
▶
Comparar valores em registradores.
Transferir dado de determinada posição de memória.
Alterar o valor do PC.
De alguma forma, o programador deve dizer ao processador onde estes dados
estão/devem ser guardados.
▶
Feito através dos operandos das instruções.
Como já vimos, instruções diferentes codificam esta informação de formas diferentes.
▶
e.g., todos os dados estão em registradores, dado está em certa posição da memória
principal, . . .
A estes modos de determinar a posição de um determinado dado/instrução, damos o
nome de Modo de Endereçamento.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
24 / 32
.
Modos de Endereçamento (II)
Conjuntos de instruções reais usam (podem usar) vários modos de endereçamento
diferentes.
Nesta disciplina, estudaremos alguns exemplos comuns:
▶
▶
▶
▶
▶
▶
Endereçamento
Endereçamento
Endereçamento
Endereçamento
Endereçamento
Endereçamento
por registrador.
imediato (ou constante).
direto.
indireto.
por base mais deslocamento.
relativo ao PC.
Nosso conjunto de instruções simplificado utiliza 4 destes modos.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
25 / 32
.
Endereçamento por Registrador
Neste modo, dado se encontra/deve ser guardado em um registrador.
Identificador do registrador se encontra codificado nos próprios bits da instrução.
Vimos diversos exemplos deste tipo de endereçamento:
▶
▶
▶
▶
Instrução add.
Na linguagem de montagem:
add $0, $1, $2
As duas parecelas da soma se encontram em registradores.
O resultado também é dado como o ID de um registrador.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
26 / 32
.
Endereçamento por Imediato
Também chamado de Endereçamento por Constante.
Dado sobre qual a instrução opera está representado por bits da própria instrução.
▶
Uma constante numérica.
Exemplo encontrado na nossa linguagem de montagem: instrução addi.
▶
Uma das parcelas está em um registrador, assim como o resultado.
⋆
▶
▶
Endereçamento por registrador.
Mas a outra parcela está nos próprios bits da instrução.
Na linguagem de montagem:
addi $0, $1, 377
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
27 / 32
.
Endereçamento Direto
Neste endereçamento, instrução terá que acessar posição da MP.
Posição a ser acessada é diretamente indicada por constante numérica nos bits da
instrução.
Não temos um exemplo perfeito deste tipo de endereçamento no nosso conjunto de
instruções.
O exemplo mais próximo é a instrução jump.
▶
Indicamos um endereço quase diretamente por uma constante na própria instrução:
jump 0x4567
▶
Mas a constante sofre alterações.
⋆
⋆
Multiplicada por 4.
Concatenada com os 4 bits mais significativos do PC.
Em um conjunto de instruções em que a operação jump usa a constante numérica
diretamente como novo valor do PC, temos o endereçamento direto.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
28 / 32
.
Endereçamento Indireto
Neste endereçamento, também fazemos referência a uma posição de memória.
O endereço a ser acessado está armazenado em um registrador.
O registrador é identificado por bits da instrução.
Seu valor é usado como o endereço de leitura/escrita da MP.
Novamente, não há exemplo deste tipo de endereçamento no nosso conjunto de
instruções.
Exemplo hipotético:
load $3, $4
Em algum conjunto de instruções, isso poderia representar: “carregue o conteúdo da
posição de memória dada pelo valor do registrador 4 no registrador 3”.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
29 / 32
.
Endereçamento por Base Mais Deslocamento
Híbrido entre o endereçamento direto e o endereçamento indireto.
Neste endereçamento, o alvo também é um endereço da MP.
▶
▶
▶
Parte do endereço é dada pelo valor de um registrador especificado na instrução.
Outra parte é dada por uma constante numérica, também na instrução.
Endereço a ser acessado é a soma destas duas partes.
Tipo de endereçamento bastante comum.
Exemplo no nosso conjunto de instruções:
lw $3, 8($4)
▶
Endereço a ser acessado é a soma do valor do registrador 4 (base) com a constante 8
(deslocamento).
Note que, geralmente, a constante pode ser negativa.
▶
Permite acessar dados antes do endereço base.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
30 / 32
.
Endereçamento Relativo ao PC
Modo de endereçamento geralmente utilizado para instruções de desvio.
Novo valor do PC é especificado na forma de um deslocamento aplicado ao PC.
Deslocamento é dado por uma constante especificada nos bits da instrução.
▶
Novo valor do PC é a soma do valor atual do PC com a constante.
Exemplo de uso no nosso conjunto de instruções:
▶
▶
Instrução branch on equal.
Na linguagem de montagem:
beq $3, $5, 43
Assim como no endereçamento por base mais deslocamento, constante normalmente
pode ser negativa.
▶
Permite pular para pontos anteriores do programa.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
31 / 32
.
Exercício
Escreva um programa que multiplique dois números inteiros na linguagem de montagem
vista em aula.
Assuma que os dois fatores da multiplicação já estejam carregados nos registradores 0 e 1.
.
Diego Passos (UFF)
Linguagem de Montagem; Tipos de Endereçamento
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
FAC
.
.
.
.
.
.
.
32 / 32
.
Download