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 Componentes <
de Computadoras > >
PRESENTADO POR: < Velasco Añasco Hossmell >
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 c omputadora pueda ejecutarlo. La Segmentación de memoria es un esquema de manejo de memoria mediante el cual la estructura del
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 cr ear 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 r utina 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 c reació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 r esultado de la prueba, realizar distintas o peraciones. Visual FoxPro ofrece dos comandos que permiten realizar una bifurcación condicional: IF ELSE IF ENDIF.
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.
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)
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.
–
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.
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.
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”. FFFFF
SEGMENTO CODIGO CS
SEGMENTO EXTRA SS
SEGMENTO DE DATOS DS
SEGMENTO EXTRA ES
00000
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"
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
Cod-op d w
mod reg r/m
Data o adress
Data o adress
1er byte
2do byte
3er byte
4to byte
obligatorio
opcional
opcional
opcional
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:
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 4.
fuente”. Desde ahí se puede crear un nuevo documento. Observe la figura “Choose code template” , elija “empty workspace”.
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),
el código fuente (actual source),
la Unidad Aritmética y Lógica (ALU), (FPU), memoria en la opción vars
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 mov ds,ax mov AH, 7Ah mov BL, 99 mov CL, 11001111b
;carga en DS la dirección ;donde está el ;segmento de datos ;carga AH con 7Ah ;carga BL con 99 ;carga CL con 11001111b
mov AX, 100 mov BX, 'A' mov CX, 0ABCDh mov DX, 6540 mov ax, 4c00h int 21h
;carga AX con 100 ;carga BX con carácter A ;carga CX con ABCDh ;carga DX, con 6540 ;fin del programa
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 CS:0720 BP:0000 DI:0000
BX:00 00 DS:0700 IP:0000 SI:0000
CX:01 1C ES:0700 SP:0100
DX:00 00 SS:0710
10. Presione RUN y anote los resultados, ¿porqué se obtienen estos? AX:4C 00 CS:F400 BP:0000 DI:0000
BX:0041 DS:0720 IP:0204 SI:0000
CX:ABCD ES:0700 SP:00FA
DX:198C SS:0710
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 Seg(cs) 0720 0705 0720 0720 0720 0720 0720 Apartir de 0720 0720
direccion offset 0005 0007 0009 000b 000E 0011 0014 Esta parte 0017 001A
lenguaje campo B4 B3 B1 B8 bb B9 ba Se hace B8 cd
maquina campo 7A 63 Cf 64 41 cd 8c Con las 00 21
Lenguaje ensamblador campo linea Mov AH,7 Mov BL,99 Mov CL,11001111b 00 Mov AX,100 00 Mov BX,78 Ab mov CX,0ABCDh 19 Mov DX,6540 interrupciones 4c Mov AX,4C00h 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 MOV BX, DX MOV AL, 'A' MOV AH, 61h MOV [BX], AH MOV [BX+1], AL MOV CX, [BX] mov ax, 4c00h
; Carga dato inmediato en DX ; Copia DX en BX, movimiento entre ;registros ; Almacena carácter en AL ; Guarda dato en AH ; Almacena en dirección indicada por ; DS:BX, indirecto ; Almacena dato relativo a base: ; DS:BX+1 ; Copia el dato de la dirección en CX ;registro, indirecto ;fin del programa
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
registro
0112h 0113h cx
direccion seg 0720 0720 0720 0720 0720 0720
offset 0000 0003 0005 0008 000a 000c
Inicio programa B8 20 07 B8 20 07 011A
Antes de 5
Despues 5
Despues 6
Despues 7
B041 B041 011A
B461 B461 011A
8827 8827 011A
884701 884701 011A
Lenguaje de campo B8 8e BA 8b B0 B4
maquina campo 20 D8 13 da 41 61
Lenguaje de linea Mov ax Mov ds Mov DX Mov BX Mov AL Mov AH
Ensamblador linea 00720h Ax 0013h Dx 041 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
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 mov ds,ax
;por dato ;por dato
mov AH, 7Ah mov BL, 99 mov CL, 11001111b mov AX, 100 mov BX, 'A' mov CX, 0ABCDh mov DX, 6540 mov ax, 4c00h int 21h
;por regsitro ;por registro ;po registro ;por registro ;por registro ;por registro ;por registro ;por registro
segundo ejemplo: MOV AX,@data MOV DS,AX MOV DX, 0112h MOV BX, DX MOV AL, 'A' MOV AH, 61h MOV [BX], AH MOV [BX+1], AL
por dato; ; por dato ; por registro ; por dato ; por dato ; directo ; 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.
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.
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.