Você está na página 1de 6

INSTITUTO FEDERAL DE BRASÍLIA

Campus Taguatinga
Curso Ciência/Licenciatura em Computação
Disciplina Arquitetura de Computadores I
Professor Tiago Trindade da Silva

Exercícios

1. Para a seguinte declaração em C, qual é o código Assembly MIPS correspondente?


Assuma que as variáveis f, g, h e i são dadas e são inteiros com tamanho de 32 bits.
Utilize o número mínimo de instruções Assembly MIPS.
f =g+(h−5) ;
addi f, h, -5 # não existe subi
add f, f, g
2. Para o seguinte código Assembly MIPS, qual é a declaração em C correspondente?
add f, g, h
add f, i, f
f = g + h + i;
3. Para a seguinte declaração C, qual é o código Assembly MIPS correspondente?
Assuma que as variáveis f, g, h, i e j estão atribuídas aos registradores $s0, $s1, $s2,
$s3, e $s4 respectivamente. Assuma que o endereço base dos vetores A e B estão nos
registradores $s6 e $s7, respectivamente.
B [8]= A [i− j];
sub $t0, $s3, $s4 # $t0 = i – j
sll $t0, $t0, 2 # $t0 = 4 * (i – j)
add $t0, $s6, $t0 # $t0 = &A[i – j]
lw $t1, 0($t0) # $t1 = A[i – j]
sw $t1, 32($s7) # B[8] = A[i – j]

4. Para o código Assembly MIPS abaixo, qual é a declaração C correspondente?


Assuma que as variáveis f, g, h, i e j estão atribuídas aos registradores $s0, $s1, $s2,
$s3 e $s4, respectivamente. Assuma que o endereço base dos vetores A e B estão nos
registradores $s6 e $s7, respectivamente.
sll $t0, $s0, 2 # $t0 = f * 4
add $t0, $s6, $t0 # $t0 = &A[f]

1
sll $t1, $s1, 2 # $t1 = g * 4
add $t1, $s7, $t1 # $t1 = &B[g]
lw $s0, 0($t0) # f = A[f]
addi $t2, $t0, 4
lw $t0, 0($t2)
add $t0, $t0, $s0
sw $t0, 0($t1)

B[g] = A[f] + A[f + 1]

5. Mostre como o valor 0xabcdef12 pode ser organizado na memória utilizando little-
endian e big-endian. Assuma que o dado é armazenado começando na posição 0.
Little-Endian Big-Endian
Endereço Dado Endereço Dado
12 ab 12 12
8 cd 8 ef
4 ef 4 cd
0 12 0 ab

6. Mostre o valor dos campos opcode (OP), Source Register (RS) e Target Register
(RT) para cada instrução MIPS. Para as instruções do formato-I mostre o valor do
campo imediato, para cada instrução do formato-R mostre o valor do campo
Destination Register (RD).
addi $t0, $s6, 4
Formato-I addi rt, rs, imm
op = 810 = 0010002
rs = $s6 = 2210 = 101102
rt = $t0 = 810 = 010002
imm = 410 = 0000 0000 0000 01002

add $t1, $s6, $0


Formato-R add rd, rs, rt
op = 010 = 0000002
rs = $s6 = 2210 = 101102

2
rt = $0 = 010 = 000002
rd = $t1 = 910 = 010102
shamt = 010 = 000002
funct = 3210 = 100000
sw $t1, 0($t0)
Formato-I sw rt, imm(rs)
op = 4310 = 1010112
rs = $t0 = 810 = 010002
rt = $t1 = 910 = 010012
imm = 010 = 0000 0000 0000 00002
lw $t0, 0($t0)
Formato-I lw rt, imm(rs)
op = 3510 = 1000112
rs = $t0 = 810 = 010002
rt = $t0 = 810 = 010002
imm = 010 = 0000 0000 0000 00002
add $t0, $t1, $t0
Formato-R add rd, rs, rt
op = 010 = 0000002
rs = $t1 = 910 = 010012
rt = $t0 = 010 = 010002
rd = $t0 = 910 = 010002
shamt = 010 = 000002
funct = 3210 = 100000
7. Assuma que os registradores $s0 e $s1 têm os valores 0x80000000 e 0xD0000000,
respectivamente.
a) Qual é o valor de $t0 para o seguinte código Assembly?
add $t0, $s0, $s1
0x5000000 – ocorre um overflow porque (8 + D) 16 = (8
+ 13)10 = (21)10 = (15)16, neste caso ocorrerá o vai
um no último digito ou seja o overflow.
b) Para o conteúdo dos registradores $s0 e $s1 como especificado acima, qual é o
valor de $t0 para o seguinte código Assembly?

3
sub $t0, $s0, $s1
$t0 = 0xB0000000
8. Apresente o fortmato e a instrução em assembly para o seguinte código de máquina
em binário 0000 0010 0001 0000 1000 0000 0010 00002.
op = 0000002 = 010, rs = 100002 = 1610 → $s0, rt 100002 = 1610 → $s0, shamt = 00002
= 010, funct = 100002 = 3210 → add
Formato-R: add $s0, $s0, $0

9. Apresente o formato, a instrução em assembly e o código de máquina binário da


instrução descrita pelos seguintes campos MIPS:
op = 0, rs = 3, rt = 2, rd = 3, shamt = 0, funct = 34
Formato-R: sub $v1, $v1, $v0, 0x00621822
10. Assuma que $t0 = 0xAAAAAAAA e $t1 = 0x12345678
a) Qual o valor de $t2 após as seguintes instruções
sll $t2, $t0, 44
or $t2, $t2, $t1
a instrução sll zera $t2 após o or $t2 terá o valor
de $t1
$t2 = 0x12345678
b) Qual o valor de $t2 após as seguintes instruções
sll $t2, $t0, 4
andi $t2, $t2, -1
$t2 = 0xAAAAAAA0

11. Assuma que $t0 contém o valor 0x00101000. Qual será o valor de $t2 após as
seguintes instruções?
slt $t2, $0, $t0
bne $t2, $0, ELSE
j Done
Else: addi $t2, $t2, 2
Done:
$t2 = 3
12. Suponha que o PC (Program Counter) possui o valor 0x20000000. É possível

4
utilizar a instrução J (jump) para ajustar o PC para o endereço 0x40000000? É
possível utilizar a instrução beq (branch on equal) para ajustar o PC para o mesmo
endereço?
Não para o jump e para o beq. offset do jump possui tamanho de 26 bits, com
efetividade no 28 bit. O beq possui offset de 16 bits.
13. Traduza o seguinte código C para Assembly MIPS. Use o mínimo de instruções
possível. Assuma que os valores a, b, i e j estão nos registradores $s0, $s1, $t0 e $t1,
respectivamente. Também assuma que o registradore $s2 possui o endereço base do
arry D.
for(i = 0; i < a; i++)
for(j = 0; j < b; j++)
D[4 * j] = i + j;

addi $t0, $zero, 0 # i = 0, condição inicial loop1


beq $zero, $zero, TEST1 # salta para o teste do loop1,
# evita a realização de dois testes
LOOP1: addi $t1, $zero, 0 # j = 0, condição inicial do loop2
beq $zero, $zero, TEST2 # salta para o teste do loop2
LOOP2: add $t3, $t0, $t1 # $t3 = i + j
sll $t2, $t1, 4 # $t2 = j * 8;
add $t2, $t2, $s2 # $t2 = &D[j * 4]
sw $t3, 0($t2) # D[j * 4] = j + i
addi $t1, $t1, 1 # j = j + 1
TEST2: slt $t2, $t1, $s1 # $t2 = 1 se j < b
bne $t2, $zero, LOOP2 # se j < b executa novamente o loop2
addi $t0, $t0, 1 # i = i + 1
TEST1: slt $t2, $t0, $s0 # $t2 = 1 se i < a
bne $t2, $zero, LOOP1 # se i < j executa novamente o loop1

14. Escreva o código assembly MIPS que cria uma constante de 32 bits 0010 0000
0000 0001 0100 1001 0010 01002 e armazena este valor no registrador
$t1.

Parte alta da constante


0010 0000 0000 00012 = 819310
Parte baixa da constante

5
0100 1001 0010 01002 = 1872410
lui $t1, 8193 # carrega a parte alta
ori $t1, $t1, 18724 # carrega a parte baixa

Você também pode gostar