Escolar Documentos
Profissional Documentos
Cultura Documentos
Campus Taguatinga
Curso Ciência/Licenciatura em Computação
Disciplina Arquitetura de Computadores I
Professor Tiago Trindade da Silva
Exercícios
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)
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
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
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;
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.
5
0100 1001 0010 01002 = 1872410
lui $t1, 8193 # carrega a parte alta
ori $t1, $t1, 18724 # carrega a parte baixa