Lista de Exercícios Linguagem de Montagem

Propaganda
Lista de Exercícios
Linguagem de Montagem
Esta lista de exercício tem como objetivo o desenvolvimento de programas em linguagem de montagem para uma
CPU simples.
A CPU simples que será utilizada é baseada em um processador MIPS que foi simplificado para torna-lo adequado
para atividades didáticas Como no processador MIPS, essa CPU didática também tem 3 tipos de instruções, as
instruções do tipo R (envolve operações sobre registradores), I (envolve o acesso à memória para o acesso de dados
e operações com dados imediatos) e J (envolve o cálculo de um endereço de memória dado pelo campo endereço).
O banco de registradores é apresentado na Tabela 1 e as instruções suportadas pela CPU estão especificadas na
Tabela 2. Todas as instruções obedecem ao formato padrão de instruções MIPS de 32 bits.
Registrador
$zero
$at
$v0
$v1
$a0
$a1
$a2
$a3
$t0
$t1
$t2
$t3
$t4
$t5
$t6
$t7
Instrução
add
addi
sub
and
or
ori
xor
sll
srl
lui
lw
sw
beq
bne
slt
slti
j
jal
jr
Número
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Tipo
R
I
R
R
R
I
R
R
R
I
I
I
I
I
R
I
J
J
J
Tabela 1: Registradores da CPU
Uso
Registrador Número
$s0
Valor constante igual a zero
16
$s1
Assembler temporário
17
$s2
Retorno de função
18
$s3
Retorno de função
19
$s4
Argumento de função
20
$s5
Argumento de função
21
$s6
Argumento de função
22
$s7
Argumento de função
23
$t8
Variáveis temporárias
24
$t9
Variáveis temporárias
25
$k0
Variáveis temporárias
26
$k1
Variáveis temporárias
27
$gp
Variáveis temporárias
28
$sp
Variáveis temporárias
29
$fp
Variáveis temporárias
30
$ra
Variáveis temporárias
31
Uso
Variáveis salvas por função
Variáveis salvas por função
Variáveis salvas por função
Variáveis salvas por função
Variáveis salvas por função
Variáveis salvas por função
Variáveis salvas por função
Variáveis salvas por função
Variáveis temporárias
Variáveis temporárias
Temporárias para S.O.
Temporárias para S.O.
Apontador global
Apontador de pilha
Apontador de quadro
Endereço de retorno
Tabela 2: Instruções suportadas pela CPU
Exemplo
Significado
add $s0 $s1 $s2
$s0 := $s1 + $s2
addi $s0 $s1 2
$s0 := $s1 + 2
sub $s0 $s1 $s2
$s0 := $s1 - $s2
and $s0 $s1 $s2
$s0 := $s1 and $s2
or $s0 $s1 $s2
$s0 := $s1 or $s2
ori $s0 $s1 0x10000000
$s0 := $s1 or 2
xor $s0 $s1 $s2
$s0 := $s1 xor $s2
sll $s0 $s0 1
$s0 := $s0 << 1 ($s0 := $s0 * 2^1)
srl $s0 $s0 1
$s0 := $s0 >> 1 ($s0 := $s0 / 2^1)
lui $s0 0x1000
$s0 := $s0 << 16 ($s0 := 0x10000000)
lw $s0 4($s1)
$s0 := memória[4+$s1]
sw $s0 4($s1)
Memória[4+$s1] = $s0
beq $s0 $s1 0x0020003C
Se $s0 == $s1 desvie para o endereço 0x0020003C
beq $s0 $s1 0x0020003C
Se $s0 != $s1 desvie para o endereço 0x0020003C
slt $s0 $s1 $s2
$s0 = ($s1 < $s2)?1:0
slti $s0 $s1 2
$s0 = ($s1 < 2)?1:0
j 0x0020003C
Desvia para o endereço 0x0020003C
jal 0x0020003C
Desvia para o endereço 0x0020003C e $ra := PC + 4
jr $ra
Desvia para o endereço armazenado em $ra
Questão 01
Escreva um programa em assembly, para trocar o conteúdo de dois registradores $t0 e $t2. Você não pode usar
outros registradores.
Organização e Arquitetura de Computadores I
Prof. Dr. Max Santana Rolemberg Farias
[email protected]
Lista de Exercícios
Linguagem de Montagem
Questão 02
Substitua o código abaixo em assembly. As variáveis x, y e m devem ser armazenadas nos registradores $s0, $s1,
$s2 respectivamente.
if (x > y)
m = x;
else
m = y;
Questão 03
Substitua o código abaixo em assembly. As variáveis temp e x devem ser armazenadas nos registradores $s0 e $s1
respectivamente.
switch(temp){
case 10:
x = 10;
break;
case 25:
x = 25;
break;
default:
x = 0;
}
Questão 04
Substitua o código abaixo em assembly. As variáveis i e x devem ser armazenadas nos registradores $s0 e $s1
respectivamente.
while(i == 8){
x = i++;
}
Questão 05
Escreva um programa em linguagem de montagem, para a CPU proposta, que gere um novo número inteiro com os
dígitos em ordem inversa do número 5382. Ou seja, o programa vai gerar o número 2835.
Questão 06
A série de Fibonacci é definida assim: os dois primeiros termos têm o valor 1 e cada termo seguinte é igual à soma
dos dois anteriores.
1 1 2 3 5 8 13 21 ...
Escreva um programa em linguagem de montagem, que calcule o valor do 9º termo.
Organização e Arquitetura de Computadores I
Prof. Dr. Max Santana Rolemberg Farias
[email protected]
Lista de Exercícios
Linguagem de Montagem
Questão 07
Os computadores só conseguem entender números, por isso, os computadores utilizam o código ASCII para
representar numericamente os caracteres como ”a” ou “@” ou uma ação de algum tipo. Abaixo está a tabela de
caracteres ASCII com os 32 caracteres não imprimível.
Escreva um programa em linguagem de montagem, que troca cada letra da string “ascii”. Ou seja, o programa deve
trocar os caracteres minúsculos pelo seu caractere maiúsculo.
Questão 08
Mostre como a string “SOS” seria armazenada na memória de uma CPU big-endian. Sendo que o endereço inicial
da memória é 0x1000100C. Use o diagrama de memória abaixo, para indicar claramente o endereço de memória de
cada byte.
Endereço
0x1000100C
Memória
Organização e Arquitetura de Computadores I
Prof. Dr. Max Santana Rolemberg Farias
[email protected]
Lista de Exercícios
Linguagem de Montagem
Questão 09
Mostre como a string “SOS” seria armazenada na memória de uma CPU little-endian. Sendo que o endereço inicial
da memória é 0x1000100C. Use o diagrama de memória abaixo, para indicar claramente o endereço de memória de
cada byte.
Endereço
0x1000100C
Memória
Questão 10
Represente o código em linguagem de máquina. Escreva as instruções em hexadecimal.
add $t0 $s0 $s1
lw $t0 0x20($t7)
addi $s0 $zero -10
“Se as pessoas não acreditam que a matemática é
simples, é só porque eles não percebem a quão
complicada a vida é.”
John Von Neumann
Organização e Arquitetura de Computadores I
Prof. Dr. Max Santana Rolemberg Farias
[email protected]
Download