Graficacion
Graficacion
Graficacion
Ensamblador
Ensamblador
Ensamblador
BIBLIOGRAFÍA
SP Puntero de pila.
BP Puntero base.
Las funciones internas del procesador 8086 se repartieron lógicamente en dos unidades
de procesamiento. La primera es la unidad de interfaz de bus (BIU) y el segundo es la Unidad de
Ejecución (UE) como se muestra en el diagrama de bloques.
Estas unidades pueden interactuar directamente, pero en su mayor parte funciona como
procesadores operacionales asincrónicas separadas. La unidad de interfaz de bus proporciona las
funciones relacionadas con la instrucción de ir a buscar y hacer cola (Instruction code),
recuperación de operando y almacenar, además de reubicación de direcciones. Esta unidad
también proporciona el control básico de bus. La superposición de la instrucción pre-fetching
proporcionado por esta unidad sirve para aumentar el rendimiento del procesador mediante una
mejor utilización de ancho de banda. Hasta 6 bytes del flujo de instrucciones pueden poner en cola
a la espera de decodificación y ejecución. El mecanismo de la instrucción de cola permite que el
flujo de BIU mantenga la memoria utilizada de manera muy eficiente. Siempre hay espacio para al
menos 2 bytes en la cola. Esto reduce en gran medida '' tiempo muerto '' en el bus de memoria. La
cola actúa como First-In-First-Out (FIFO), de la que la UE extrae bytes de instrucción como sea
necesario. Si la cola está vacía (después de una instrucción de salto, por ejemplo), el primer byte
en la cola se convierte de inmediato a disposición de la UE. La unidad de ejecución recibe
instrucciones pre-inverosímiles de la cola de BIU y proporciona direcciones de operando
reubicados a la BIU. Operandos de memoria se pasan a través de la BIU para su procesamiento
por la UE, que pasa los resultados a la BIU para el almacenamiento.
El procesador proporciona una dirección de 20 bits a la memoria que localiza el byte que
se hace referencia. La memoria está organizada como una serie lineal de hasta 1 millón de bytes,
se dirigió como 00000 (H) para FFFFF (H). La memoria se divide lógicamente en código, datos,
datos adicionales, y los segmentos de pila de hasta 64K bytes cada uno, con cada segmento de la
caída en los límites de 16 bytes.
Todas las referencias de memoria se hacen en relación con direcciones base contenidas
en registros de segmento de alta velocidad. Los tipos de segmento se eligieron sobre la base de
las necesidades de direccionamiento de programas. El segmento de registro de ser seleccionado
se elige automáticamente de acuerdo con las reglas de la tabla anterior.
En referencia a los datos de la palabra la BIU requiere uno o dos ciclos de memoria en función de
si el byte inicial de la palabra está en una dirección par o impar, respectivamente. En
consecuencia, en referencia a operandos de palabra rendimiento puede optimizarse mediante la
localización de los datos incluso en los límites de direcciones. Esta es una técnica especialmente
útil para el uso de la pila, ya que las referencias de direcciones extrañas a la pila pueden afectar
negativamente el tiempo el cambio de contexto para el procesamiento de interrupción o
multiplexación de tareas.
Ciertos lugares de memoria están reservados para las operaciones de CPU específicos anterior.
Ubicaciones de dirección FFFF0h través FFFFFH están reservados para las operaciones, incluido
un salto a la rutina de carga inicial del programa. Después de RESET, la CPU siempre comenzará
la ejecución en lugar FFFF0h donde el salto debe ser. Ubicaciones 00000h través 003FFH están
reservados para las operaciones de interrupción. Cada uno de los 256 posibles tipos de
interrupción tiene su rutina de servicio a la que apunta un elemento de puntero 4-byte que consiste
en un segmento de dirección de 16 bits y una dirección de desplazamiento de 16 bits. Los
elementos punteros se supone que han sido almacenados en los lugares respectivos en memoria
reservada antes de la ocurrencia de interrupciones.
Para poder practicar estos ejercicios, te proporcionamos un CD con los programas que deberás de
instalar en tu equipo de computo, como lo son DosBox (emulador del sistema operativo MsDos), el
editor de textos (ya que este no se agrega al instalar el emulador), TASM (Turbo Ansambler de
Borlan), además si decides usar android instalarás aDosbox.
Copiamos la carpeta TASM en c:/ (Está en el CD), en caso de Android la copiamos en la tarjeta
local del dispositivo.
Usamos por ejemplo el Bloc de notas para transcribir nuestro programa y lo guardamos en la
siguiente ruta: C:\TASM\BIN para android seria en \storage\sdcard0\TASM\BIN
En consola vamos a la carpeta BIN y desde ahí ensamblamos, enlazamos y ejecutamos nuestro
programa
OBJ
TASM MAP TLINK
LIST
Los ficheros fuentes de ensamblador se escriben siempre pensando en cuatro columnas, en donde
la primera es para etiquetas y directivas, la segunda operaciones, la tercera operandos y la cuarta
los comentarios:
Modelo de Registros
MOV1 Notas
.model tiny ; directiva de modelo de programación
.stack ; directiva de asignación de segmento de stack
.data ; directiva de asignación de segmento de datos
.code ; directiva de asignación de segmento de datos
start: ; inicio de programa
MOV AX,0005H
MOV BX,100AH
MOV CX,0005H
MOV DX,100AH
MOV2 Notas
.model tiny ; directiva de modelo de programación
.stack ; directiva de asignación de segmento de stack
.data ; directiva de asignación de segmento de datos
.code ; directiva de asignación de segmento de datos
start: ; inicio de programa
MOV AX,0005H
MOV BX,100AH
MOV ax,bx
MOV AX,0005H
MOV BX,000AH
XCHG AX,BX ; INTERCAMBIA EL CONTENIDO DE
;LOS REGISTROS
BH 15H
BL 0BH
EJEMPLO 2:
INC Notas
.model tiny ; directiva de modelo de programación
.stack ; directiva de asignación de segmento de stack
.data ; directiva de asignación de segmento de datos
.code ; directiva de asignación de segmento de datos
start: ; inicio de programa
MOV AX,0010H
INC AX
ACTIVIDAD 2:
ACTIVIDAD 3:
DS:[20,21,22,23, Y 24]
EJEMPLO 3:
DIRECCIONAMIENTO AL DS Notas
.model tiny ; directiva de modelo de programación
.stack ; directiva de asignación de segmento de stack
.data ; directiva de asignación de segmento de datos
.code ; directiva de asignación de segmento de datos
start: ; inicio de programa
MOV AX,DS:[000Ah]
;MUEVE LO QUE ESTA EN DS CON OFFSET 000AH
;TOMA EL 10 EN LOW Y LUEGO EL 11 HIGH
MOV AL,[si+2]
;MUEVE LO QUE ESTA EN DS CON OFFSET 0,1,2
BP Notas
.model tiny ; directiva de modelo de programación
.stack ; directiva de asignación de segmento de stack
.data ; directiva de asignación de segmento de datos
.code ; directiva de asignación de segmento de datos
start: ; inicio de programa
MOV AX,10
MOV SS:[BP],AX
;MUEVE A LA PILA EL DESPLAZAMIENTO EN BP
ACTIVIDAD 4:
AX <- H90
ACTIVIDAD 5:
EJEMPLO 4:
CALL Notas
.model tiny ; directiva de modelo de programación
.stack ; directiva de asignación de segmento de stack
.data ; directiva de asignación de segmento de datos
.code ; directiva de asignación de segmento de datos
start:
begin PROC FAR; INICIO DE PROCEDIMIENTO BEGIN
MOV CX,000AH
MOV BX,0000H
BOOLEANAS Notas
.model tiny ; directiva de modelo de programación
.stack ; directiva de asignación de segmento de stack
.data ; directiva de asignación de segmento de datos
.code ; directiva de asignación de segmento de datos
start: ; inicio de programa
MOV AX,0105H
MOV BX,0505H
MOV CX,0505H
AND AL,BL
OR AH,BH
XOR AX,BX
TEST CH,00001111B
;EFECTUA LA OPERACION AND
;CAMBIAR EL CONTENIDO DEL REGISTRO Z=0
MOV AX,0105H
MOV BX,0505H
MOV CX,0505H
ADD AL,BL
SUB AH,BH
MUL AX
ACTIVIDAD 6:
ACTIVIDAD 7:
USAR SUMAS
MOV AX,4C00H
INT 21H
EJEMPLO 5:
ACTIVIDAD 8:
EJEMPLO 6:
MOV AH,0AH
LEA DX,ENT
INT 21H
ACTIVIDAD 9:
320
200 PIXELES
------------------------------------------------------63399
320 PIXELES
(0,0) (319,0)
APROX. (99,69)
Asi pués: cada byte representa 4 pixeles( 2 bits por pixel ) limitado a 4 colores
debido a que 1 pixel usa 2 bits y las combinaciones solo son 4.
CALL PAUSA
CALL PAUSA
MOV AH,00H
;PETICIÓN PARA HABILITAR MODO VIDEO
MOV AL,04H; 320 X 200 EGA, VGA
INT 10H
CALL PAUSA
RECTÁNGULO NOTAS
.model tiny ; directiva de modelo de programación
.stack ; directiva de asignación de segmento de stack
.data ; directiva de asignación de segmento de datos
.code ; directiva de asignación de segmento de datos
start:
begin PROC FAR; INICIO DE PROCEDIMIENTO BEGIN
MOV AH,00H
; PETICIÓN PARA HABILITAR MODO VIDEO
MOV AL,04H; 320 X 200 EGA, VGA
INT 10H
CALL PAUSA
ACTIVIDAD 10:
DISEÑAR UN TRAPECIO
LINEA DE PIXELES
output: delay
destroys:
EJEMPLO 8:
ANIMACIÓN NOTAS
.model tiny ; directiva de modelo de programación
.stack ; directiva de asignación de segmento de stack
.data ; directiva de asignación de segmento de datos
.code ; directiva de asignación de segmento de datos
start:
begin PROC FAR; INICIO DE PROCEDIMIENTO BEGIN
MOV AH,00H
;PETICIÓN PARA HABILITAR MODO VIDEO
MOV AL,04H; 320 X 200 EGA, VGA
INT 10H
MOV DX,100
INC BX
MOV CX,BX
;INCREMENTA POSICIÓN EN X
CMP CX, 200 ;HASTA LA POSICIÓN 200
JNE RE
CALL PAUSA
ACTIVIDAD 12:
MOV AH,00H
; PETICIÓN PARA HABILITAR MODO VIDEO
MOV AL,04H; 320 X 200 EGA, VGA
INT 10H
RE:
MOV AH,07H
; ALMACENA DATO SIN ECO Y MANDA DATO A AL
INT 21H
CMP AL,32H
JE izq
CMP AL,33H
JE der
CMP AL,35H
JE sal
izq:
CALL LIMPIA
JMP re
der:
CALL LIMPIA
CALL SONIDO
JMP re
sal:
MOV AH,00H; REGRESAMOS AL MODO TEXTO
MOV AL,03H
INT 10H
SONIDO ENDP
SONIDO
El alumno se hace de una referencia con una hoja de texto, en donde ubica cada pixel que pintará
con las interrupciones además lo dibuja a mano.
http://www.ece.cmu.edu/~ece740/f11/lib/exe/fetch.php?media=wiki:8086-datasheet.pdf
Intel family user´s manual october 1979
http://www.fing.edu.uy/inco/cursos/arqsis2/teorico/notas-8086.pdf
http://pdf.datasheetcatalog.com/datasheets/2300/499305_DS.pdf
http://matthieu.benoit.free.fr/
http://www.abreojosensamblador.net/