fundamentos_de_programacion 8086

22
UNIVERSIDAD NACIONAL DE SAN AGUSTIN FACULTAD DE INGENIERIA DE PRODUCCIÓN Y SERVICIOS DEPARTAMENTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMÁTICA ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS Curso: Arquitectura de Computadoras Segundo Trabajo sobre: <Componentes de Computadoras> PRESENTADO POR: < Velasco Añasco Hossmell >

Upload: hossmell-velasco

Post on 05-Jul-2015

1.220 views

Category:

Documents


13 download

TRANSCRIPT

Page 1: Fundamentos_de_Programacion 8086

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

FACULTAD DE INGENIERIA DE PRODUCCIÓN Y SERVICIOS

DEPARTAMENTO ACADEMICO DE INGENIERIA DE SISTEMAS E INFORMÁTICA

ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Curso:

Arquitectura de Computadoras

Segundo Trabajo sobre:

<Componentes de Computadoras>

PRESENTADO POR:

< Velasco Añasco Hossmell >

Page 2: Fundamentos_de_Programacion 8086

U.N.S.A F.I.P.S

ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS

CURSO: ARQUITECTURA DE COMPUTADORAS

SEGUNDA PRÁCTICA DE LABORATORIO

FUNDAMENTOS DE PROGRAMACIÓN DEL 8086

I. OBJETIVOS

Identificar los principales elementos que conforman el Ambiente Integrado de Programación

(IDE) del programa EMU8086.

Identificar los registros del modelo de programación del 8086.

Observar la relación que existe entre los lenguajes de ensamblador y máquina.

Reconocer los modos de direccionamiento básicos del micro 8086.

Imprimir un carácter en la pantalla de usuario, modificando sus parámetros.

Utilizar el emulador en la creación y ejecución un archivo tipo COM.

II. CUESTIONARIO PREVIO

1. Defina los siguientes términos //glosario de los terminos 10

a) Lenguaje máquina

-Lenguaje de máquina es el sistema de códigos directamente interpretable por un circuito micro

programable, como el microprocesador de una computadora o el microcontrolador de un autómata (un

PLC) . Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones a ser

tomadas por la máquina. Un programa de computadora consiste en una cadena de estas instrucciones de

lenguaje de máquina (más los datos). Estas instrucciones son normalmente ejecutadas en secuencia, con

eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de máquina

es específico de cada máquina o arquitectura de la máquina, aunque el conjunto de instrucciones

disponibles pueda ser similar entre ellas.

El lenguaje máquina es el único lenguaje que puede ejecutar una computadora. El lenguaje de máquina es

un código que es interpretado directamente por el microprocesador.

Todo código fuente en última instancia debe llevarse

un lenguaje máquina mediante el proceso decompilación o

Interpretación para que la computadora pueda ejecutarlo.

La Segmentación de memoria es un esquema de manejo de memoria mediante el cual la estructura del

Page 3: Fundamentos_de_Programacion 8086

programa refleja su división lógica; llevándose a cabo una agrupación lógica de la información en bloques

de tamaño variable denominados segmentos.

Cada uno de ellos tienen información lógica del programa: subrutina, arreglo, etc. Luego, cada espacio de

direcciones de programa consiste de una colección de segmentos, que generalmente reflejan la división

lógica del programa.

Obviamente este sistema de gestión de memoria es utilizado en Sistemas operativos avanzados, pero ya

existían muestras de su actividad desde los S.O.’s Unix y D.O.S

b) Interrupción

El sistema de interrupciones para un programador consiste en un conjunto de posiciones de memoria

comenzando en la dirección absoluta de memoria 0, que contienen, cada dos palabras, una dirección de

salto a una rutina de atención a la interrupción. (la dirección 0 corresponde a la interrupción 0, la dirección

2 a la interrupción 1, etc). Cuando se invoca una interrupción, sea física, por algún dispositivo, o lógica,

algún error de ejecución o invocación de programa, el mecanismo de atención toma de la dirección

correspondiente que le indica el número de interrupción, la dirección destino del salto y obtiene de allí la

siguiente instrucción a ejecutar. Para crear una rutina de atención a determinada interrupción, el

programador tiene que localizar el programa en memoria y luego almacenar en la posición de la

interrupción correspondiente la dirección de comienzo del mismo. Naturalmente escribir una rutina de

interrupción obliga a respetar ciertos protocolos.

c) Bifurcación

Una bifurcación, rama o fork en el ámbito de desarrollo de software, es la creación de un proyecto en una

dirección distinta de la principal u oficial tomando el código del proyecto ya existente. Comúnmente se

utiliza el término inglés.

Una bifurcación o fork, cuando se aplica en el contexto de un lenguaje de programación o un sistema

operativo, hace referencia a la creación de una copia de sí mismo por parte de un programa, que entonces

actúa como un "proceso hijo" del proceso originario, ahora llamado "padre".

d) Bifurcación condicional

la bifurcación condicional permite someter a prueba condiciones y, a continuación, en función del resultado

de la prueba, realizar distintas operaciones. Visual FoxPro ofrece dos comandos que permiten realizar una

bifurcación condicional:

IF ELSE IF ENDIF.

Page 4: Fundamentos_de_Programacion 8086

e) Puntero

El puntero es un herramienta que se utiliza para señalar un punto o región de la memoria.

Un puntero o apuntador es una variable que referencia una región de memoria; en otras palabras es una

variable cuyo valor es una dirección de memoria

f) Pila

Es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del

inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos. Se

aplica en multitud de ocasiones en informática debido a su simplicidad y ordenación implícita en la propia

estructura.

Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la

pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado.

g) Acceso a memoria

El acceso directo a memoria es una características de las computadoras microprocesadores modernos que

permite que ciertos subsistemas de hardware dentro de la computadora puedan acceder a

la memoria del sistema para la lectura y/o escritura, independientemente de la unidad central de

procesamiento (CPU). De lo contrario, la CPU tendría que copiar cada porción de dato desde él

origen hacia el destino, haciendo que ésta no esté disponible para otras tareas.

EN Aquellas computadoras que tienen canales DMA pueden transferir datos desde y hacia los dispositivos

con menos utilización de CPU que aquellas computadoras sin canales DMA. Básicamente una transferencia

DMA consiste en copiar un bloque de memoria de un dispositivo a otro. Esa transferencia se lleva a cabo

por el controlador DMA, en lugar del CPU. El controlador DMA es generalmente un chipset de la placa

madre.

h) Tipos de variables

es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase

de datos sobre los que se va a procesar. Esto incluye imponer restricciones en los datos, como qué valores

pueden tomar y qué operaciones se pueden realizar. Tipos de datos comunes son: enteros, números

de coma flotante (decimales), cadenas alfanuméricas, fechas, horas, colores, coches o cualquier cosa que se

nos ocurra.

i) Macro

es una serie de instrucciones que se almacenan para que se puedan ejecutar de forma secuencial mediante

una sola llamada u orden de ejecución.

Page 5: Fundamentos_de_Programacion 8086

Con el fin de evitar al programador la tediosa repetición de partes idénticas de un programa,

los ensambladores y compiladores cuentan con macroprocesadores que permiten definir una abreviatura

para representar una parte de un programa y utilizar esa abreviatura cuantas veces sea necesario. Para

utilizar una macro, primero hay que declararla. En la declaración se establece el nombre que se le dará a la

macro y el conjunto de instrucciones que representará.

2. Utilizando cualquier editor de programación, identifique en la opción memoria los

segmentos de memoria disponibles y sus tamaños por defecto

//programación estruncturada buscar a lo que esa memoria

3. Explique claramente la diferencia entre un programa COM y un EXE, cual de ellos se

ejecuta más rápidamente, ¿Porqué?

Los programas .EXE es una extensión que se refiere a un archivo ejecutable de código re ubicable y los

programas.COM son es un tipo simple de fichero ejecutable.

Para MS-DOS sólo existen dos tipo de archivos ejecutables los .COM y .EXE. Ambos archivos difieren en

algunas cosas. Primero, las ventajas de los .EXE son dobles,tiene lo que se llama PSP o program segment

prefix que es una cabecera nos permiten tener archivos reubicables y el uso de hasta cuatro segmentos

(STACK, DATA, EXTRA y CODE) de hasta 64KB cada uno.

Un archivo .COM sólo puede tener un segmento de 64KB, en el que se tiene tanto código como pila, y

datos. La desventaja de los .EXE es que agrega n 512 bytes como cabecera con información para la

reubicación del código. Un .COM no es reubicable, siempre inicia en la dirección 0100H.

La Que se ejecuta mas rapido es la .com por que su direccion es unica.

4. Visite la página www.emu8086.com, luego de revisar la documentación proporcionada, de

una breve explicación de su objetivo y funcionalidad (en línea hay manuales en español)

Page 6: Fundamentos_de_Programacion 8086

Es un programa que permite desarrollar la programación en lenguaje ensamblador de forma muy intuitiva,

también brinda una serie de recursos que permite ejecutar y depurar programas.

Dentro de los lenguajes ensamblador que se puede desarrollar tenemos: COM template, EXE template,

BIN template y BOOT template .

III. MARCO TEÓRICO

El microprocesador 8088/8086.//paralelismo

Microprocesador de 8 bits, primero en presentar un diseño estructural, hecho pensando en las

necesidades del usuario (aplicaciones), aparece en junio de 1978, fabricado por Intel, el 8086

aparece casi en simultáneo siendo el primer uprocesador de 16 bits

Características técnicas:

– Bus de datos interno: 16 bits

– Bus de datos externo: 16 bits

– Bus de direcciones: 20 bit

– Velocidad: 4.77-8 MHz

– 92 instrucciones

– 7 modos de direccionamiento

– El 8086 es up de 16 bits, en su estructura como en conexiones externas

– 8088 es un procesador de 8 bits que internamente es casi idéntico al 8086. La única

diferencia entre ambos es el tamaño del bus de datos externo

– Cada procesador tiene dos sub-procesadores: unidad de ejecución (EU: Execution Unit) y

unidad interfaz del bus (BIU: Bus Interface Unit). La unidad de ejecución realiza

operaciones mientras que la unidad de interfaz del bus es la encargada de acceder a datos e

instrucciones

– Las unidades de ejecución son idénticas en ambos microprocesadores, pero las unidades de

interfaz del bus son diferentes en varias cuestiones. La ventaja de esta división fue el ahorro

de esfuerzo necesario para producir el 8088. Sólo una mitad del 8086 (el BIU) tuvo que

rediseñarse para producir el 8088.

– Arquitectura interna de 16 bits

– Soporta 1 MB de memoria

– Aritmética con signo y sin signo de 8 y 16 bits, tanto en binario como en decimal,

incluyendo multiplicación y división.

– 14 registros de 16 bits.

– Interrupción enmascarable y no enmascarable.

– Acceso directo a memoria

– Soporte para coprocesadores de bus local.

– Soporte para E/S mapeada en memoria.

Page 7: Fundamentos_de_Programacion 8086

– Operaciones de cadena.

Se muestra la estructura interna del 8088

Unidad Aritmética Lógica: Realiza operaciones aritméticas y lógicas. Las operaciones pueden ser

de 16 bits o de 8 bits.

Sistema de Control de EU: Decodifica instrucciones que le envía la cola y genera órdenes según

tabla que tiene almacenada en ROM llamada CROM (Control Read Only Memory).

Cola de Instrucciones: Almacena instrucciones a ser ejecutadas, se carga cuando el bus está

desocupado (La del 8086 tiene 6 bytes, el del 8088 tiene cuatro bytes).

Registros de trabajo: El microprocesador 8088, posee 14 registros internos, distribuidos en las dos

unidades especificadas, algunos son de uso general, otros de segmento, registros puntero y registro

de banderas o flags.

Page 8: Fundamentos_de_Programacion 8086

Los REGISTROS GENERALES son registros de 16 bits, pudiéndose usar cada uno de ellos como

dos registros de 8 bits. Aun siendo registros de uso general tiene asignadas unas operaciones

específicas.

AX es el acumulador de 16 bits y usándolo a veces provoca que el ensamblador produzca un

lenguaje máquina codificado en muy pocos octetos. Se emplea en multiplicaciones,

divisiones, entradas/salidas, etc., además AL es el acumulador de 8 bits

BX se utiliza como registro base para el direccionamiento de memoria

CX se utiliza como contador y almacenaje de datos

DX se utiliza para almacenar datos de 16 bits. Puede pensarse que es una extensión del

registro AX para multiplicaciones y divisiones con 16 bits. Otra de sus funciones específicas

es para almacenar la dirección de E/S durante algunas operaciones de E/S.

Los REGISTROS PUNTERO son registros de 16 bits:

IP (instruction pointer) como registro puntero de instrucciones conocido principalmente

como contador de programa. Este contiene un valor de 16 bits que es un desplazamiento

sobre la dirección del registro CS ( segmento de código ) detallado más adelante.

SP (stack pointer) como registro de pila.

BP (base pointer) actúa como base de la dirección de la pila.

Los registros puntero de instrucciones ( IP ) y puntero de pila ( SP ) se encargan del control de flujo

del programa.

Page 9: Fundamentos_de_Programacion 8086

Los registros SI (source index) y DI (destine index) actúan como índices asociados al

registro DS ( segmento de datos ).

El grupo de registros de segmento está formado por los registros CS, SS, DS y ES. Apuntan al

inicio de un área de memoria destinada a almacenar información específica:

CS ( segmento de código ): código del programa

DS ( segmento de datos ): datos del programa

SS ( segmento de pila ): pila para almacenamiento local y temporal

ES (segmento extra ): almacenamiento extra para textos, menús y estructuras estáticas

La importancia de dichos registros queda reflejada en la estructura de la memoria con la técnica de

segmentación, que principalmente radica en el que el espacio total de memoria se divide en trozos

de 64K bytes, que reciben el nombre de “segmentos”.

El REGISTRO DE ESTADO (F) de 16 bits, aunque algunos de ellos no se utilizan. Cada uno de los

bits se denomina indicador o flag, que generalmente, se modifican por las operaciones lógicas y

aritméticas.

CF Carry Flag: indica que hubo "arrastre"

CS

DS

SS

ES

00000

FFFFF

SEGMENTOCODIGO

SEGMENTOEXTRA

SEGMENTODE DATOS

SEGMENTOEXTRA

Page 10: Fundamentos_de_Programacion 8086

PF Parity Flag: paridad impar del resultado, se usa para detectar errores en transmisiones.

ZF Zero Flag: si resultado de la operación es cero.

AF Auxiliary carry: indica "arrastre" del nibble (cuatro bits) menos significativo al nibble

más significativo. Para BCD.

SF Sign Flag: bit más significativo de resultado. representa el signo: 0 si es positivo, 1 si es

negativo.

TF Trap Flag: Si vale 1, el procesador está en modo paso a paso. En este modo, la CPU

automáticamente genera una interrupción interna después de cada instrucción, permitiendo

inspeccionar los resultados del programa a medida que se ejecuta instrucción por

instrucción. .

IF Interrupt Flag: Si vale 1, la CPU reconoce pedidos de interrupción externas

enmascarables (por el pin INTR). Si vale 0, no se reconocen tales interrupciones. Las

interrupciones no enmascarables y las internas siempre se reconocen independientemente

del valor de IF.

DF Direction Flag: Si vale 1, las instrucciones con cadenas sufrirán "auto-decremento",

esto es, se procesarán las cadenas desde las direcciones más altas de memoria hacia las más

bajas. Si vale 0, habrá "auto-incremento", lo que quiere decir que las cadenas se procesarán

de "izquierda a derecha".

OF Overflow flag: Si vale 1, hubo un desborde en una operación aritmética con signo, esto

es, un dígito significativo se perdió debido a que tamaño del resultado es mayor que el

tamaño del destino.

Memoria segmentada

La forma en que se completan los 20 bits requeridos por el bus de direcciones, disponiendo en la

CPU, solamente, registros de 16 bits, se consigue de la siguiente manera: se parte del contenido de

uno de los registros de segmento, que actúan como base. Después, se multiplica por 16 el contenido

del registro de segmento, lo que, en binario, significa añadirle 4 ceros a la derecha y convertirlo en

una magnitud de 20 bits. Finalmente, se suma un desplazamiento al resultado de la multiplicación

anterior. La fórmula para calcular una dirección de memoria es:

Dirección Física = 16 * ( registro de segmento ) + desplazamiento.

Juego de instrucciones

Conjunto de códigos binarios que reconoce el uP y ejecuta

Page 11: Fundamentos_de_Programacion 8086

Formato de instrucciones del 8088

Clasificación:

a) Por el número de operandos:

• Sin operando Ejemplo: STI, CLC, HALT

• Con un operando. Ejemplo: INC CX, DEC AL, JMP 07H

• Con dos operandos. Ejemplo: MOV AX,CX ADD AL,28H

b) Por el tipo de operación:

• Transferencia: MOV, PUSH, POP, etc

• Aritméticas: ADD, ADC, SUB, DIV, etc

• Lógicas: CMP, AND, XOR, etc

• Manipulación de cadenas: MOVS. COMPS, etc

• Control del procesador: HALT, CLI, STC, etc

• Control de programa: JMP, JNZ, JE, etc

Ver el juego de instrucciones en el anexo

Modos de direccionamiento

Formas de referenciar al segundo operando

a) Directo:

El campo de direcciones contiene la dirección del operando

Ejemplo: MOV AX,[2315H]

b) Por valor: ADD CX, DATA

La localidad de memoria apuntada por el campo de dirección de la instrucción contiene la

dirección (apuntador) al operando, EA = (A), Busca en A, encuentra la dirección (A) y ahí

busca el operando

c) Por registro:

Cod-op d w mod reg r/m Data o adress Data o adress

1er byte

obligatorio

2do byte

opcional

3er byte

opcional

4to byte

opcional

Page 12: Fundamentos_de_Programacion 8086

El operando está en el registro nombrado en el campo dirección

Ejemplo: ADD AX,BX

d) Inmediato

El operando es parte de la instrucción

e) Relativo a base XOR AL,[BX+12H]

f) Indexado a base

A = base, R = desplazamiento, EA = A + R

Ejemplo: AND CL,[BP+DI]

g) Directo indexado

Ejemplo: CMP BL,[SI+2312H]

III. ACTIVIDADES

1. Ejecute el EMU 8086

2. Presione el botón que indica “New”.

3. Observará una ventana donde escribirá sus futuros programas, llamados en general “código

fuente”.

4. Desde ahí se puede crear un nuevo documento. Observe la figura “Choose code template” ,

elija “empty workspace”.

Page 13: Fundamentos_de_Programacion 8086

5. Seleccione en la barra de menú la opción “EMULATOR” y en ésta “SHOW

EMULATOR”. Se abrirá una ventana donde podrá observar diferentes elementos: cargar

(load), recargar (reload), ejecutar paso a paso (single step) y ejecutar (run). También podrá

ver, en la parte central, tres columnas en las que se detalla el contenido de los registros del

8086, el contenido de la memoria y el programa desensamblado.

Abajo podrá acceder a la pantalla de usuario (user screen),

Page 14: Fundamentos_de_Programacion 8086

el código fuente (actual source),

la Unidad Aritmética y Lógica (ALU), (FPU), memoria en la opción vars

Page 15: Fundamentos_de_Programacion 8086

Las variables

la Pila (stack), un debug y el registro de banderas (flags) o estados.

Cierre la ventana del emulador, pero no cierre la ventana del código fuente.

6. Escriba el programa mostrado, analize su función

.model small

.stack

.data

.code

mov AX,@data ;carga en DS la dirección ;donde está el

mov ds,ax ;segmento de datos

mov AH, 7Ah ;carga AH con 7Ah

mov BL, 99 ;carga BL con 99

mov CL, 11001111b ;carga CL con 11001111b

Page 16: Fundamentos_de_Programacion 8086

mov AX, 100 ;carga AX con 100

mov BX, 'A' ;carga BX con carácter A

mov CX, 0ABCDh ;carga CX con ABCDh

mov DX, 6540 ;carga DX, con 6540

mov ax, 4c00h ;fin del programa

int 21h

end

7. Compile el programa usando el menú, el programa le informará la creación de un COM o

EXE (Ud. indique) , asígnele un nombre al programa

8. Emule el programa, verá marcada la instrucción que se ejecuta, el contenido de los registros,

la memoria y el programa desensamblado

9. Llene los datos antes de la ejecución

AX:00 00 BX:00 00 CX:01 1C DX:00 00

CS:0720 DS:0700 ES:0700 SS:0710

BP:0000 IP:0000 SP:0100

DI:0000 SI:0000

10. Presione RUN y anote los resultados, ¿porqué se obtienen estos?

AX:4C 00 BX:0041 CX:ABCD DX:198C

CS:F400 DS:0720 ES:0700 SS:0710

BP:0000 IP:0204 SP:00FA

DI:0000 SI:0000

Page 17: Fundamentos_de_Programacion 8086

11. Cargue nuevamente el programa y ejecútelo paso a paso SINGLE STEP, explique los

resultados que va obteniendo, ponga atención especial en CS e IP

CS 0720 0720 0720 0720 0720 0720

IP 0003 0005 0007 0009 000B 000E

12. Complete la tabla

direccion direccion lenguaje maquina Lenguaje ensamblador

Seg(cs) offset campo campo campo linea

0720 0005 B4 7A Mov AH,7

0705 0007 B3 63 Mov BL,99

0720 0009 B1 Cf Mov CL,11001111b

0720 000b B8 64 00 Mov AX,100

0720 000E bb 41 00 Mov BX,78

0720 0011 B9 cd Ab mov CX,0ABCDh

0720 0014 ba 8c 19 Mov DX,6540

Apartir de Esta parte Se hace Con las interrupciones

0720 0017 B8 00 4c Mov AX,4C00h

0720 001A cd 21 Int 21h

13. Cierre el emulador y cree ahora el siguientes programa

.model small

.stack

.data

.code

MOV AX,@data

MOV DS,AX

MOV DX, 0112h ; Carga dato inmediato en DX

MOV BX, DX ; Copia DX en BX, movimiento entre

;registros

MOV AL, 'A' ; Almacena carácter en AL

MOV AH, 61h ; Guarda dato en AH

MOV [BX], AH ; Almacena en dirección indicada por

; DS:BX, indirecto

MOV [BX+1], AL ; Almacena dato relativo a base:

; DS:BX+1

MOV CX, [BX] ; Copia el dato de la dirección en CX

;registro, indirecto

mov ax, 4c00h ;fin del programa

Page 18: Fundamentos_de_Programacion 8086

int 21h

end

14. Emule el programa y antes de ejecutarlo anote en la tabla el contenido de las direcciones con

desplazamiento 0112H y 0113H, así como el contenido de CX, luego ejecute paso a paso

anotando resultados en ambas tablas según se solicita

seg offset Inicio

programa

Antes de 5 Despues 5 Despues 6 Despues 7

0112h B8 20 07 B041 B461 8827 884701

0113h B8 20 07 B041 B461 8827 884701

registro cx 011A 011A 011A 011A 011A

direccion Lenguaje de maquina Lenguaje de Ensamblador

seg offset campo campo linea linea

0720 0000 B8 20 Mov ax 00720h

0720 0003 8e D8 Mov ds Ax

0720 0005 BA 13 Mov DX 0013h

0720 0008 8b da Mov BX Dx

0720 000a B0 41 Mov AL 041

0720 000c B4 61 Mov AH 061h

15. Cierre el emulador y escriba ahora el tercer programa

16. Emule y ejecute, observe la información en la pantalla de usuario, describa la misma e

indique las diferencias obtenidas

Page 19: Fundamentos_de_Programacion 8086

cambia las direcciones iniciales nos muestra la letra A por screem.

17. Modifique el programa sustituyendo el dato en BX por 10Eh, corra el programa, que ha

sucedido

muestra la letra „A‟ a un costado del screem.

18. Modifique ahora el dato almacenado en CH, cambiándolo por 11010000b y observe su

efecto, anote sus observaciones.

muestra el fondo de la letra en blanco.

19. Vuelva a cambiar CH, ahora por 10011110b, observe y describa el cambio.

muestra el fondo de la letra en amarillo.

20. Pruebe a hacer algunos cambios en CH, CL y BX, anote sus observaciones:

si ponemos ch=11111111b no muestra nada de la letra.

si ponemos ch=00000000h no mestra nada en el screem.

21. Para cada instrucción usada en los tres programas, identifique el modo de direccionamiento

de cada uno.

primero ejemplo:

mov AX,@data ;por dato

mov ds,ax ;por dato

mov AH, 7Ah ;por regsitro

mov BL, 99 ;por registro

mov CL, 11001111b ;po registro

mov AX, 100 ;por registro

mov BX, 'A' ;por registro

mov CX, 0ABCDh ;por registro

mov DX, 6540 ;por registro

mov ax, 4c00h ;por registro

int 21h

Page 20: Fundamentos_de_Programacion 8086

segundo ejemplo:

MOV AX,@data por dato;

MOV DS,AX

MOV DX, 0112h ; por dato

MOV BX, DX ; por registro

MOV AL, 'A' ; por dato

MOV AH, 61h ; por dato

MOV [BX], AH ; directo

MOV [BX+1], AL ; relativo a base

MOV CX, [BX] ;indexado a base

para el tercero:

MOV AX,0B800h :por registro

MOV DS,AX :por registro

MOV CL, 'A' :por registro

MOV CH,11011111b :por registro

MOV BX,15E0h por registro

MOV [BX],CX indexado a base

IV. CUESTIONARIO

1. En el encabezado del primer programa ¿por qué se incluye la línea “org 100h”?

-Es un requerimiento para poder correrlo sin problemas, es una dirección inicial del

programa .

2. Al introducir datos en los registros del microprocesador se usan diferentes formatos (bases

de numeración) ¿cuántos y cuáles son?

byte ,Word deword,qword,tword.

3. La sintaxis de la instrucción MOV define tres campos: instrucción, dato1 y dato2. Al

moverse los datos ¿cuál es la fuente y cual el destino?

la fuente es el dato2.

el destino es dato1.

Page 21: Fundamentos_de_Programacion 8086

4. Al observar las tablas se nota que a la misma instrucción MOV se le asignan diferentes

códigos hexadecimales ¿a qué se debe esto?

se debe a la variable de dato que esta utilizando que tiene que estar hexadecimal.

5. ¿Cuál es la función que cumple el registro IP?

sirve para ver la dirección inicial de la línea de código.

Registro puntero de instrucción o contador de programa (PC).

Contiene el desplazamiento de la Siguiente instrucción a ejecutar respecto al segmento de código

en ejecución. Por lo tanto, la dirección completa de la siguiente instrucción sería CS:IP.

La única forma de influir en este registro es de forma indirecta mediante instrucciones de

bifurcación.

6. En la columna OFFSET de las tablas, éstos no se incrementan a una razón constante ¿por

qué?

es la dirección de memoria 0100Hh dentro del segmento específico.

7. En las instrucciones donde se incluyeron corchetes ¿Qué diferencias observó en su

ejecución?

en que donde hay corchetes ahí necesariamente tienes que ir a la memoria a acceder el dato

que se necesita, en cambio sin el corchete, solo se busca entre los registros.

8. Al ejecutar el tercer programa, a medida que hacía las modificaciones ¿qué efecto

concreto logra el cambio en el registro BX?

cambia el desplazamiento de la imagen para diferentes lugares en screem.

9. Al modificar CH ¿qué bits específicos se modificaron para lograr cambios en el fondo y

color de los caracteres?

cuando se modifica el CH cambia los colores la imagen a veces según sea el código

desaparece.

Page 22: Fundamentos_de_Programacion 8086

V. CONCLUSIONES

Consigne al menos cinco conclusiones a las que ha arribado en el desarrollo de la práctica

pude ver como ver imprimir un carácter por el screem.asi como también modificar sus parámetros

ya sea de CH para los colores, BX para el desplazamiento.

vi algunos elementos del programa de EMU8086.

vi también algunos registros del emulador.

y por ultimo los modos de direccionamiento.