Práctica 3 - Arquitectura del CPU

Anuncio
Práctica 3 - Arquitectura del CPU
Organización del Computador 1
Primer cuatrimestre de 2012
Ejercicio 1 A partir de cada uno de los siguientes vuelcos parciales de memoria y estados
del procesador, realizar un seguimiento simulando ciclos de instrucción hasta encontrar una
instrucción inválida (es decir, una instrucción cuyo código de operación no figure entre los
del conjunto de instrucciones). La arquitectura de la máquina es la descripta al final de esta
práctica. Indicar qué celdas de memoria se modifican y el estado final del procesador.
a) Ayuda: la quinta instrucción a ejecutar es inválida.
PC
A644
A630
A640
0
2EFD
FEDC
R0
R4
1
0053
7081
2
0225
A1C1
035D
E7A0
R1
R5
3
0000
C925
4
0052
223D
034C
A622
R2
R6
5
C925
A639
6
F303
002B
8A6B
1A2B
7
1A2B
FAF0
R3
R7
8
5600
48A7
0300
3898
9
5B4C
6880
Z
C
A
A4D6
9C40
0
0
B
88C0
0000
N
V
0
0
C
0000
0348
D
A200
4AF3
E
034B
A000
F
A631
0340
E
48A7
0000
F
6880
9C40
b) Ayuda: la quinta instrucción a ejecutar es inválida.
PC
2532
2520
2530
0
F303
034B
R0
R4
1
ABCD
A631
2
2FE2
5D40
035D
E7A0
R1
R5
3
2530
5432
4
8000
F205
034C
2521
5
253E
A200
R2
R6
8000
1A2B
6
FEDC
253C
7
7081
2EFD
R3
R7
8
A1C1
0053
A622
FFF4
9
C925
0225
Z
C
A
223D
9200
0
0
B
A639
2524
N
V
0
0
C
002B
2624
D
FAF0
2525
c) Ayuda: la cuarta instrucción a ejecutar es inválida.
PC
0358
0340
0350
0
FAF0
88C0
1
0053
FFFF
R0
R4
2
0000
A1C1
035F
27A3
R1
R5
3
8EC0
A200
4
0349
0348
C2A3
0122
5
6925
0000
R2
R6
6
0340
0225
2940
0352
7
1A2B
5200
8
0350
3621
R3
R7
9
6023
0344
034F
0359
A
0000
FBEE
Z
C
B
0000
2940
0
0
N
V
C
A000
FFFF
0
0
D
C925
563B
E
034B
FFFF
F
5E6F
F303
Ejercicio 2 Desensamblar el siguiente programa escrito en lenguaje de máquina ORGA1.
0001 1000 0000 0000 0000 0000 1111 1111
0001 1000 0100 0000 0001 0000 0000 0000
0010 1000 0010 0001
Ejercicio 3 Traducir el siguiente programa de lenguaje C a lenguaje de la máquina ORGA1.
Usar los registros R0 y R1 como contenedores de las variables x e y respectivamente;
1
2
3
int x = 2;
int y = 32;
x = x + y;
1
Ejercicio 4 Dados los siguientes valores de la memoria y del registro R0 de la arquitectura
ORGA1, ¿qué valores cargan en el registro R1 las siguientes instrucciones?
a) MOV R1, 20 (inmediato)
Memoria
Dirección
0020h
0030h
0040h
0050h
b) MOV R1, [20] (directo)
c) MOV R1, [[20]] (indirecto)
d) MOV R1, R0 (registro)
e) MOV R1, [R0] (indirecto registro)
Contenido
0040h
0050h
0060h
0070h
Registros
f) MOV R1, [R0 + 20] (indexado registro)
Nombre
R0
Contenido
0030h
Ejercicio 5 Considere el siguiente programa escrito en assembler de la arquitectura ORGA1:
Vector:
Clave:
Comienzo:
Ciclo:
Sigo:
Sumo:
Fin:
a) El programa se ubica en la posición
0100h de la memoria. Los vectores
se almacenan como valores contiguos
de una palabra de tamaño. Para indicar la finalización del vector se utiliza el valor cero. Suponiendo que el
vector contiene diez palabras, indicar el valor de cada una de las etiquetas.
DW ...
DW ...
...
DW 0000
DW ...
MOV R0, Vector
MOV R1, [Clave]
MOV R2, 0
MOV R3, [R0]
CMP R3, 0
JE Fin
CMP R3, R1
JE Sumo
ADD R0, 1
JMP Ciclo
ADD R2, 1
JMP Sigo
RET
b) Explicar qué hace el programa siguiendo su ejecución paso a paso.
c) Escribir un pseudocódigo que refleje
el comportamiento del programa.
d) Mostrar un vector para el cual este
programa no hace lo esperado.
Ejercicio 6 Escribir el pseudocódigo y el programa en assembler de ORGA1 que recorra un
vector de números codificados en notación complemento a 2 de 16 bits de precisión y devuelva
el valor máximo y mı́nimo de dicho vector. La posición de inicio del vector es recibida en el
registro R0 y su longitud en el registro R1. En los registros R2 y R3 deben guardarse el
resultado del máximo y mı́nimo respectivamente. La solución debe recorrer el vector una
única vez.
Ejercicio 7 Considere el siguiente programa escrito en assembler de la arquitectura ORGA1.
Valor:
Inicio:
Salida:
JMP Inicio
DW 0A0A
MOV R0, [Valor]
ADD R0, 0003
MOV [Valor], R0
RET
a) Suponiendo que el programa se ubica en la posición FF0Eh de la memoria, indicar el valor de cada
una de las etiquetas.
b) ¿Qué diferencia habrı́a si se reemplaza la tercer
instrucción por “Inicio: MOV R0, Valor”?
2
Ejercicio 8 La arquitectura ORGA1 posee operaciones aritméticas sobre números enteros
codificados en notación complemento a 2 de 16 bits de precisión.
El programa sumar64 realiza la suma en notación complemento a 2 de dos números enteros
de 64 bits en esta arquitectura. En los registros R0 y R1 se indican las direcciones de cada
número y en R2 se indica la posición de memoria en donde debe guardarse el resultado. Tanto
los parámetros como el resultado se almacenan en orden little-endian.
Se pide:
a) Escribir el pseudocódigo del programa sumar64.
b) Escribir sumar64 en código assembler de ORGA1.
Ejercicio 9 sumaVector64 es una rutina que suma los valores de un vector de n posiciones
de enteros de 64 bits codificados en notación complemento a 2. En R0 se recibe la cantidad
de elementos que tiene el vector y en R1 la posición de memoria en donde está almacenado
dicho vector. En R3 se recibe la posición de memoria en donde debe guardarse el resultado.
Los elementos del vector y el resultado se almacenan en orden little-endian.
Suponiendo que se cuenta con el programa sumar64 descripto en el ejercicio anterior, se
pide:
a) Escribir el pseudocódigo del programa sumaVector64.
b) Escribir sumaVector64 en código assembler de ORGA1 (tener en cuenta las instrucciones
de invocación, CALL, y de retorno, RET).
Ejercicio 10 leftShift es una rutina que decala a izquierda. Recibe como parámetros el valor
a shiftear en el registro R0 y la cantidad de posiciones en el registro R1 (entendido como un
número entero sin signo). El resultado final queda en el registro R0.
Se pide:
a) Escribir el pseudocódigo del programa leftShift.
b) Escribir leftShit en lenguaje assembler de ORGA1 (tener en cuenta las instrucción de
retorno, RET).
c) Aparte de R0 y R1, ¿la rutina altera el valor de otros registros? Modifique el programa
de modo que preserve el valor de todos los registros salvo R0 y R1.
Ejercicio 11 Dado el siguiente programa para la arquitectura ORGA1 cargado en la dirección
de memoria 0000h.
inicio:
rutina:
fin:
once:
cuatro:
MOV
ADD
CMP
DW
DW
JVS
SUB
RET
DW
DW
R1, [[once]]
[R1], 0x479E
R1, R2
0x0007
0xFFEF
fin
R1, R2
0x000B
0x0004
Si se empieza a ejecutar con los registros del procesador
en su estado inicial (R0 . . . R7, PC y flags en 0, SP en
FFEFh) y asumiendo que la ejecución termina al intentar
ejecutar una instrucción inválida, responder:
a) ¿Cuál es la dirección de memoria denotada por cada
etiqueta?
b) Realizar el seguimiento del programa indicando el estado de los registros, flags y valores del stack en cada
paso. Liste en orden las instrucciones ejecutadas.
3
Arquitectura ORGA1
Descripción General
. Palabras de 16 bits.
. Direccionamiento a palabra.
. Espacio direccionable de 65536 palabras.
. Espacio de direcciones dedicado a entrada/salida en las direcciones FFF0h-FFFFh.
. Ocho registros de propósito general de 16 bits: R0..R7.
. Program counter (PC) de 16 bits.
. Stack pointer (SP) de 16 bits. La pila comienza en la dirección FFEFh.
. Flags: Z (zero), N (negative), C (carry), V (overflow ).
. Todas las instrucciones alteran los flags, excepto MOV, CALL, RET, JMP y Jxx.
. De las que alteran los flags, todas dejan C y V en cero, excepto de ADD, SUB, CMP y
NEG.
Formato de instrucción
Tipo 1 : Instrucciones de dos operandos
4 bits
cod. op.
operación
MOV d, f
ADD d, f
SUB d, f
AND d, f
OR d, f
CMP d, f
ADDC d, f
6 bits
destino
6 bits
fuente
cod. op.
0001
0010
0011
0100
0101
0110
1101
16 bits
constante destino (opcional)
16 bits
constante fuente (opcional)
efecto
d←f
d ← d + f (suma binaria)
d ← d − f (resta binaria)
d ← d and f
d ← d or f
Modifica los flags según el resultado de d − f (resta binaria)
d ← d + f + carry (suma binaria)
Formato de operandos destino y fuente.
Modo
Inmediato
Directo
Indirecto
Registro
Indirecto registro
Indexado
Codificación
000000
001000
011000
100rrr
110rrr
111rrr
Resultado
c16
[c16]
[[c16]]
Rrrr
[Rrrr]
[Rrrr + c16]
c16 es una constante de 16 bits.
Rrrr es el registro indicado por los últimos
tres bits del cdigo de operando.
Las instrucciones que tienen como destino
un operando de tipo inmediato son consideredas como inválidas por el procesador,
excepto el CMP.
Tipo 2 : Instrucciones de un operando
Tipo 2a: Instrucciones de un operando destino.
4 bits
cod. op.
operacin
NEG d
NOT d
cod. op.
1000
1001
6 bits
destino
6 bits
000000
16 bits
constante destino (opcional)
efecto
d ← 0 − d (resta binaria)
d ← not d (bit a bit)
4
El formato del operando destino responde a la tabla de formatos de operando mostrada ms
arriba.
Tipo 2b: Instrucciones de un operando fuente.
4 bits
cod. op.
operacin
JMP f
CALL f
cod. op.
1010
1011
6 bits
000000
6 bits
fuente
16 bits
constante fuente (opcional)
efecto
PC ← f
[SP] ← PC, SP ← SP − 1, PC ← f
El formato del operando fuente responde a la tabla de formatos de operando mostrada ms
arriba.
Tipo 3 : Instrucciones sin operandos
4 bits
cod. op.
operacin
RET
cod. op.
1100
6 bits
000000
6 bits
000000
efecto
PC ← [SP+1], SP ← SP + 1
Tipo 4 : Saltos condicionales
Las instrucciones en este formato son de la forma Jxx (salto relativo condicional). Si al
evaluar la condición de salto en los flags el resultado es 1, el efecto es incrementar el PC con
el valor de los 8 bits de desplazamiento, representado en complemento a 2 de 8 bits. En caso
contrario la instrucción no produce efectos.
8 bits
cod. op.
Codop
1111 0001
1111 1001
1111 0010
1111 1010
1111 0011
1111 1011
1111 0100
1111 1100
1111 0101
1111 0110
1111 0111
Operacin
JE
JNE
JLE
JG
JL
JGE
JLEU
JGU
JCS
JNEG
JVS
8 bits
desplazamiento
Descripcin
Igual / Cero
Distinto
Menor o igual
Mayor
Menor
Mayor o igual
Menor o igual sin signo
Mayor sin signo
Carry / Menor sin signo
Negativo
Overflow
Condición de Salto
Z
not Z
Z or ( N xor V )
not ( Z or ( N xor V ) )
N xor V
not ( N xor V )
C or Z
not ( C or Z )
C
N
V
¿Cómo altera los flags?
Sea r el resultado de una instrucción que modifica los flags, el nuevo valor es el que sigue:
Z=1 ↔ r = 0x0000.
N=1 ↔ el bit más significativo de r es igual a 1.
C=1 ↔ se produjo carry durante una suma binaria o borrow durante una resta binaria.
V=1 ↔ la suma de dos números con signo produce un número sin signo (S + S = S)
ó la suma de dos números sin signo produce un número con signo (S + S = S) ó alguna
analogı́a con la resta (S − S = S ó S − S = S)
5
Planilla de Seguimiento
Organización del Computador 1
Flags
PC
Z
C
V
SP
N
[SP+1]
IR
Instrucción (1er
palabra)
(en bits)
PC
fetch
2da
palabra
PC
fetch
3er
palabra
PC
Instrucción
decodificada
Ejecución
Descargar