You are on page 1of 60

Escuela Profesional de Ingeniería de

Sistemas e Informática x

MICROPROCESADORES

• Profesor(a): JOSÉ F RAMONES MORLES


• Correo : joseramones.telesup@gmail.com

Unidad : 01 Tema: 3

Semestre: 2019 - I
Escuela Profesional de Ingeniería de
Sistemas e Informática x
AGENDA
1. Historia y características de 8086
2. Arquitectura interna del 8086 – Modelo de
programación
3. Segmentación de memoria del 8086 – Modos de
direccionamiento
4. Modos de operación del 8086
5. Lenguaje Ensamblador- caraterísticas – Ventajas
6. Secciones, declaraciones y sintaxis del lenguaje
ensamblador
7. Intrucciones para 8086/8088
2

8. Ejemplos de aplicación
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Microprocesador 8086

3
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Intel 8086
• Diseñado en 1976 y a la venta en 1978
• 29.000 transistores
• Primer uP de 16 bits, 20 líneas de dirección (1 MB memoria) y 16
líneas de datos. Diferencia con 8088 (bus datos 8 bits)
• Poderoso ISA, se inicia la renombrada familia de Intel x86
• Primera arquitectura pipeline de instrucciones
• Procesador del primer PC IBM
• Usado en la primera misión de Shuttle de la NASA en 1981
• Junio 1979 apareció el 8088 (internamente igual que el 8086 pero con
bus de datos de 8 bits) y en 1980 los coprocesadores 8087
(matemático) y 8089 (E/S)
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Características del 8086

5
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Microprocesador 8086 - Características


El Microprocesador
• Procesador de 16 bits: ALU de 16 bits, registros de 16 bits, bus de
datos interno y bus de datos externo de 16 bits
• Cola de instrucciones: seis bytes de instrucciones de la memoria 
canalización (pipelining) en etapa de búsqueda (Fetch Stage) y etapa
de decodificación-ejecución (Execute Stage)  procesamiento paralelo
en la ejecución de las instrucciones
• Disponible en 3 versiones: 5 MHz, 8 MHz y 10 MHz
• Tiempo de ejecución = 400 nseg  2.5 MIPS, una de las mayores
mejoras con respecto a su antecesor 8085
• 256 interrupciones vectorizadas
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Arquitectura interna de
8086/8088

7
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Arquitectura en pipeline
• Antes, F-D-E  se buscaba en memoria la instrucción, se
decodificaba y se ejecutaba, pero otra instrucción no se
podía buscar hasta que no se ejecutara la anterior
• Alto % tiempo, el procesador ocupado con el Fetch, en
lugar de ejecutar las instrucciones
• Intel desarrolló la arquitectura en pipeline, y dividió al
8086 en dos procesadores:
• Uno a cargo del Fetch (BIU)
• Otro del Decode/Execute (EU)
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Arquitectura del 8086
2 procesadores conectados
internamente:
EU  Unidad de ejecución
BIU  Unidad de interfaz con el
Bus
Escuela Profesional de Ingeniería de
Sistemas e Informática x
La unidad de ejecución (EU)

Da instrucciones a BIU indicando desde dónde


obtener los datos, para luego decodificarlos y
ejecutarlos
Su función es controlar las operaciones en datos
utilizando el decodificador de instrucciones y la ALU
No tiene conexión directa con los buses del sistema,
realiza operaciones sobre datos a través de la BIU
Escuela Profesional de Ingeniería de
Sistemas e Informática x
La unidad de ejecución (EU) – Partes funcionales
Sistema de control de la unidad de ejecución: decodifica las instrucciones que le envía
la cola y envía las órdenes a la ALU, según tabla CROM (Control Read Only Memory)
ALU: Maneja todas las operaciones aritméticas y lógicas (+, -, ×, /, OR, AND, NOT)
Registro de banderas (Flag Register): registro de 16 bits tipo flip-flop, es decir, cambia
su estado de acuerdo con el resultado almacenado en el acumulador. Tiene 9 banderas
y se dividen en 2 grupos: banderas condicionales y banderas de control
Registros de propósito general: 8 registros de propósito general; AH, AL, BH, BL, CH, CL,
DH y DL. Estos registros se pueden usar individualmente para almacenar datos de 8 bits
y se pueden usar en pares para datos de 16 bits. Los pares de registros válidos son AH y
AL (AX), BH y BL (BX), CH y CL (CX), y DH y DL (DX)
Registro de puntero de pila: Es un registro de 16 bits, que contiene la dirección donde
una palabra se almacenó más recientemente en la pila
Escuela Profesional de Ingeniería de
Sistemas e Informática x
La unidad de ejecución (EU) - Registro de banderas

Fuente SlideShare
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Banderas condicionales: Representa el resultado de la última instrucción aritmética o


lógica ejecutada. Se listan:
• Acarreo (Carry): indica condición de desbordamiento para operaciones aritméticas
• Auxiliar (Auxiliary): El procesador utiliza este indicador para realizar la conversión de binario a BCD
• Paridad (Parity): cuando los 8 bits de orden inferior del resultado contienen un número par =1. Para
el número impar = 0
• Cero (Zero): = 1 cuando el resultado de la operación aritmética o lógica es cero; en caso contrario, =
0
• Signo (Sign): contiene el signo del resultado, es negativo = 1, si es positivo 0
• Desbordamiento (Overflow): representa el resultado cuando se excede la capacidad del sistema
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Banderas de control: controlan las operaciones de la unidad de ejecución. Se


listan:
• Depuración (Trap): para el control paso a paso, permite al usuario ejecutar una instrucción a la
vez para la depuración. Si está en 1, entonces el programa puede ejecutarse en modo paso a
paso
• Interrupción (Interrupt): indica activación o desactivación de interrupción, es decir, se utiliza
para permitir o prohibir la interrupción de un programa. Interrupciones habilitadas = 1,
interrupción deshabilitada = 0
• Cadena (Direction): se utiliza en la operación de cadena (string), cuando se establece en 1, se
accede a los bytes de la cadena desde la dirección de memoria superior a la dirección de
memoria inferior y viceversa
Escuela Profesional de Ingeniería de
Sistemas e Informática x
La unidad de ejecución (EU) - Registros de propósito general

• AX: registro de acumuladores. Se utiliza para almacenar los operandos para


operaciones aritméticas
• BX: registro base. Se utiliza para almacenar la dirección base inicial del área de
memoria dentro del segmento de datos
• CX: contador. Se utiliza en la instrucción de bucle para almacenar el contador de
bucle
• DX: se utiliza para mantener la dirección del puerto de E/S, para instrucción de
E/S
Escuela Profesional de Ingeniería de
Sistemas e Informática x
La unidad de interfaz de bus (BIU)
Encargada de todas las transferencias de datos y
direcciones en los buses para la UE, tales como:
• Enviar direcciones
• Obtener instrucciones de la memoria
• Leer datos de los puertos y la memoria
• Escribir datos en los puertos y la memoria
EU y BIU están conectadas al bus Interno
Escuela Profesional de Ingeniería de
Sistemas e Informática x
La unidad de interfaz de bus (BIU) – Partes funcionales
Cola de instrucciones: almacena 6 bytes de instrucciones (8088 son 4 bytes). Se obtiene
la siguiente instrucción mientras se ejecuta la instrucción actual  Pipelining
Registros de segmento: Contienen las direcciones de las instrucciones y los datos en la
memoria, que el procesador utiliza para acceder a las localidades de memoria:
• CS: segmento de código. Direcciona ubicación de memoria donde se almacena el programa ejecutable
• DS: segmento de datos. Se accede a los datos en el segmento de datos mediante una dirección de
desplazamiento (offset) o el contenido de otro registro que contiene la dirección de desplazamiento
• SS: segmento de pila, maneja la memoria para almacenar datos y direcciones durante la ejecución
• ES: Segmento extra, es un segmento de datos adicional, que la cadena utiliza para almacenar los
datos adicionales
Apuntador de instrucción (IP): registro de 16 bits que se utiliza para mantener la
dirección de la siguiente instrucción que se ejecutará
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Modelo de programación del


microprocesador 8086

18
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Modelo de programación del 8086

A la descripción del número, tamaño y uso de los


registros de un microprocesador se le conoce como el
modelo de programación del microprocesador

En el caso del 8086, consta de 14 registros de 16 bits,


de los cuales, unos pertenecen a la EU, que
normalmente se suelen usar para direccionamiento, y
otros que pertenecen a la BIU
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Modelo de programación del 8086 y 8088
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Modelo de programación del Core2
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Segmentación de memoria del 8086

22
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Estructura de memoria de segmentación
Para acceder a 1 MB de memoria, con referencias de direcciones de sólo
16 bits, gracias a la utilización de registros de segmentos que dividen
esencialmente el espacio de memoria en segmentos de 64K de longitud
Registros segmentos: ES, CS, DS y SS → 4*64 KB = 256 KB (incluye pila,
programa, datos y un segmento extra) → área de trabajo de un
programa
1 MB = 4 áreas de trabajo de 256 KB → 4 programas ejecutándose
concurrentemente = multiprogramación, concepto introducido con el
8086

23
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Formación de una Dirección Física
Cuando una dirección de memoria es referenciada, se genera una dirección física a partir de la dirección
lógica
Dirección
lógica u offset

EL REGISTRO DE
4 bits
SEGMENTO SE DESPLAZA
Dirección de 4 BITS HACIA LA
segmento IZQUIERDA
(MULTIPLICACIÓN x16)

Dirección física 0000

20 BITS
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Formación de una Dirección Física
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Segmentación
FFFFF

Dirección lógica

Dirección física
SEGMENTO Registro de segmento
Desplaza
miento
(Offset)
Dirección de segmento

CPU

Memoria
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Segmento de Memoria
FFFFF

En la etapa de búsqueda de
una instrucción, su dirección
se obtiene sumando el
desplazamiento, contenido en
el IP, al valor del registro de
SEGMENTO
segmento CS multiplicado por
16, es decir, el par CS:IP indica
la dirección de memoria donde
está la instrucción que se
busca
0
Memoria
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Modos de direccionamiento del 8086

28
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Modos de direccionamiento
27 modos de direccionamiento o reglas para localizar un operando de
una instrucción. Las tres primeras son comunes a los modos usados
por los microprocesadores anteriores de Intel
1. Direccionamiento inmediato: el operando es un número que se
encuentra en la misma instrucción
2. Direccionamiento inherente: el operando está implícito en la
instrucción, por ejemplo, en la multiplicación uno de los operandos
siempre es el registro acumulador AX
3. Direccionamiento a registro: el operando es un registro del
microprocesador
29
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Modos de direccionamiento
El resto sirven para
localizar un operando en
memoria. Se pueden
sumar cuatro cantidades:
• Dirección de segmento
• Dirección base
• Una cantidad índice
• Un desplazamiento

30
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Modos de direccionamiento
Dirección de segmento se almacena en el respectivo registro de
segmento (DS, ES, SS o CS) y siempre se multiplica por 16 antes de
utilizarse para obtener la dirección física
Base se almacena en el registro base (BX o BP)
Índice se almacena en el registro índice (SI o DI). No pueden sumarse dos
bases o dos índices
Registros restantes (AX, CX, DX y SP) no pueden utilizarse para
direccionamiento indirecto
Desplazamiento (offset) de 16 bits, 8 bits o 0 bits

31
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Modos de direccionamiento
Directo:
[desp16]. Ejemplo: MOV AX, [2000h]
Indirecto:
[BX]. Ejemplo: MOV AX, [BX]
Basado:
[BX+desp8], Ejemplo: MOV AX, [BX+30h]
Indexado:
[SI+desp16]. Ejemplo: MOV AX, [SI+4000h] 32
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Modos de direccionamiento
Basado-indexado:
[BX+DI], Ejemplo: MOV AX, [BX+DI]
Basado-indexado con desplazamiento:
[BX+SI+desp8], Ejemplo: MOV AX, [BX+SI+60h]

33
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Modos de operación del 8086

34
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Modos de operación
Modo mínimo, para pequeños sistemas, no admite la
multitarea, permite al 8086 trabajar de una forma más
autónoma, ya que genera sus propias señales de control
Modo máximo soporta un bus local, que permite
configuraciones con varios procesadores, para trabajar en
colaboración con el procesador numérico 8087 y el
procesador de E/S 8089, y depende del controlador de bus
8288 para generar el conjunto completo de señales de
control de bus 35
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Modos de operación

36
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Introducción al lenguaje
ensamblador

37
Escuela Profesional de Ingeniería de
Sistemas e Informática x
El lenguaje ensamblador
Es un lenguaje de programación de bajo nivel, para una computadora
o dispositivo programable específico, para una microarquitectura
particular, en contraste con la mayoría de los lenguajes de
programación de alto nivel, que generalmente son portables en
múltiples plataformas
Se convierte en código de máquina ejecutable en el microprocesador,
mediante un programa de utilidad denominado ensamblador
El lenguaje ensamblador suele confundirse con el lenguaje de
máquina, que son las secuencias de ceros y unos que entiende el
microprocesador. El lenguaje ensamblador es un poco más parecido al
lenguaje natural que usa el ser humano
38
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Ventajas del lenguaje ensamblador
Permite entender de mejor manera:
• Cómo los procesos e hilos interactúan con el
microprocesador, la BIOS y el sistema operativo
• Cómo se representan los datos en la memoria y en los
dispositivos de E/S
• Cómo el microprocesador accede y ejecuta las instrucciones
• Cómo las instrucciones acceden y procesan los datos
• Cómo un proceso o hilo accede a dispositivos de E/S

39
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Ventajas del lenguaje ensamblador
Adicionalmente el lenguaje tiene otras ventajas importantes, tales
como:
• Requiere menos memoria y tiempo de ejecución
• Permite trabajos complejos específicos de hardware de una manera
más fácil
• Es adecuado para trabajos de tiempo crítico
• Es más adecuado para escribir rutinas de servicio de interrupción y
otros programas residentes en memoria

40
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Secciones, declaraciones y
sintaxis del lenguaje
ensamblador
41
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Secciones del lenguaje ensamblador
1. La sección de datos: para declarar datos inicializados o constantes.
Estos datos no cambian en tiempo de ejecución. En esta sección se
pueden declarar valores constantes, nombres de archivos o
tamaños de búfer, etc.
2. La sección bss (Block Started by Symbol: Bloque de simbolos): se
utiliza para declarar variables
3. La sección de texto: para mantener el código real. Esta sección
debe comenzar con la declaración global _start, que le indica al
núcleo dónde comienza la ejecución del programa
Los comentarios en lenguaje ensamblador comienzan con un punto y
coma (;)
42
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Declaraciones del lenguaje ensamblador
Los programas de lenguaje ensamblador constan de tres tipos de
declaraciones:
• Instrucciones: le indican al procesador qué hacer. Cada instrucción
consiste en un código de operación (opcode). Cada instrucción
ejecutable genera una instrucción de lenguaje de máquina
• Directivas del ensamblador: le informan al ensamblador sobre los
diversos aspectos del proceso de ensamblaje. Estos no son
ejecutables y no generan instrucciones en lenguaje de máquina
• Macros: son básicamente un mecanismo de sustitución de texto

43
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Sintaxis de las instrucciones en lenguaje ensamblador
Las declaraciones en lenguaje ensamblador se ingresan en una
instrucción por línea. Cada declaración sigue el siguiente formato:

[etiqueta] mnemotécnica [operandos] [; comentario]

Los campos en los corchetes son opcionales. Una instrucción básica


tiene dos partes, la primera es el nombre de la instrucción (o el
mnemotécnico), que se ejecutará, y la segunda son los operandos o
parámetros de la instrucción

44
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Instrucciones típicas en lenguaje ensamblador
• INC CUENTA ; Incrementa la variable en memoria CUENTA

• MOV TOTAL, 48 ; Transfiere el valor 48 a la variable en TOTAL

• ADD AH, BH ; Suma el contenido del registro BH en el registro AH

• AND MASK1, 128 ; Ejecuta operación AND en la variable MASK1 y 128

• ADD MARKS, 10 ; Suma 10 a la variable MARKS

• MOV AL, 10 ; Transfiere el valor 10 al registro AL

45
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Instrucciones lenguaje
ensamblador para 8086/8088

46
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Instrucciones del 8086/8088
Instrucciones de transferencia de datos (No afectan flags)

MOV dest,src: Copia el contenido del operando fuente (src) en el destino (dest). Operación: dest <- src
• MOV reg,{reg|mem|inmed}
• MOV mem,{reg|inmed}
• MOV {reg16|mem16},{CS|DS|ES|SS}
• MOV {DS|ES|SS},{reg16|mem16}
PUSH src: Pone el valor en el tope del stack. Operación: SP <- SP - 2, [SP+1:SP] <- src donde src =
{reg16|mem16|CS|DS|ES|SS}
POP dest: Retira el valor del tope del stack poniéndolo en el lugar indicado. Operación: dest <- [SP+1:SP], SP
<- SP + 2 donde dest = {reg16|mem16|DS|ES|SS}
XCHG reg,{reg|mem}: Intercambia ambos valores
IN {AL|AX},{DX|inmed (1 byte)}: Pone en el acumulador el valor hallado en el puerto indicado
OUT {DX|inmed (1 byte)},{AL|AX}: Pone en el port indicado el valor del acumulador
Fuente Alpetron. Dario Alejandro Alpern
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Instrucciones del 8086/8088
LEA reg,mem: Almacena la dirección efectiva del operando de memoria en un registro.
Operación: reg <- dirección mem
LDS reg,mem32: Operación: reg <- [mem], DS <- [mem+2]
LES reg,mem32: Operación: reg <- [mem], ES <- [mem+2]
LAHF: Copia en el registro AH la imagen de los ocho bits menos significativos del registro
de indicadores. Operación: AH <- SF:ZF:X:AF:X:PF:X:CF
SAHF: Almacena en los ocho bits menos significativos del registro de indicadores el valor
del registro AH. Operación: SF:ZF:X:AF:X:PF:X:CF <- AH
PUSHF: Almacena los flags en la pila. Operación: SP <- SP - 2, [SP+1:SP] <- Flags.
POPF: Pone en los flags el valor que hay en la pila. Operación: Flags <- [SP+1:SP], SP <- SP
+2
48
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Instrucciones del 8086/8088
Instrucciones aritméticas (Afectan los flags AF, CF, OF, PF, SF, ZF)
ADD dest,src: Operación: dest <- dest + src
ADC dest,src: Operación: dest <- dest + src + CF
SUB dest,src: Operación: dest <- dest - src
SBB dest,src: Operación: dest <- dest - src - CF
CMP dest,src: Operación: dest - src (sólo afecta flags)
INC dest: Operación: dest <- dest + 1 (no afecta CF)
DEC dest: Operación: dest <- dest - 1 (no afecta CF)
NEG dest: Operación: dest <- - dest, donde dest = {reg|mem} y src = {reg|mem|inmed} no
pudiendo ambos operandos estar en memoria
49
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Instrucciones del 8086/8088
DAA: Corrige el resultado de una suma de dos valores BCD empaquetados en el registro
AL (debe estar inmediatamente después de una instrucción ADD o ADC). OF es indefinido
después de la operación
DAS: Igual que DAA pero para resta (debe estar inmediatamente después de una
instrucción SUB o SBB)
MUL {reg8|mem8}: Realiza una multiplicación con operandos no signados de 8 por 8 bits.
Operación: AX <- AL * {reg8|mem8}. CF=OF=0 si AH = 0, CF=OF=1 en caso contrario. AF, PF,
SF, ZF quedan indefinidos
MUL {reg16|mem16}: Realiza una multiplicación con operandos no signados de 16 por 16
bits. Operación: DX:AX <- AX * {reg16|mem16}. CF=OF=0 si DX = 0, CF=OF=1 en caso
contrario. AF, PF, SF, ZF quedan indefinidos
50
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Instrucciones del 8086/8088
Instrucciones lógicas (Afectan AF, CF, OF, PF, SF, ZF)
AND dest,src: Operación: dest <- dest and src
TEST dest,src: Operación: dest and src. Sólo afecta flags
OR dest,src: Operación: dest <- dest or src
XOR dest,src: Operación: dest <- dest xor src
Las cuatro instrucciones anteriores ponen CF = OF = 0, AF queda indefinido y PF, SF y ZF
dependen del resultado
NOT dest: Operación: dest <- Complemento a 1 de dest. No afecta los flags
SHL/SAL dest,{1|CL}: Realiza un desplazamiento lógico o aritmético a la izquierda
SHR dest,{1|CL}: Realiza un desplazamiento lógico a la derecha
51
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Instrucciones del 8086/8088
Instrucciones de transferencia de control (No afectan los flags):
JMP label: Saltar hacia la dirección label
CALL label: Ir al procedimiento cuyo inicio es label. Para llamadas dentro del mismo
segmento equivale a PUSH IP: JMP label, mientras que para llamadas entre segmentos
equivale a PUSH CS: PUSH IP: JMP label
RET: Retorno de procedimiento
RET inmed: Retorno de procedimiento y SP <- SP + inmed
Variaciones de la instrucción de retorno:
RETN [inmed]: En el mismo segmento de código. Equivale a POP IP [:SP <- SP + inmed]
RETF [inmed]: En otro segmento de código. Equivale a POP IP: POP CS [:SP <- SP + inmed]
52
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Instrucciones del 8086/8088
Saltos condicionales aritméticos (usar después de CMP):
Aritmética signada (con números positivos, negativos y cero)
JL etiqueta/JNGE etiqueta: Saltar a etiqueta si es menor
JLE etiqueta/JNG etiqueta: Saltar a etiqueta si es menor o igual
JE etiqueta: Saltar a etiqueta si es igual
JNE etiqueta: Saltar a etiqueta si es distinto
JGE etiqueta/JNL etiqueta: Saltar a etiqueta si es mayor o igual
JG etiqueta/JNLE etiqueta: Saltar a etiqueta si es mayor

53
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Instrucciones del 8086/8088
Saltos condicionales aritméticos (usar después de CMP):
Aritmética sin signo (con números positivos y cero)
JB etiqueta/JNAE etiqueta: Saltar a etiqueta si es menor
JBE etiqueta/JNA etiqueta: Saltar a etiqueta si es menor o igual
JE etiqueta: Saltar a etiqueta si es igual
JNE etiqueta: Saltar a etiqueta si es distinto
JAE etiqueta/JNB etiqueta: Saltar a etiqueta si es mayor o igual
JA etiqueta/JNBE etiqueta: Saltar a etiqueta si es mayor

54
Escuela Profesional de Ingeniería de
Sistemas e Informática x

Ejemplos programas en
lenguaje ensamblador

55
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Ejemplos de aplicación en lenguaje ensamblador
La siguiente instrucción en lenguaje C lleva a cabo dos operaciones aritméticas y asigna
el resultado a una variable. Suponga que X y Y son enteros:
int Y;
int X = (Y + 4) * 3;
Traducción de esta instrucción a lenguaje ensamblador:
mov ax,Y ; mueve Y al registro AX
add ax,4 ; suma 4 al registro AX
mov bx,3 ; mueve el 3 al registro BX
imul bx ; multiplica enteros AX por BX
mov X,ax ; mueve AX a X
56
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Ejemplos de aplicación en lenguaje ensamblador
Uso de loop Uso de registros generales
ORG 100h ; asigna una dirección a la etiqueta ORG 100h
mov CX, 4 ; CX = 4 contador de bucle mov ax, 10 ; AX=10
mov BX, 1 ; BX = 1 reg base segmento de datos mov bx, 00F9h ;BX=0xF9
mov DL, 2 ; DL = 2 dirección baja del puerto de E/S inc bx ;BX++
add ax, 4 ;AX=AX+4
comienzo:
mov cx,45 ;CX=45
mov AX, BX
sub cx,cx ;CX=CX-CX
mov BX, AX
ret
loop comienzo
ret ; Retorno de procedimiento
57
Escuela Profesional de Ingeniería de
Sistemas e Informática x
Ejemplo de aplicación en lenguaje ensamblador
El siguiente ejemplo se basa en el uso de la instrucción en lenguaje
ensamblador XCHG a,b, que intercambia el contenido de dos ubicaciones,
en este caso, un registro y una palabra de memoria, en forma atómica.
Todas las CPUs Intel x86 utilizan la instrucción XCHG para la
sincronización de bajo nivel

58
Escuela Profesional de Ingeniería de
Sistemas e Informática x

¡Gracias!
Escuela Profesional de Ingeniería de
Sistemas e Informática x

You might also like