Está en la página 1de 41

Universidad ESAN

Programación Hack

Marks Calderón Niquin

Universidad ESAN

16 de marzo de 2021

Marks Calderón Niquin Programación Hack 1


Temario
Registros y memoria Universidad ESAN

1 Registros y memoria

2 Salto, variables, iteraciones

3 Punteros, entrada/salida

4 Ejercicios

Marks Calderón Niquin Programación Hack 2


Lenguaje ensamblador Hack
Registros y memoria Universidad ESAN

Sintaxis: Donde value es entero:


@value una constante decimal no-negativa o
un sı́mbolo referido a una constante(después)

Sintaxis:

Donde:
comp =
dest =
jump =

Semántico:
Calcula el valor de comp

Almacena el resultado en dest

Si la expresión booleana (comp jump 0) es verdadero, salta a ejecutar la instrucción a ROM[A]

Ejemplo:

Marks Calderón Niquin Programación Hack 3


Ensambladores Hack
Registros y memoria Universidad ESAN

Desarrollaremos un ensamblador Hack más adelante en el curso.


Marks Calderón Niquin Programación Hack 4
Emulador CPU
Registros y memoria Universidad ESAN

Una herramienta software


Conveniente para depurar y
ejecutar programas
simbólicos de Hack.

Marks Calderón Niquin Programación Hack 5


Registros y memoria
Registros y memoria Universidad ESAN

D: usado para almacenar datos


A: usado para almacenar datos / direccionar la memoria
M: representa el registro de memoria direccionado actualmente: M =
RAM[A]
Marks Calderón Niquin Programación Hack 6
Registros y memoria
Registros y memoria Universidad ESAN

D: usado para almacenar datos


A: usado para almacenar datos / direccionar la memoria
M: representa el registro de memoria direccionado actualmente: M =
RAM[A]

Marks Calderón Niquin Programación Hack 7


Programa ejemplo: sumar dos números
Registros y memoria Universidad ESAN

Marks Calderón Niquin Programación Hack 8


Programa ejemplo: sumar dos números
Registros y memoria Universidad ESAN

Marks Calderón Niquin Programación Hack 9


Demo: sumar dos números
Terminando un programa
Registros y memoria Universidad ESAN

Marks Calderón Niquin Programación Hack 11


Terminando un programa
Registros y memoria Universidad ESAN

Marks Calderón Niquin Programación Hack 12


Terminando un programa
Registros y memoria Universidad ESAN

Mejor práctica: Para finalizar un


programa de forma segura,
terminarlo con un bucle infinito.

Marks Calderón Niquin Programación Hack 13


Sı́mbolos incorporados
Registros y memoria Universidad ESAN

El lenguaje ensamblador Hack incorpora caracterı́sticas de sı́mbolos:

Estos sı́mbolos pueden ser usados para denotar “registros virtuales”


Ejemplo: supongamos que deseamos usar RAM [5] para representar alguna
variable, digamos x, y deseamos dejar x = 7

Marks Calderón Niquin Programación Hack 14


Sı́mbolos incorporados
Registros y memoria Universidad ESAN

El lenguaje ensamblador Hack incorpora caracterı́sticas de sı́mbolos:

R0, R1 ,. . . , R15 : “registros virtuales”, pueden ser usados como


variables
SCREEN y KBD : dirección base para mapeo de memoria I/O
Sı́mbolos restantes: usados en la implementación de la máquina
virtual Hack, mencionada en capı́tulos 7-8
Marks Calderón Niquin Programación Hack 15
Temario
Salto, variables, iteraciones Universidad ESAN

1 Registros y memoria

2 Salto, variables, iteraciones

3 Punteros, entrada/salida

4 Ejercicios

Marks Calderón Niquin Programación Hack 16


Derivación
Salto, variables, iteraciones Universidad ESAN

Marks Calderón Niquin Programación Hack 17


SUMA O RESTA DE UN PAR DE NÚMERO
Salto, variables, iteraciones Universidad ESAN

0 @R2 10 @18 ¿ Qué ocurre al ejecutar


1 D=M 11 0;JMP el código?
2 @12 12 @R0
3 D; JEQ 13 D=M
4 @R0 14 @R1
5 D=M 15 D=D-M
6 @R1 16 @R3
7 D=D-M 16 M=D
8 @R3 17 @18//END
9 M=D 18 0;JMP

Marks Calderón Niquin Programación Hack 18


Etiquetas
Salto, variables, iteraciones Universidad ESAN

Reglas de resolución de etiquetas:


Las declaraciones de etiqueta no
generan código
Cada referencia a una etiqueta se
reemplaza con una referencia al
número de instrucción que sigue a la
declaración de esa etiqueta.

Marks Calderón Niquin Programación Hack 19


Variables
Salto, variables, iteraciones Universidad ESAN

Marks Calderón Niquin Programación Hack 20


Variables
Salto, variables, iteraciones Universidad ESAN

Marks Calderón Niquin Programación Hack 21


Proceso iterativo
Salto, variables, iteraciones Universidad ESAN

código Pseudo código

sum = 0 // Computes RAM[ 1 ] = 1+2+ . . . +RAM[


i = 0 n = R0
entero n i = 1
leer (n) sum = 0
LOOP :
w h i l e ( i <= n ) i f i > n g o t o STOP
i++ sum = sum + i
sum += i i = i + 1
g o t o LOOP
STOP :
R1 = sum

Marks Calderón Niquin Programación Hack 22


Proceso iterativo
Salto, variables, iteraciones Universidad ESAN

Marks Calderón Niquin Programación Hack 23


// Computes RAM[ 1 ] = 1+2+ . . . +n
Pseudo código // Usage : p u t a number ( n ) i n RAM[ 0 ]
@R0
D=M
// Computes RAM[ 1 ] = 1+2+ . . . +RAM[ 0 ] @n
n = R0 M=D // n = R0
i = 1 @i
sum = 0 M=1 // sum=0
LOOP : @sum
i f i > n g o t o STOP M=0
sum = sum + i (LOOP)
i = i + 1 @i
g o t o LOOP D=M
STOP : @n
R1 = sum D=D M=
@STOP // i f i > n g o t o STOP
D ; JGT
@sum
D=M
@i
D=D+M
@sum
M=D
@i
M=M+1
@LOOP
0 ;JMP
(STOP)
@sum
D=M
@R1
M=D
(END)
@END
0 ;JMP
Proceso iterativo
Salto, variables, iteraciones Universidad ESAN

Marks Calderón Niquin Programación Hack 25


@R0
D=M
@n
M=D // n = R0
@i
M=1 // sum=0 Iteración
@sum
M=0
0 1 2 3 ...
(LOOP)
@i
RAM[0] 3
D=M
@n
n 3
=
D=D M i 1 2 3 4 ...
@STOP // i f i > n g o t o STOP
D ; JGT
@sum
sum
D=M
@i
D=D+M
@sum // sum = sum + 1
M=D
@ i // i = i + 1
M=M+1
@LOOP
0 ; JMP
(STOP)
@sum
D=M
@R1
M=D
(END)
@END
0 ; JMP
@R0
D=M
@n
M=D // n = R0
@i
M=1 // sum=0
@sum
M=0
Escribiendo programas ensamblador
(LOOP)
@i Mejores prácticas:
D=M
@n
Diseña el programa usando
=
D=D M
pseudocódigo
@STOP // i f i > n g o t o STOP
D ; JGT
@sum
Escribe el programa en lenguaje
D=M
@i
ensamblador
D=D+M
@sum // sum = sum + 1
Prueba el programa (en papel)
M=D
@ i // i = i + 1
usando una valor de variable
M=M+1 trazable
@LOOP
0 ; JMP
(STOP)
@sum
D=M
@R1
M=D
(END)
@END
0 ; JMP
Ejercicios
Salto, variables, iteraciones Universidad ESAN

Multiplicar dos numeros Suma de los n numeros pares

Marks Calderón Niquin Programación Hack 28


Temario
Punteros, entrada/salida Universidad ESAN

1 Registros y memoria

2 Salto, variables, iteraciones

3 Punteros, entrada/salida

4 Ejercicios

Marks Calderón Niquin Programación Hack 29


Punteros
Punteros, entrada/salida Universidad ESAN

// for (i=0; i<n; i++) {


// arr[i] = -1
// }
Observaciones:
El arreglo es implementado como un
bloque de registros de memoria
Para acceder a estos registros de
memoria uno tras otro, necesitamos una
variable que contenga la dirección
actual
Las variables que representan
direcciones se llaman punteros
No hay nada especial en las variables de
puntero, excepto que sus valores se
interpretan como direcciones.
Marks Calderón Niquin Programación Hack 30
Punteros
Punteros, entrada/salida Universidad ESAN

// f o r ( i =0; i<n ; i ++) {


// arr [ i ] = 1 =
// }

// S u p p o s e t h a t a r r =100 and n=10

// L e t a r r = 100
@100
D=A
@arr
M=D

// L e t n = 10
@10
D=A
@n
M=D

// L e t i = 0
@i
M=0

// Loop c o d e c o n t i n u e s
// i n n e x t s l i d e . . .

Marks Calderón Niquin Programación Hack 31


Punteros
Punteros, entrada/salida Universidad ESAN

Punteros: Variables que almacenan


direcciones de memoria (como arr)
Punteros en Hack: Siempre que
tengamos que acceder a la memoria usando
un puntero, necesitamos una instrucción
como A = expression
Semántica: “fijamos al registro de
dirección algún valor”.
Marks Calderón Niquin Programación Hack 32
Salida
Punteros, entrada/salida Universidad ESAN

Convención
de lenguaje Hack:
Pantalla: dirección base del mapeo de memoria de pantalla

Marks Calderón Niquin Programación Hack 33


Manipulando la pantalla: Demo
Punteros, entrada/salida Universidad ESAN

Marks Calderón Niquin Programación Hack 34


Manipulando la pantalla
Punteros, entrada/salida Universidad ESAN

Marks Calderón Niquin Programación Hack 35


Manipulando la pantalla
Punteros, entrada/salida Universidad ESAN

Marks Calderón Niquin Programación Hack 36


Temario
Ejercicios Universidad ESAN

1 Registros y memoria

2 Salto, variables, iteraciones

3 Punteros, entrada/salida

4 Ejercicios

Marks Calderón Niquin Programación Hack 37


Multiplicación: R2 = R1*R0
Ejercicios Universidad ESAN

Marks Calderón Niquin Programación Hack 38


Completar un programa interactivo
Ejercicios Universidad ESAN

Implementar estrategias
Escuchar el teclado
Para pantalla negra/ limpiar pantalla, escribir un código que llene el
mapeo de memoria de pantalla con pixeles blancos o negros (Acceder
a la memoria requiere trabajar con punteros)
Prueba
Seleccionar “sin animación”
Prueba manual ( sin scripts de prueba).

Marks Calderón Niquin Programación Hack 39


Completar un programa interactivo
Ejercicios Universidad ESAN

Marks Calderón Niquin Programación Hack 40


Bibliografı́a I
Ejercicios Universidad ESAN

Marks Calderón Niquin Programación Hack 41

También podría gustarte