A.C.
Arquitectura de computadores
Curso:2018/19
|
|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| N no lectivo, N fiesta, N estudio, N exámenes, N N clase, N clase anulada | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Clases: {aula: 0.20S} {horario: lunes 12:00-12:50, jueves 9:40-10:30, viernes 12:00-12:50
Laboratorios: {aula: 0.23} {horario: 15:00-17:30}
Tutorias: {con las excepciones que se indiquen en GAUR, generalmente, L 10:30-12:00, J 11:00-14:00, V 10:30-12:00}
Versión del programa "a priori", según de impartió el año pasado.
El programa según va quedando (y se va previendo) a fecha 28/3/19.
actualizado a fin de curso.
Examen escrito consistente en 4-5 cuestiones teóricas (a contestar brevemente) y un ejercicio de programación en ensamblador.
(Enunciados de los exámenes: convocatoria ordinaria, convocatoria extraordinaria)
Las prácticas se valorarán in situ e individualmente, contando sólo positivamente.
Enero
Febrero
TEMA 1 - FUNDAMENTOS
TEMA 2 - DISPOSITIVOS DE MEMORIA
Saltamos el tema 3 para llegar a tiempo al laboratorio. Se verá más adelante.
TEMA 4 - el µP 68000
Marzo
1)
;RUTINA MAX_IN_BYTE_VECTOR
;FUNCIÓN devuelve el valor máximo en un vector de bytes sin signo.
; El vector tiene como cabecera una word con el número de elementos.
;ENTRADA A0(L) dirección del vector
;SALIDA D0(B) valor máximo
;MODIFICA ...
2)id(1) para un vector de words (16 bits)
3)id(2) con un parámetro de entrada que indica con_signo/sin_signo
4)id(3) pasando parámetros por la pila
ORG $1000
START: ; first instruction of program
LEA VECTOR,A0
BSR.s MAX_IN_BYTE_VECTOR
SIMHALT ; halt simulator
MAX_IN_BYTE_VECTOR
movem.l A0/D1,-(SP)
clr.b D0
move.w (A0)+,D1
bra.s noMayor
CICLO:
cmp.b (A0)+,D0
bhi.s noMayor
move.b -1(A0),D0
noMayor:
dbra d1,CICLO
movem.l (SP)+,A0/D1
rts
VECTOR
DC.W 6
DC.B 3,6,4,7,8,3
END START ; last line of source
ORG $1000
START: ; first instruction of program
PEA VECTOR
PEA RESULT
BSR.s MAX_IN_BYTE_VECTOR
ADDQ #8,SP
SIMHALT ; halt simulator
ORG $1100
;class ByteVector
;byte max(ByteVector v)
MAX_IN_BYTE_VECTOR
movem.l A0/D0-D1,-(SP)
clr.b D0
move.l 20(SP),A0
move.w (A0)+,D1
bra.s noMayor
CICLO:
cmp.b (A0)+,D0
bhi.s noMayor
move.b -1(A0),D0
noMayor:
dbra d1,CICLO
move.l 16(SP),A0
move.b D0,(A0)
movem.l (SP)+,A0/D0-D1
rts
ORG $1200
VECTOR
DC.W fv-iv
iv DC.B 3,6,4,7,8,3
fv
RESULT DS.B 1
END START ; last line of source
;static long fibonacci(int n) { //int=16bit; long=32bit
; if (n==0 || n==1) return n; //conversión a long "encubierta" que debe ser explicita en ensamblador
; return fibonacci(n-1)+fibonacci(n-2);
;}
; paso de parametros y retorno por pila (por valor al ser primitivos)
;long fibonacci(word n)
;Paso de parámetros: por pila (valor)
;Comentario: traducción bastante directa de [if (n==0 || n==1) return n; return fibonacci(n-1)+fibonacci(n-2);]
ORG $1000
START: ; first instruction of program
;Marco de llamada a fibonacci
move.w d0,-(SP) ; con n dado por el valor en d0
subq.l #4,SP ;
bsr.s fibonacci ;
move.l (SP),d1 ; guardando fib(n) en d1
addq.l #6,SP ;
SIMHALT ; halt simulator
fibonacci
movem.l d0-d1,-(SP)
move.w 16(SP),d0 ; n -> d0
beq casoBase0 ; si (d0=n)==0 caso base 0
subq.w #1,D0 ; d0-1 -> d0 [n-1 -> d0]
beq casoBase1 ; si (d0=n-1)==0 caso base 1
;Marco de llamada a fibonacci
move.w d0,-(SP) ; con n-1 [d0]
subq.l #4,SP ;
bsr.s fibonacci ;
move.l (SP),d1 ; guardando fib(n-1) en d1
addq.l #6,SP ;
subq.w #1,D0 ; d0-1 -> d0 [n-2 -> d0]
;Marco de llamada a fibonacci
move.w d0,-(SP) ; con n-2 [D0]
subq.l #4,SP ;
bsr.s fibonacci ;
add.l (SP),d1 ; sumando fib(n-2) a fib(n-1) [D1]
addq.l #6,SP ;
move.l D1,12(SP) ;retorno del caso general
movem.l (sp)+,d0-d1
rts
casoBase0
clr.l 12(SP) ;retorno del caso base n=0
movem.l (sp)+,d0-d1
rts
casoBase1
move.l #1,12(SP) ;retorno del caso base n=1
movem.l (sp)+,d0-d1
rts
END START ; last line of source
;static long fibonacci(int n) { //int=16bit; long=32bit
; if (n==0 || n==1) return n;
; long fibN=1, fibN_1=0;
; for (int i=2; i<=n; i++) {
; long aux=fibN;
; fibN=fibN+fibN_1;
; fibN_1=aux;
; }
; return fibN;
;}
; paso de parametros y retorno por pila (por valor al ser primitivos). Variables locales en el stack.
¡¡ALARMA!! ¡¡Hay que replantear la estructura del curso!! (bueno, no tanto "replantear" como "clarificar")
Abril
TEMA 5 - PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR
Comenzamos con el tema 5
#! /usr/bin/env python3
def hanoi(n, org, dst, aux):
global movs
if n==1:
movs.append((org,dst))
return
hanoi(n-1, org, aux, dst)
movs.append((org,dst))
hanoi(n-1, aux, dst, org)
movs = []
hanoi(3, 1, 2, 3)
print(movs)
TEMA 3 [pdf 1] [pdf 2] - REPRESENTACIÓN DE DATOS
Mayo
Exposición de temas (continuación)
TEMA 8 - TEORÍA DE LA COMPUTACIÓN
ORG $1500 ;sección de programa (con uso de estructuras de datos)
cola1 ColaCircular 128
ORG $2000 ;sección de definición de estructuras de datos
ColaCircular macro
Cola\@ DC.L Fbuffer\@-2,Buffer\@, Buffer\@
Buffer\@ DS.W \1
Fbuffer\@
endm
ccPLast: EQU 0 ;apuntador a la última word
ccHead: EQU 4 ;apuntador a la cabeza (word a extraer)
ccTail: EQU 8 ;apuntador a la cola (espacio a ocupar)
ccFirst: EQU 12 ;comienzo del espacio de almacenamiento
TEMA 9 - TEORÍA DE LA INFORMACIÓN
La entropía es la información media por símbolo proporcionada por la fuente. Una fuente emisora, con un alfabeto de N símbolos presenta máxima entropía si emite todos ellos con probabilidad 1/N.
Esto no tiene una relación directa con los posibles estados internos de la fuente y su distribución de probabilidad. En todo caso si la fuente presenta diferentes estados (es de memoria no nula), lo
que podemos seguir asegurando es que cuanto más uniforme sea la probabilidad de emisión más información aportará con cada símbolo por término medio.
La duda planteada podría tener que ver con una idea incorrecta: que la fuente contiene una cantidad finita de información y ésta va "saliendo" a través de la emisión de símbolos.
La pregunta sería algo así como ¿qué fuente contiene más información, una fuente con alta entropía (que emite con una distribución uniforme) o una con entropía menor (que emite con una ditribución más "descompensada")?
La respuesta es que la fuente tiene una entropía concreta, pero no una información concreta. La fuente es algo (modelo matemático o sistema físico) que emite información, y esta se acumula aditivamente con cada emisión sin un final
(recordemos que el concepto de entropía, en principio, está definido para una fuente con estados estacionarios). La cantidad de información aportada por una cadena de simbolos de la misma longitud por dos fuentes, dependerá de la amplitud del "vocabulario"
de símbolos y de su distribución de probabilidad.
Hay algunas variantes de la formulación de la entropía para sistemas no estacionarios, que pueden incluir los que tienen un estado final, y por tanto podría hablarse de una capacidad máxima emisión de información (que no es un número sino,
a su vez, una distribución de probabilidad) pero esa es otra historia... XD
Relaccionado con el exámen
De utilidad para el desarrollo del curso
Interesante / curioso