Tarea1 - PC XT Flores - Lopez - Mendoza

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 22

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN

Facultad De Ingeniería De Producción y Servicios


Escuela Profesional De Ingeniería Electrónica

Curso: Arquitectura de Computadoras

Turno: B

Horario: Viernes de 8:50 a 10:30 am

Número de grupo: LV4

Título de la Práctica: PC XT

Número de Práctica: 1

Apellidos y Nombres:

Flores Arela, Saul Orlando | 20181589

Lopez Colque Nikolai Admin | 20180251

Mendoza Portillo, Harold | 20182229

Fecha de Entrega: 15-09-2021


Arequipa-Perú

SISTEMAS QUE COMPONEN LA COMPUTADORA XT 3

Características del procesador 8088/8086 4

Funcionamiento en general 4

Sistemas descritos por bloques y circuitos 5

Esquemático del sistema completo de aplicación 8

Muestra de una mainboard XT con identificación de dispositivos 9

Registros del 8088 11

8. Modos de direccionamiento 14

9.- SET DE INSTRUCCIONES 16

10.- LENGUAJE DE MAQUINA, MACROENSANBLADOR DEL 8088 20

Bibliografía 23

1. SISTEMAS QUE COMPONEN LA COMPUTADORA XT


El XT son las siglas de eXtended Technology (Tecnología eXtendida).
➢ El estándar XT traía de serie 128KB de memoria RAM
➢ Una disquetera 5 1/4" de doble cara de doble densidad de 360KB de tamaño completo
➢ Un disco duro Seagate de 10MB (ST-412)
➢ Un adaptador asíncrono (tarjeta serial)
➢ Una fuente de alimentación de 130W q suministraba energía eléctrica a todos los
componentes.
➢ La placa base tenía ocho ranuras de expansión ISA de 8 bits, y un microprocesador
Intel 8088 corriendo a 4,77 MHz (con un zócalo para coprocesador matemático Intel
8087).
Las ocho ranuras de expansión eran un aumento de las cinco del IBM PC, aunque tres de ellas
eran utilizadas por el adaptador de la unidad de disquetes, el adaptador del disco duro, y la
tarjeta asíncrona. Pronto se actualizó la especificación básica para estandarizarla a 256KB de
memoria RAM.
Había dos versiones de la placa base del XT. La original podía admitir hasta 256kB en la
misma placa (en cuatro bloques de chips de 64kB), con un máximo de 640kB alcanzados

3
usando tarjetas de expansión. La segunda revisión de la placa, introducida en 1986, podía
admitir los 640kB enteros en la placa base (en dos bloques de chips de 256kb y dos bloques
de 64kB). Las placas más recientes podían ser adaptadas para las "últimas" especificaciones
después de un par de modificaciones menores. La segunda revisión de la placa tenía además
un IBM BIOS revisado, que incluía soporte para el teclado expandido y reducía el tiempo de
arranque a la mitad.
Los últimos XTs venían con unidades de disquetes de media altura instaladas de fábrica, así
como con la opción para un disco duro de 20MB y para el teclado "expandido". Sin embargo,
en 1985, algunas unidades fueron manufacturadas con solo dos disqueteras de tamaño
completo y sin disco duro.

2. Características del procesador 8088/8086


a. Bus de datos de 8 bits
b. Arquitectura interna de 16 bits
c. Direccionamiento de 1Mb
d. Clock de 5 MHz
e. Modo máximo y modo mínimo
f. Bus de direcciones y datos multiplexados
Poseen una arquitectura interna de 16 bits y pueden trabajar con operandos de 8 y 16 bits; una
capacidad de direccionamiento de 20 bits (hasta 1 Mb) y comparten el mismo juego de
instrucciones.
El diseño de la familia del 8086 se basa en la compatibilidad y la creación de sistemas
informáticos integrados, por lo que disponen de diversos coprocesadores como el 8089 de E/S
y el 8087, coprocesador matemático de punto flotante. De acuerdo a esta filosofía y para
permitir la compatibilidad con los anteriores sistemas de 8 bits, el 8088 se diseñó con un bus
de datos de 8 bits, lo cual le hace más lento que el 8086, pues éste es capaz de cargar una
palabra ubicada en una dirección par en un solo ciclo de memoria mientras el 8088 debe
realizar dos ciclos leyendo cada vez un byte.
Disponen de 92 tipos de instrucciones, que pueden ejecutar con hasta 7 modos de
direccionamiento. Tienen una capacidad de direccionamiento en puertos de entrada y salida
de hasta 64K (65536 puertos), por lo que las máquinas construidas entorno a estos
microprocesadores no suelen emplear la entrada/salida por mapa de memoria.
Las frecuencias internas de reloj típicas son 4.77 MHz en la versión 8086; 8 MHz en la
versión 8086-2 y 10 MHz en la 8086-1. Por lo que un PC estándar a 4,77 MHz puede ejecutar
de 20.000 a unos 0,5 millones de instrucciones por segundo, según la complejidad de las
mismas (un 486 a 50 MHz, incluso sin memoria caché externa es capaz de ejecutar entre 1,8 y
30 millones de estas instrucciones por segundo).

3. Funcionamiento en general
El 8086 y el 8088 tienen internamente dos componentes, la Unidad de Interfaz del Bus y la
Unidad de ejecución (Bus Interface Unit (BIU) y Execution Unit (EU)).
La Unidad de Ejecución procesa las instrucciones del CPU. Está conformada por los registros
generales, los registros índices y apuntadores, los flags, la unidad aritmética lógica, y la lógica
de control que maneja todo el proceso para ejecutar las instrucciones.
La Unidad de Interfaz del Bus maneja la lectura y escritura desde y hacia la memoria y los
puertos de entrada/salida. Está conformada por los registros de segmento, una cola de 4 bytes

4
para instrucciones en el 8088 y de 6 en el 8086, y lógica para controlar los buses externos del
microprocesador.
La Unidad de Ejecución y la Unidad de Interfaz del Bus están interconectadas mediante un
bus interno.
Al ser inicializado el microprocesador, lo primero que hace es generar la dirección de
memoria 0000h, para el ROM BIOS. Luego activa el pin ALE, para que el los bits bajos de la
dirección (AD0-AD7) queden almacenados en el circuito de Báscula Cerrojo. Luego de ello,
activa el pin RD, con lo que recibe el dato correspondiente al código de operación de la
primera instrucción almacenada el ROM BIOS a través de sus líneas de datos (con ello se
explica la necesidad del circuito báscula cerrojo). Una vez recibido este primer dato, el
microprocesador busca en su tabla de códigos, a qué operación se refiere y según ello, puede
generar una nueva dirección al siguiente dato para completar su operación. Este ciclo se repite
siempre, la variación puede estar en que el periférico direccionado, puede ser ROM, RAM o
un periférico.
En caso que el microprocesador desee escribir en la memoria, se genera primero la dirección,
como en el caso anterior, sólo que esta vez se ponen los datos en el bus de datos y luego se
activa el pin WR.

4. Sistemas descritos por bloques y circuitos

5
Diagrama de bloque de los microprocesadores Intel 8086 y 8088.
1 Bloque de registros de propósito general
2 Bloque de registros de segmento y registro IP
3 Sumador de direcciones
4 Bus de direcciones interno
5 Cola de instrucciones (4 bytes para el 8088 y 6 bytes para el 8086)
6 Unidad de control (muy simplificada)
7 Interfaz del bus
8 Bus de datos interno
9 Unidad aritmético lógica (ALU)
10, 11, 12 Bus de direcciones, datos y control externos

6
Los 40 pines del 8088 en modo mínimo tienen las siguientes funciones:
1. GND (Masa)
2. A14 (Bus de direcciones)
3. A13 (Bus de direcciones)
4. A12 (Bus de direcciones)
5. A11 (Bus de direcciones)
6. A10 (Bus de direcciones)
7. A9 (Bus de direcciones)
8. A8 (Bus de direcciones)
9. AD7 (Bus de direcciones y datos)
10. AD6 (Bus de direcciones y datos)
11. AD5 (Bus de direcciones y datos)
12. AD4 (Bus de direcciones y datos)
13. AD3 (Bus de direcciones y datos)
14. AD2 (Bus de direcciones y datos)
15. AD1 (Bus de direcciones y datos)
16. AD0 (Bus de direcciones y datos)
17. NMI (Entrada de interrupción no enmascarable)
18. INTR (Entrada de interrupción enmascarable)
19. CLK (Entrada de reloj generada por el 8284)
20. GND (Masa)
21. RESET (Para inicializar el 8088)
22. READY (Para sincronizar periféricos y memorias lentas)
23. /TEST
24. /INTA (El 8088 indica que reconoció la interrupción)

7
25. ALE (Cuando está uno indica que salen direcciones por AD, en caso contrario, es el bus de datos)
26. /DEN (Data enable: cuando vale cero debe habilitar los transceptores 8286 y 8287 (se conecta al
pin de "output enable"), esto sirve para que no se mezclen los datos y las direcciones).
27. DT/R (Data transmit/receive: se conecta al pin de dirección de los chips recién indicados).
28. IO/M (Si vale 1: operaciones con ports, si vale 0: operaciones con la memoria)
29. /WR (Cuando vale cero hay una escritura)
30. HLDA (Hold Acknowledge: el 8088 reconoce el HOLD)
31. HOLD (Indica que otro integrado quiere adueñarse del control de los buses, generalmente se usa
para DMA o acceso directo a memoria).
32. /RD (Cuando vale cero hay una lectura)
33. MN/MX (Cuando esta entrada está en estado alto, el 8088 está en modo mínimo, en caso contrario
está en modo máximo)
34. /SSO (Junto con IO/M y DT/R esta salida sirve para determinar estados del 8088)
35. A19/S6 (Bus de direcciones/bit de estado)
36. A18/S5 (Bus de direcciones/bit de estado)
37. A17/S4 (Bus de direcciones/bit de estado)
38. A16/S3 (Bus de direcciones/bit de estado)
39. A15 (Bus de direcciones)
40. Vcc (+5V)

5. Esquemático del sistema completo de aplicación


De forma esquemática podemos suponer que un procesador se compone de cinco elementos:
● Memoria
● Unidad Aritmética Lógica ALU ("Arithmetic and Logic Unit" )
● Unidad de control CU
● Bus interno
● Conexiones con el exterior

8
6. Muestra de una mainboard XT con identificación de dispositivos

9
10
7. Registros del 8088
Los registros del i8086 e i8088 se basaron en el diseño del Intel 8080. El conjunto de registros
también es similar al del i8080, pero ampliado a 16 bits. Tanto el i8086 como el i8088 tienen cuatro
registros de propósito general de 16 bits, que también pueden ser accedidos como ocho registros de 8
bits, y tienen cuatro registros índices de 16 bits. Los registros de datos se usan a veces de forma
implícita por instrucciones, haciendo más difícil la organización de los registros para emplearlos con
valores temporales.

Los registros del procesador, se usan para contener los datos con que se está trabajando ya que el
acceso a los registros es mucho más rápido que los accesos a memoria. Se pueden realizar operaciones
aritméticas y lógicas, comparaciones, entre otras. Se pueden hacer estas operaciones con todos los
registros excepto los de segmento, el IP, y los flags.

11
Registros de propósito general
Los registros de propósito general son el AX, BX, CX, y DX, de 16 bits. Cada uno de ellos se divide
en dos registros de 8 bits, llamados AH y AL, BH y BL, CH y CL, y, DH y DL, H significando Hight
(alto) y L significando Low (bajo), indicando la parte alta o la parte baja del registro correspondiente
de 16 bits (ver esquema). Un programa podía usar tanto los registros de 16 bits como los registros de 8
bits. Aparte del uso general de los registros para hacer cálculos aritméticos y lógicos, existen
instrucciones que usan estos registros con un uso particular especializado, como se indica a
continuación:

Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que implican
entrada/salida, y multiplicación y división (estas dos últimas en conjunto con el registro DX)
Registro BX: El registro BX es el registro base, y es el único registro de propósito general que puede
ser un índice para direccionamiento indexado
Registro CX: El registro CX es conocido como el registro contador. Puede contener un valor para
controlar el número de veces que un ciclo se repite o un valor para corrimiento de bits
Registro DX: El registro DX es el registro de datos. En algunas operaciones se indica mediante este
registro el número de puerto de entrada/salida, y en las operaciones de multiplicación y división de 16
bits se utiliza junto con el acumulador AX
Registros Índice
Los registros SI y DI están disponibles para direccionamiento indexado y para operaciones de cadenas
de caracteres.
Registro SI: El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas de
caracteres. El SI está asociado con el segmento DS.
Registro DI: El registro índice destino también es requerido por algunas operaciones con cadenas de
caracteres. El DI está asociado con el segmento ES.
Registros de punteros
Los registros SP (apuntador de pila) y BP (apuntador base) están asociados con el registro SS y
permiten al sistema acceder a datos en el segmento de la pila.
Registro SP: El apuntador de pila de 16 bits está asociado con el segmento SS y proporciona un valor
de desplazamiento que se refiere a la palabra actual que está siendo procesada en la pila. El sistema
maneja de manera automática este registro, aunque el programa puede hacer ciertas manipulaciones
con él.
Registro BP: El apuntador base de 16 bits facilita la referencia de parámetros dentro de la pila.

Registros de estado
Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la máquina y el
resultado del procesamiento. Muchas instrucciones aritméticas y de comparación cambian el estado de
las banderas y apoyándose en ellas se pueden tomar decisiones para determinar la acción subsecuente.

La tabla contiene 16 posiciones (de 0 a 15), que son los 16 bits del registro de banderas, numeradas de
derecha a izquierda. La posición 0 la encontraremos a la derecha y la posición 15 a la izquierda.

- - - - OF DF IF TF SF ZF - AF - PF - CF

12
Los bits de las banderas son las siguientes:

OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden después de una
operación aritmética de números con signo (1=existe overflow; 0=no existe overflow). Para
operaciones sin signo, no se toma en cuenta esta bandera.

DF (dirección): Controla la selección de incremento o decremento de los registros SI y DI en las


operaciones con cadenas de caracteres (1=decremento automático; 0=incremento). La bandera DF se
controla con las instrucciones STD y CLD.

IF (interrupción): Indica que una interrupción sea procesada o ignorada (1=habilita las
interrupciones; 0=deshabilita las interrupciones). El estado de la bandera IF se controla con las
instrucciones STI y CLI.

TF (trampa): Permite la operación del procesador en modo de depuración (paso a paso)

SF (signo): Contiene el signo resultante de una operación aritmética (0=positivo; 1=negativo).

ZF (cero): Indica el resultado de una operación aritmética o de comparación (0=resultado diferente de


cero; 1=resultado igual a cero).

AF (acarreo auxiliar): Contiene el acarreo del bit 3. Esta bandera se prueba con las instrucciones
DAA y DAS para ajustar el valor de AL después de una suma o
resta BCD.

PF (paridad): Indica si el número de bits 1, del byte menos significativos de una operación, es par
(0=número de bits 1 es impar; 1=número de bits 1 es par).

CF (acarreo): Contiene el acarreo del bit de mayor orden después de una operación aritmética;
también almacena el contenido del último bit en una operación de desplazamiento o de rotación.

Registro de segmento

Definen áreas de 64 Kb dentro del espacio de direcciones de 1 Mb del 8086. Estas áreas pueden
solaparse total o parcialmente. No es posible acceder a una posición de memoria no definida por algún
segmento: si es preciso, habrá de moverse alguno.

Registro CS: El DOS almacena la dirección inicial del segmento de código de un programa en el
registro CS. Esta dirección de segmento, más un valor de desplazamiento en el registro apuntador de
instrucción (IP), indica la dirección de una instrucción que es buscada para su ejecución. Para
propósitos de programación normal, no se necesita referenciar el registro CS.

Registro DS: La dirección inicial de un segmento de datos de programa es almacenada en el registro


DS. Esta dirección, más un valor de desplazamiento en una instrucción, genera una referencia a la
localidad de un byte específico en el segmento de datos.

Registro SS: El registro SS permite la colocación en memoria de una pila, para almacenamiento
temporal de direcciones y datos. El DOS almacena la dirección de inicio del segmento de pila de un

13
programa en el registro SS. Esta dirección de segmento, más un valor de desplazamiento en el registro
del apuntador de la pila (SP), indica la palabra actual en la pila que está siendo direccionada. Para
propósitos de programación normal, no se necesita referenciar el registro SS.

Registro ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento
para manejar el direccionamiento de memoria. El registro ES está asociado con el registro DI (Índice).
Un programa que requiere el uso del registro ES puede inicializarlo con una dirección de segmento
apropiada.

Registro de puntero de instrucciones


El registro IP de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se
ejecuta. El IP está asociado con el registro CS en el sentido de que el IP indica la instrucción actual
dentro del segmento de código que se está ejecutando actualmente en la memoria.

8. Modos de direccionamiento
En el 8086/8088, los parámetros (operadores) de una instrucción pueden ser de tres tipos:
● registros internos de la CPU
● valores inmediatos
● direcciones de memoria, de las que hay cinco tipos diferentes de representación

En total son siete las clases de parámetros que se pueden utilizar y conjuntamente forman los llamados
siete modos de direccionamiento.

★ Registros internos: el origen y destino de la operación son los registros internos de la CPU.
★ Valores inmediatos: en este modo, el origen de los datos (y sólo el origen) es un valor
numérico.
★ Valores de memoria: Hay cinco modos de acceso a memoria:

Modo directo: Se indica la dirección de memoria a la que se quiere acceder.

14
Modo indirecto mediante registro: Es similar al modo anterior sólo que el valor del
desplazamiento del operando no se indica directamente sino que se encuentra en un registro
de la CPU.
Modo relativo a base: Es unir los dos modos anteriores. Consiste en indicar la posición del
operando utilizando como desplazamiento el valor de un registro sumado con una cantidad
constante.
Modo directo indexado: Idéntico al anterior pero usando como registro de desplazamiento el
registro SI o el DI.
Modo indexado a base: Este es el modo más complejo, y se podría decir que es el resultado
de unir los cuatro anteriores. En este modo, el desplazamiento del operando se compone a
partir de un registro que hace de base, un registro índice y un valor inmediato que se les suma.

Los procesadores 8086 y 8088 tenían los siguientes modos de direccionamiento:

➔ Implícito: El dato está implícito en la propia instruciión. Ej. STC, STD y STI, (Set Carry, Set
Direcction y Set Interrupts) encienden el flag correspondiente indicado en la propia
instrucción. CBW (Convert Byte to Word) extiende el registro AL a AX. Ni el AL ni el AX
son especificados, CBW implícitamente trabaja sobre ellos.
➔ Inmediato: El dato a operar está inmediatamente después del opcode de la instrucción. Ej,
MOV AX, 5.
➔ Registro: El dato está en un segundo registro. Ej. MOV AX, BX. Aquí, el dato está en el
registro BX
➔ Directo: La dirección del dato está en el campo de la dirección del opcode. Ej. MOV AX,
[100h]. Aquí se mueve (copia) el contenido de las direcciones 100h y 101h al registro AX. En
este caso se mueven dos bytes puesto que AX es de 16 bits. Si fuera MOV BL, [100h] se
movería solo un byte pues BL es un registro de 8 bits
➔ Indirecto: El dato es especificado mediante una combinación de registros índice y base, y
puede haber un desplazamiento

➢ Base. Un registro base (BX o BP) tienen la dirección de donde se tomará el dato. Ej. MOV
AX, [BX]
➢ Índice. Un registro índice (SI o SI) tienen la dirección de donde se tomará el dato. Ej. MOV
AX, [SI]
➢ Base + Desplazamiento. El dato se tomará de la dirección apuntada por la suma de un registro
base más un desplazamiento. Ej. MOV AX, [BP + 7]
➢ Índice + Desplazamiento. El dato se tomará de la dirección apuntada por la suma de un
registro índice más un desplazamiento. Ej. MOV AX, [DI + 7]
➢ Base + Índice. El dato se tomará de la dirección apuntada por la suma de un registro base más
un registro índice. Ej. MOV AX, [BX + SI]
➢ Base + Índice + Desplazamiento. El dato se tomará de la dirección apuntada por la suma de
un registro base, más un registro índice, más un desplazamiento. Ej. MOV AX, [BX + SI + 9]

9.- SET DE INSTRUCCIONES


Se pueden clasificar en los siguientes grupos:
9.1 Instrucciones de Transferencia de Datos.
Estas instrucciones mueven datos de una parte a otra del sistema; desde y hacia la
memoria principal, de y a los registros de datos, puertos de E/S y registros de

15
segmentación.

Las instrucciones de transferencia de datos son las siguientes:

MOV transfiere
XCHG intercambia
IN entrada
OUT salida
XLAT traduce usando una tabla
LEA carga la dirección efectiva
LDS carga el segmento de datos
LES carga el segmento extra
LAHF carga los indicadores en AH
SAHF guarda AH en los indicadores
PUSH FUENTE (sp) fuente
POP DESTINO destino (sp)

9.2 Control de Bucles (instrucciones simples)


Estas posibilitan el grupo de control más elemental de nuestros programas. Un bucle es un bloque de
código que se ejecuta varias veces. Hay 4 tipos de bucles básicos:
● Bucles sin fin
● Bucles por conteo
● Bucles hasta
● Bucles mientras
Las instrucciones de control de bucles son las siguientes:

INC incrementar
DEC decrementar
LOOP realizar un bucle
LOOPZ,LOOPE realizar un bucle si es cero
LOOPNZ,LOOPNE realizar un bucle si no es cero
JCXZ salta si CX es cero

9.3 Instrucciones de Prueba, Comparación y Saltos.

Este grupo es una continuación del anterior, incluye las siguientes instrucciones:
TEST verifica
CMP compara
JMP salta
JE, JZ salta si es igual a cero
JNE, JNZ salta si no igual a cero
JS salta si signo negativo
JNS salta si signo no negativo
JP, JPE salta si paridad par
JNP, JOP salta si paridad impar
JO salta si hay capacidad excedida
JNO salta si no hay capacidad excedida
JB, JNAE salta si por abajo (no encima o igual)

16
JNB, JAE salta si no está por debajo (encima o igual)
JBE, JNA salta si por abajo o igual (no encima)
JNBE, JA salta si no por abajo o igual (encima)
JL, JNGE salta si menor que (no mayor o igual)
JNL, JGE salta si no menor que (mayor o igual)
JLE, JNG salta si menor que o igual (no mayor)
JNLE, JG salta si no menor que o igual (mayor)

9.4 Instrucciones de Llamado y Retorno de Subrutinas.


Para que los programas resulten eficientes y legibles tanto en lenguaje ensamblador como en lenguaje
de alto nivel, resultan indispensables las subrutinas:
CALL llamada a subrutina
RET retorno al programa o subrutina que llamó

9.5 Instrucciones Aritméticas


Estas instrucciones son las que realiza directamente el 8086/8088
A. Grupo de adición:
ADD suma
ADC suma con acarreo
AAA ajuste ASCII para la suma
DAA ajuste decimal para la suma
B. Grupo de sustracción:
SUB resta
SBB resta con acarreo negativo
AAS ajuste ASCII para la resta
DAS ajuste decimal para la resta
C. Grupo de multiplicación:
MUL multiplicación
IMUL multiplicación entera
AAM ajuste ASCII para la multiplicación
D. Grupo de división:
DIV división
IDIV división entera
AAD ajuste ASCII para la división
E. Conversiones:
CBW pasar octeto a palabra
CWD pasar palabra a doble palabra
NEG negación
F. Tratamiento de cadenas:
Permiten el movimiento, comparación o búsqueda rápida en bloques de datos:
MOVC transferir carácter de una cadena
MOVW transferir palabra de una cadena
CMPC comparar carácter de una cadena
CMPW comparar palabra de una cadena
SCAC buscar carácter de una cadena
SCAW buscar palabra de una cadena
LODC cargar carácter de una cadena
LODW cargar palabra de una cadena

17
STOC guardar carácter de una cadena
STOW guardar palabra de una cadena
REP repetir
CLD poner a 0 el indicador de dirección
STD poner a 1 el indicador de dirección

9.6 Instrucciones Lógicas.

Son operaciones bit a bit que trabajan sobre octetos o palabras completas:
NOT negación
AND producto lógico
OR suma lógica
XOR suma lógica exclusiva

9.7 Instrucciones de Desplazamiento, Rotación y Adeudos.


Básicamente permiten multiplicar y dividir por potencias de 2
SHL, SAL desplazar a la izquierda (desplazamiento aritmético)
SHR desplazar a la derecha
SAR desplazamiento aritmético a la derecha
ROL rotación a la izquierda
ROR rotación a la derecha
RCL rotación con acarreo a la izquierda
RCR rotación con acarreo a la derecha
CLC borrar acarreo
STC poner acarreo a 1

9.8 Instrucciones de Pila.

Una de las funciones de la pila del sistema es la de salvaguardar (conservar) datos (la otra es la de
salvaguardar las direcciones de retorno de las llamadas a subrutinas):
PUSH introducir
POP extraer
PUSHF introducir indicadores
POPF extraer indicadores

9.10 Instrucciones de Control del microprocesador.


Hay varias instrucciones para el control de la CPU, ya sea a ella sola, o en conjunción con otros
procesadores:
NOP no operación
HLT parada
WAIT espera
LOCK bloquea
ESC escape
9.11 Instrucciones de Interrupción.
STI poner a 1 el indicador de interrupción
CLI borrar el indicador de interrupción
INT interrupción
INTO interrupción por capacidad excedida (desbordamiento)

18
IRET retorno de interrupción
Las instrucciones de transferencia condicional del control del programa se pueden clasificar en 3
grupos:
1. Instrucciones usadas para comparar dos enteros sin signo:
a. JA o JNBE. Salta si está arriba o salta si no está abajo o si no es igual (jump if above o
jump if not below or equal) El salto se efectúa si la bandera ce CF = 0 o si la bandera de ZF =
0
b. JAE o JNB. Salta si está arriba o es igual o salta si no está abajo (jump if above or equal o
jump if not below) El salto se efectúa si CF = 0.
c. JB o JNAE. Salta si está abajo o salta si no está arriba o si no es igual (jump if below or
equal o jump if not above or equal) El salto se efectúa si CF=1.
d. JBE o JNA. Salta si está abajo o si es igual o salta si no está arriba (jump if below or equal
to jump if not above) El salto se efectúa si CF = 1.
e. JE o JZ. Salta si es igual o salta si es cero (jump equal o jump if zero) El salto se efectúa si
ZF = 1 (también se aplica a comparaciones de enteros con signo)
f. JNE o JNZ. Salta si no es igual o salta si no es cero (jump if not equal o jump if not zero)
El salto se efectúa si ZF = 0 (también se aplica a comparaciones de enteros con signo)
2. Instrucciones usadas para comparar dos enteros con signo:
a. JG o JNLE. Salta si es más grande o salta si no es menor o igual (jump if greater o jump if
not less or equal) El salto se efectúa si ZF = 0 oOF = SF.
b. JGE o JNL. Salta si es más grande o igual o salta si no es menor que (jump if greater or
equal o jump if not less) El salto se efectúa si SF = OF.
c. JL o JNGE. Salta si es menor que o salta si no es mayor o igual (jump if less o jump if not
greater or equal) El salto se efectúa si SF = OF.
d. JLE o JNG. Salta si es menor o igual o salta si no es más grande (jump if less or equal o
jump if not greater) El salto se efectúa si ZF = 1 o SF = OF.
3. Instrucciones usadas según el estado de banderas:
a. JC Salta si hay acarreo (jump if carry) El salto se efectúa si CF = 1.
b. JNC Salta si no hay acarreo (jump if not carry) El salto se efectúa si CF = 0.
c. JNO Salta si no hay desbordamiento (jump if not overflow) El salto se efectúa si OF = 0.
d. JNP o JPO Salta si no hay paridad o salta si la paridad en non. El salto se efectúa si PF= 0.
e. JNS Salta si el signo está apagado (jump if not sign) El salto se efectúa si SF = 0. f. JO
Salta si hay desbordamiento El salto se efectúa si OF= 1.
g. JP o JPE Salta si hay paridad o salta si la paridad es par (jump if parity o jump if parity
even) El salto se efectúa si PF = 1.
h. JS Salta si el signo está prendido El salto se efectúa si SF = 1.

10.- LENGUAJE DE MAQUINA, MACROENSANBLADOR DEL 8088

El lenguaje de máquina está compuesto por una serie de instrucciones, que son las únicas que pueden
ser reconocidas y ejecutadas por el microprocesador. Este lenguaje es un conjunto de números que
representan las operaciones que realiza el microprocesador a través de su circuitería interna. Estas
instrucciones, por decirlo así, están grabadas o "alambradas" en el hardware y no pueden ser
cambiadas. El nivel más bajo al que podemos aspirar a llegar en el control de un microprocesador es
precisamente el del lenguaje de máquina.

19
Ahora bien, siendo el lenguaje de máquina un conjunto de números, ¿cómo es capaz el
microprocesador de saber cuándo un número representa una instrucción y cuándo un dato? El secreto
de esto reside en la dirección de inicio de un programa y en el estado del microprocesador. La
dirección de inicio nos indica en qué localidad de memoria comienza un programa, y en consecuencia
que datos deberemos considerar como instrucciones. El estado del microprocesador nos permite saber
cuándo éste espera una instrucción y cuándo éste espera un dato.

Obviamente, el lenguaje de máquina de un microprocesador no puede ser ejecutado por otro


microprocesador de arquitectura distinta, a menos que haya cierto tipo de compatibilidad prevista. Por
ejemplo, un 80486 es capaz de ejecutar lenguaje de máquina propio y soporta el código generado para
microprocesadores anteriores de la misma serie (desde un 8086 hasta un 80386). Por otra parte, un
PowerPC es capaz de ejecutar instrucciones de los microprocesadores Motorola 68xxx y de los Intel
80xx/80x86. En ambos casos, el diseño de los microprocesadores se hizo tratando de mantener cierto
nivel de compatibilidad con los desarrollados anteriormente. En el segundo caso, este nivel de
compatibilidad se extendió a los de otra marca. Sin embargo, un 8088 no puede ejecutar código de un
80186 o superiores, ya que los procesadores más avanzados poseen juegos de instrucciones y registros
nuevos no contenidos por un 8088. Un caso similar es la serie 68xxx, pero de ninguna manera
podemos esperar que un Intel ejecute código de un Motorola y viceversa. Y esto no tiene nada que ver
con la compañía, ya que Intel desarrolla otros tipos de microprocesadores como el 80860 y el iWARP,
los cuales no pueden compartir código ni entre ellos ni entre los 80xx/80xxx.

Ahora bien, mientras que con el lenguaje de máquina, nosotros obtenemos un control total del
microprocesador, la programación en este lenguaje resulta muy difícil y fácil para cometer errores. No
tanto por el hecho de que las instrucciones son sólo números, sino porque se debe calcular y trabajar
con las direcciones de memoria de los datos, los saltos y las direcciones de llamadas a subrutinas,
además de que para poder hacer ejecutable un programa, se deben enlazar las rutinas de run-time y
servicios del sistema operativo. Este proceso es al que se le denomina ensamblado de código. Para
facilitar la elaboración de programas a este nivel, se desarrollaron los Ensambladores y el Lenguaje
Ensamblador.

Existe una correspondencia 1 a 1 entre las instrucciones del lenguaje de máquina y las del lenguaje
ensamblador. Cada uno de los valores numéricos del lenguaje de máquina tiene una representación
simbólica de 3 a 5 letras como instrucción del lenguaje ensamblador. Adicionalmente, este lenguaje
proporciona un conjunto de pseudooperaciones (también conocidas como directivas del ensamblador)
que sirven para definir datos, rutinas y todo tipo de información para que el programa ejecutable sea
creado de determinada forma y en determinado lugar.

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


microprogramable, como el microprocesador de una computadora o el microcontrolador de un
autómata. Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones a
ser tomadas por la máquina. Un programa 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.

Los circuitos microprogramables son sistemas digitales, lo que significa que trabajan con dos únicos
niveles de tensión. Dichos niveles, por abstracción, se simbolizan con el cero, 0, y el uno, 1, por eso el

20
lenguaje de máquina sólo utiliza dichos signos. Esto permite el empleo de las teorías del álgebra
booleana y del sistema binario en el diseño de este tipo de circuitos y en su programación.

Lenguaje de máquina del Intel 8088. El código de máquina en hexadecimal se resalta en rojo, el
equivalente en lenguaje ensamblador en magenta, y las direcciones de memoria donde se encuentra el
código, en azul. Abajo se ve un texto en hexadecimal y ASCII.

11.- DEBUGER Y SIMULADORES DEL 8088


Usamos el DEBUG para ejecutar el programa en lenguaje de máquina

DEBUG.EXE (o DEBUG.COM) es un programa DOS que permite a los programas de 16 bits que se
ejecute una instrucción a la vez con pausas para buscar en los registros y la memoria.

Ejecutarlo desde la línea de comandos MS-DOS como:


DEBUG name.EXE
Donde nombre es el nombre del archivo ejecutable.
DEBUG tiene una interfaz de usuario de línea de comandos.
Cada línea comienza con una letra clave posiblemente seguida de otra información.
Todos los números están en hexadecimal.
Por lo general, puede omitir los espacios en blanco - a veces es necesario hacerlo.
El "mini-lenguaje ensamblador" en adelante sólo entiende un código op y números hexadecimales y
registrar los nombres - que no entiende las etiquetas del programa.
A continuación se muestra un resumen de comandos. Las piezas que comienzan con / / son las
explicaciones no parte de los comandos. La notación xxxx representa un número hexadecimal
arbitrario (podría ser menos dígitos).
q / / quit DEBUG
r / / buscar en los registros y la siguiente instrucción a ser ejecutada
/ u / o desmontaje del lenguaje de máquina de nuevo en asamblea.

Sin embargo, note:No hay etiquetas de dirección.Se dan las direcciones en hexadecimal.

u xxxx / / desmonte a partir de la dirección xxxx


d xxxx / / volcado de memoria en formato hexadecimal y ASCII a partir de la dirección xxxx
t / / Ejecutar una sola instrucción
p / / Trace través de una llamada procedimiento o instrucción int.

21
g xxxx / / Ejecutar las instrucciones hasta que llegue a la instrucción en la dirección xxxx. Si la
ejecución falla que las instrucciones de su programa puede salirse de control.
g / / Ejecuta el programa hasta que sale (o nunca). Los valores de registro se muestran no son los que
dan al final de la ejecución de su programa.
r nn / / Donde nn es un nombre de registro. Muestra el valor actual del registro y luego a: Puede
escribir un nuevo valor para el registro y, a continuación, presione ENTRAR. O simplemente se
presiona Enter para salir del valor anterior sin cambios.
a / xxxx / Empieza a traducir las líneas de lenguaje ensamblador en ML y poner la instrucción ML por
primera vez en la dirección xxxx. Las líneas siguientes de AL irán a las direcciones de la máquina
posterior. Al pulsar Intro en una línea vacía AL saldrá de este "mini-ensamblador modo".
e xxxx / / Inicia el examen de bytes individuales a partir de la uno a la dirección xxxx. Si escribe un
espacio que pasa a la siguiente byte. Si escribe un número hexadecimal, se cambia el byte de edad en
lo que ha escrito. Si se pulsa enter, sale este "examinar" el modo.
NSSS / / ¿Dónde sss es uno o más caracteres ASCII dando un nombre de archivo. Este sss registros
como el nombre de archivo predeterminado .
l / / Esta es la carta de ell, NO la de un dígito. Esto carga el archivo con el nombre de archivo
predeterminado en la memoria. Si se trata de un archivo. Exe, que se carga correctamente y establece
las SS, CS e IP para el inicio del programa.
w / / Graba la memoria en el archivo con el nombre de archivo predeterminado . El número de bytes
escritos está dada por la división de entero de 32 bits entre los registros BX y CX. BX es el más alto
en 15 bits, CX es el más bajo en 15 bits. Esto presenta problemas para crear un programa ejecutable..
Se puede utilizar para crear un programa. Com.

Utilizando el emulador de un microprocesador


Si desea cargar el código en el emulador, haga clic en Emular . Pero también se puede utilizar para
cargar ejecutables emulador incluso si usted no tiene el código fuente original. Seleccione Mostrar
emulador desde el menú del emulador

22
Bibliografía
● Intel, Datasheet 8088 8-bit Hmos Microprocessor 8088/8088-2 , agosto 1990, pag 1-7.
● Lenguaje Ensamblador de los 80XX
● IBM, Technical Reference Pc xt 8088 User Guide, Section Hardware
● Ibm at technical reference. - 1984. 600 páginas.

23

También podría gustarte