Introdução à Arquitetura de Computadores/As Pseudo-Instruções: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Master (discussão | contribs)
r
Linha 1:
A linguagem Assembly de uma máquina costuma ser um reflexo direto de como são implementadas as instruções de um determinado processador. Entretanto, nem todas as instruções que temos à disposição quando programamos em Assembly são instruções verdadeiras para o processador. Algumas delas são na verdade pseudo-instruções.
 
Pseudo-instruções costumam ser substituídas pelo '''montador''' ao gerar instruções para o computador na forma de '''Lingüagem de Máquina'''. Pseudo-Instruções são na verdade combinações de mais de uma instrução. Vejamos agora alguns exemplos:
 
== A Pseudo-Instrução move ==
 
move $r1, $r2 # Copia o conteúdo do registrador $r2 para $r1
 
Ela é na verdade implementada da seguinte forma:
 
addu $r1, $r0, $r2 # Soma $r2 com zero e coloca o resultado em $r1
 
O registrador $r0 usado acima não é um registrador comum. Ele sempre possui o valor "0" e é um dos poucos registradores cujo valor nunca pode ser alterado pelo programador.
 
== A Pseudo-Instrução Load Address ==
 
la $r1, ENDEREÇO # Coloca o valor numérico de 32 bits "ENDEREÇO" em $r1
 
Esta instrução é muito útil para fazeer registradores receberem o valor de ponteiros para outros locais de memória. De fato, usamos esta pseudo-instrução no Capítulo anterior quando convertemos um código em C para o Assembly do MIPS. Ela é na verdade implementada desta forma:
 
lui $r1, constHI # Carrega-se os 16 bits mais significativos em $r1
ori $r1, $r0, constLO # Executa-se um OR bit-a-bit entre o registrador
# com os 16 bits mais significativos e os 16 bits
# menos significativos
 
O que a instrução '''lui''', ou ''Load Upper Immediate'' faz é uma operação '''shift''' de 16 bits para a esquerda e coloca no registrador indicado. Este passo é necessário porque valores imediatos passados para instruções só podem ter 16 bits por causa da limitação de espaço das instruções do Tipo I.
 
Também existe a instrução '''li''', ou ''Load Immediate'' que faz exatamente a mesma coisa que o '''la'''.
 
Note que o montador que remove as pseudo-instruções e as substitui por instruções que realmente existem no ''hardware'' sempre podem verificar se o valor que queremos carregar no registrador cabe em 16 bits. Neste caso, a instrução gerada fica bem mais simples e rápida:
 
addu $r1, $r0, $r2 # Soma $r2 com 0 e coloca em $r1
 
[[Categoria:Introdução à Arquitetura de Computadores]]