Title: Arquitectura Von Neumann
1Arquitectura ORGA1
- Arquitectura Von Neumann
- Palabra de 16 bits
- Espacio de memoria de 65.535 palabras ( 0000 a
FFEF) - 8 registros de propósito general de 16 bits (R0 a
R7) - Program counter (PC) y stack pointer (SP) de 16
bits
2Arquitectura ORGA1
- Arquitectura Von Neumann
- Palabra de 16 bits
- Espacio de memoria de 65.535 palabras ( 0000 a
FFFF ) - 8 registros de propósito general de 16 bits (R0 a
R7) - Program counter (PC) y stack pointer (SP) de 16
bits - Flags Z, N, C y V
- ALU que opera en complemento a 2
3Arquitectura ORGA1
Instrucción MOV Formato MOV Destino,
Fuente Copia el contenido de Fuente en
Destino, pisando este último.
Pero qué pueden ser Destino y Fuente?
4Arquitectura ORGA1
Instrucción MOV Formato MOV Destino,
Fuente Copia el contenido de Fuente en
Destino, pisando este último.
Pero qué pueden ser Destino y Fuente?
(
Abramos un paréntesis para aprender sobre modos
de direccionamiento.
5Arquitectura ORGA1 Modos de direccionamiento
Inmediato Destino o fuente son una constante de
16 bits. Por ejemplo FFFF, ab, 8000 o 0000.
Registro Destino o fuente hacen referencia a uno
de los 8 registros. Por ejemplo R0, R1, etc
- Y bueno, con estos dos ya podemos hacer cosas
como - Poner R0 en 0 MOV R0, 0
- Poner R1 en FFFF MOV R1, FFFF
- Etc
6Arquitectura ORGA1 Modos de direccionamiento
Pero con solo esos dos, no puedo interactuar con
la memoria Para eso necesito modos de
direccionamiento mas complicados
7Arquitectura ORGA1 Modos de direccionamiento
Pero con solo esos dos, no puedo interactuar con
la memoria Para eso necesito modos de
direccionamiento mas complicados
Bienvenidos al mundo de los punteros!
Direccionamiento directo Destino o fuente son
una constante de 16 bits, pero que representa una
de mis 65.535 direcciones de memoria. Para
indicar que estamos usando este modo de
direccionamiento, ponemos la constante entre
corchetes.
Ahora puedo hacer cosas mas entretenidas Poner
la posición de memoria 0000 en 0001 MOV 0000,
1 Poner en 4 la posición de memoria 0001 MOV
0001, 4 Poner en 4 la posición de memoria
0000 MOV 0000, 0001 Guardar el 4 de 0000
en R0 MOV R0, 0000 Guardar el contenido de
R0 en 0002 MOV 0002, R0
8Arquitectura ORGA1 Modos de direccionamiento
Pero con solo esos dos, no puedo interactuar con
la memoria Para eso necesito modos de
direccionamiento mas complicados
Direccionamiento indirecto Destino o fuente son
una constante de 16 bits, que ahora representa
una de mis 65.535 direcciones de memoria, pero en
donde yo antes guardé un puntero. Para indicar
que estoy usando este modo, uso doble corchete.
Por ejemplo Poner la posición de memoria 0000
en 0001 MOV 0000, 1 Guardar un 4 en la
posición de memoria 0001 MOV 0000, 4 Poner
la posición de memoria 0000 en 0002 MOV 0000,
2 Guardar un 4 en la posición de memoria 0002
MOV 0000, 4 Guardar en R0 el contenido de
la posición 4 MOV R0, 0002
9Arquitectura ORGA1 Modos de direccionamiento
Pero con solo esos dos, no puedo interactuar con
la memoria Para eso necesito modos de
direccionamiento mas complicados
Direccionamiento indirecto mediante
registro Destino o fuente son un registro, en
donde guardé un puntero. Es similar al indirecto,
pero utilizando un registro en lugar de una
posición de memoria. También uso corchetes.
Por ejemplo Poner R0 en 0001 MOV R0, 1
Guardar un 4 en la posición de memoria 0001 MOV
R0, 4 Poner R0 en 0002 MOV R0, 2 Guardar
un 4 en la posición de memoria 0002 MOV R0,
4 Guardar en R1 el contenido de la posición
? MOV R1, R0 Guardar en R2 el contenido de la
posición ? MOV R2, R1
10Arquitectura ORGA1 Modos de direccionamiento
Pero con solo esos dos, no puedo interactuar con
la memoria Para eso necesito modos de
direccionamiento mas complicados
Direccionamiento indirecto mediante registro
índice Destino o fuente son un registro, en
donde guardé un puntero, al que le sumo una
constante de 16 bits. Es similar al anterior.
Por ejemplo Poner R0 en 0001 MOV R0, 1
Guardar un 4 en la posición de memoria 0001 MOV
R0, 4 Guardar un 4 en la posición de memoria
0002 MOV R0 1, 4 Guardar en R1 el
contenido de la posición 4 MOV R1, R0 3
11Arquitectura ORGA1
)
Fin del paréntesis sobre modos de
direccionamiento.
Instrucción ADD Formato ADD Destino,
Fuente Hace la operación Destino Fuente, y
guarda el resultado en Destino.
Instrucción SUB Formato SUB Destino,
Fuente Hace la operación Destino - Fuente, y
guarda el resultado en Destino. Para ello
invierte el signo de Fuente y realiza una suma,
pero el valor de Fuente no es alterado por la
operación.
12Arquitectura ORGA1
Instrucción AND Formato AND Destino,
Fuente Hace la operación Destino AND Fuente, y
guarda el resultado en Destino.
Instrucción OR Formato OR Destino, Fuente Hace
la operación Destino OR Fuente, y guarda el
resultado en Destino.
Instrucción NOT Formato NOT Destino Hace la
operación NOT Destino y guarda el resultado en
Destino.
13Arquitectura ORGA1
Instrucción NEG Formato NEG Destino Invierte
el signo de Destino, y guarda el resultado en
Destino.
14Arquitectura ORGA1
Instrucciones de comparación y salto
Instrucción CMP Formato CMP Destino,
Fuente Funciona como si hiciera lo mismo que
SUB Destino, Fuente Pero no altera los
registros. Solo cambia los flags.
Cuáles eran los flags?
Z Zero N Negative C Carry V oVerflow
Todas las instrucciones alteran los flags, menos
MOV y las instrucciones de salto. Tampoco las
alteran CALL y RET, que vamos a ver mas
adelante. C y V quedan siempre en 0, salvo cuando
hacemos ADD, SUB, CMP y NEG.
15Arquitectura ORGA1
La movida de los flags es así
Z Se prende cuando la operación da 0 como
resultado. Por ejemplo MOV R0, 0 ADD R0,
0 MOV R1, 0 SUB R0, R1 MOV R0, 4 CMP R0,
4 o SUB R0, 4 NEG 0
16Arquitectura ORGA1
La movida de los flags es así
N Está cableada al bit mas significativo del
resultado. Prendería con MOV R0, 0 ADD R0,
8000 MOV R0, 0 SUB R0, 4 NEG 1
17Arquitectura ORGA1
La movida de los flags es así
C Se prende cuando hay carry. Por ejemplo MOV
R0, 7FFF ADD R0, 000F
V Se prende cuando hay oVerflow. Prendería
con MOV R0, 7FFF ADD R0, 000F
18Arquitectura ORGA1
Leyendo estos flags es que podemos implementar
las instrucciones de salto
Jxx Destino Destino es una dirección de memoria
19Arquitectura ORGA1
CALL y RET
Llamado a función CALL Destino Guarda en el
stack la dirección de memoria de la próxima
instrucción, y salta incondicionalmente a Destino.
Fin de función RET Saca del tope del stack
una dirección de memoria, y salta
incondicionalmente a ella.
(Si quieren explico el stack en el pizarrón)
20Arquitectura ORGA1
Etiquetas Básicamente donde decía una
dirección de memoria, para hacer código
humanamente legible podemos poner una
etiqueta. Por ejemplo MOV R0, 0 Ciclo ADD
R0, 1 CMP R0, 000F JLEU Ciclo RET JMP
Inicio Valor DW 0A0A (DW es define word,
quiere decir que lo sigue va a la
memoria) Inicio MOV R0, Valor ADD R0,
000F MOV Valor, R0 RET