You are on page 1of 79

TIPOS DE DATOS

DB O BYTE: Define un byte, dice que la variable es un byte. DB puede contener una cadena de cualquier longitud, hasta el final de la lnea. En trminos nmeros decimales (-128 a 127)

DW o WORD: Define un Word o un array de Word. Una expresin de caracteres DW est limitada a dos caracteres. DW es de uso limitado para la definicin de cadenas. En trminos de nmeros decimales -32768 a 32767
DD o DWORD: Define un DWord, o un array de DWord. Son elementos que tienen longitud de dos palabras. Tambin esta limitada a dos caracteres de forma similar a DW. En trminos de nmeros decimales -2,147,483,648 a 2,147,483,647. DQ o QWORD: Define un QWord (ocho bytes) cuatro palabras. En cuanto al manejo de cadenas es similar a DD o DW. En trminos de nmeros decimales 1,152,921,504,606,846,976. DT o TBYTE: Define 10 Bytes. Su propsito est relacionado con los valores numricos empacados BCD (decimal codificado en binario), que son ms tiles para coprocesadores matemticos que para operaciones aritmticas.
1

JUEGO DE INSTRUCCIONES DEL ENSAMBLADOR


Aritmtica (ADC, ADD, DIV, etc): Estas instrucciones se utilizan para realizar operaciones artimticas sobre los operandos fuente y destino. Lgicas (AND, NEG, NOT, etc): Son utilizadas para realizar operaciones lgicas sobre los operandos. Transferencia ( MOV, MOVS, etc): El movimiento del contenido del operando se realiza utilizando estas instrucciones. Carga (LODS, LDS, LEA, LES, etc): Se utilizan para cargar en los diferentes registros bytes o cadenas de bytes. Salto (JA, JAE, JBE,JE,JMP, etc): estas instrucciones transfieren el flujo del proceso al operando indicado. Las transferencias pueden ser incondicional o dependiente de la existencia de ciertas condiciones, en el momento que se ejecuta un salto.
2

JUEGO DE INSTRUCCIONES DEL ENSAMBLADOR (Cont.)


Ciclos (LOOP, LOOPE, LOOPNE, etc): Permiten la transferencia, ya sea condicional o incondicional del flujo del proceso a un destino hasta que el contador del loop se decremente hasta cero.

Stack (POP, POPF, PUSH, PUSHF): Estas instrucciones proporcionan las localidades para colocar operandos y direcciones y retirarlos del stack.
Conteo (DEC, INC): Instrucciones empleadas para incrementar o decrementar el contenido de los contadores. Comparaciones (CMP, CMPS, CMPSB): Utilizadas para comparar operandos. Afectan el estado de las banderas. Bandera (CLC, CLD, CLI, CMC, etc.): Afectan el estado de las banderas.

Saltos con base de datos sin signo


Smbolo JE / JZ descripcin Salta si es igual o salta si es cero Banderas Examinadas ZF ZF CF, ZF CF

JNE /JNZ Salta si no es igual o salta si no es cero JA / JNBE Salta si es mayor o salta si no es menor o si no es igual JAE / JNB Salta si es mayor o igual o salta si no es menor

JB / JNAE Salta si es menor o salta si no es mayor o si no es igual


JBE /JNA Salta si es menor o igual o salta si no es mayor JMP Salta de forma incondicional, no pregunta

CF
CF, AF

Saltos con base de datos con signo


Smbolo JE / JZ descripcin Salta si es igual o si es cero Banderas Examinadas ZF

JNE / JNZ Salta si no es igual o salta si no es cero


JG / JNLE Salta si es mayor o salta si no es menor o igual JGE / JNL Salta si es mayor o igual o salta si no es menor JL/ JNGE Salta si es menor o salta si no es mayor o igual JLE /JNG Salta si es menor o igual o salta si no es mayor

ZF
ZF, SF, OF SF, OF SF, OF ZF, SF, OF

Pruebas aritmticas especiales


Smbolo JS JNS JC JNC JO JNO JP / JPE descripcin Salta si el signo es negativo Salta si el signo es positivo Salta si hay acarreo (igual que JB) Salta si no hay acarreo Salta si hay desbordamiento Salta si no hay desbordamiento Salta si hay paridad o salta si la paridad es par PF Banderas Examinadas SF SF CF CF OF OF PF

JNP / JPO Salta si no hay paridad o salta si la paridad es impar

Modos de direccionamiento
Los modos de direccionamiento indican la manera de obtener los operandos y son:
Direccionamiento de registro Direccionamiento inmediato Direccionamiento directo Direccionamiento indirecto mediante registro Direccionamiento indirecto por registro base Direccionamiento indexado Direccionamiento indexado respecto a una base

El tipo de direccionamiento se determina en funcin de los operandos de la instruccin. La instruccin MOV realiza transferencia de datos desde un operando origen a un operando destino (se ver ms con ms detalle en los siguientes apartados). Su formato es el siguiente:
MOV destino, origen
7

Direccionamiento de registro e inmediato


Direccionamiento de registro Cuando ambos operando son un registro. Ejemplo: MOV AX, BX ;transfiere el contenido de BX en AX

Direccionamiento inmediato Cuando el operando origen es una constante. Ejemplo: MOV AX, 500 ;almacena en AX el valor 500.
8

Direccionamiento directo
Cuando el operando es una direccin de memoria. sta puede ser especificada con su valor entre [ ], o bien mediante una variable definida previamente.

Ejemplo: MOV BX, [1000] ;


direccin de memoria DS:1000.

almacena en BX el contenido de la

MOV AX, TABLA ;

almacena en AX el contenido de la direccin de memoria DS:TABLA.


9

Direccionamiento directo (Cont.)

10

Direccionamiento indirecto mediante registro


Cuando el operando esta en memoria en una posicin contenida en un registro (BX, BP, SI o DI). Ejemplo: MOV AX, [BX] ; almacena en AX el contenido de la direccin de memoria
DS:[BX].

MOV [BP],CX ; almacena en al direccin apuntada por BP en contenido de CX.

11

Direccionamiento por registro base


Cuando el operando esta en memoria en una posicin apuntada por el registro BX o BP al que se le aade un determinado desplazamiento Ejemplo: MOV AX, [BP] + 2 ; almacena en AX el contenido de la posicin de memoria que resulte
de sumar 2 al contenido de BP (dentro de segmento de pila). Equivalente a MOV AX, [BP + 2]

Este tipo de direccionamiento permite acceder ,de una forma cmoda, a estructuras de datos que se encuentran en memoria.

12

Direccionamiento indexado
Cuando la direccin del operando es obtenida como la suma de un desplazamiento ms un ndice (DI, SI). Ejemplo: MOV AX, TABLA[DI] ; almacena en AX el contenido de la posicin de
memoria apuntada por el resultado de sumarle a TABLA el contenido de DI.

13

Direccionamiento indexado respecto a una base


Cuando la direccin del operando se obtiene de la suma de un registro base (BP o BX), de un ndice (DI, SI) y opcionalmente un desplazamiento.

Ejemplo:

MOV AX, TABLA[BX][DI] ;

almacena en AX el contenido de la posicin de memoria apuntada por la suma de TABLA, el contenido de BX y el contenido de DI.

14

Cdigo ASCII
El ASCII asigna a las letras del alfabeto, a los dgitos decimales del 0 al 9 y a varios smbolos adicionales un nmero binario de 7 bits (ponindose el bit 8 en su estado de apagado o 0).

De esta forma cada letra, dgito o carcter especial ocupa un byte en la memoria de la computadora.
Se observar que este mtodo de representacin de datos es muy ineficiente en el aspecto numrico, ya que en formato binario nos basta un solo byte para representar nmeros de 0 a 255, en cambio con el cdigo ASCII un byte puede representar nicamente un dgito.

Debido a esta ineficiencia, el cdigo ASCII es principalmente utilizado en la memoria para representar texto.
15

Mtodo BCD
BCD es un acrnimo de Binary Coded Decimal.
En esta notacin se utilizan grupos de 4 bits para representar cada dgito decimal del 0 al 9. Con este mtodo podemos representar dos dgitos por byte de informacin. An cuando este mtodo es mucho ms prctico para representacin de nmeros en la memoria en comparacin al ASCII, todava se queda por debajo del binario, ya que con un byte en el mtodo BCD solo podemos representar dgitos del 0 al 99, en cambio, en formato binario podemos representar todos los dgitos desde 0 hasta 255. Este formato es utilizado principalmente para representar nmeros muy grandes en aplicaciones mercantiles ya que facilita las operaciones con los mismos evitando errores de redondeo.
16

Instrucciones aritmticas bsicas


ADD destino, fuente Suma los dos operandos y guarda el resultado en el operando destino. SUB destino, fuente Resta el operando fuente del destino. El operando fuente siempre se resta del destino. MUL fuente El ensamblador asume que el multiplicando ser del mismo tamao que el del multiplicador, por lo tanto multiplica el valor almacenado en el registro que se le da como operando por el que se encuentre contenido en AH si el multiplicador es de 8 bits o por AX si el multiplicador es de 16 bits.

Cuando se realiza una multiplicacin con valores de 8 bits el resultado se almacena en el registro AX y cuando la multiplicacin es con valores de 16 bits el resultado se almacena en el registro par DX:AX.
17

Instrucciones aritmticas bsicas (Cont.)


DIV fuente El divisor puede ser un byte o palabra y es el operando que se le da a la instruccin.

Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits AX y si el divisor es de 16 bits se tomara como dividendo el registro par DX:AX, tomando como palabra alta DX y como baja AX.
Si el divisor fu un byte el cociente se almacena en el registro AL y el residuo en AH, si fu una palabra el cociente se guarda en AX y el residuo en DX. IDIV fuente Consiste bsicamente en lo mismo que la instruccin DIV, solo que esta ltima realiza la operacin con signo. Para sus resultados utiliza los mismos registros que la instruccin DIV.
18

Tarea No. 5
Investigar las siguientes instrucciones AAD DAA DAS AAA AAS AAM
19

Lectura de caracteres.
El siguiente cdigo nos permitir leer un carcter con eco. Leer un caracter con eco quiere decir que al leer el caracter, este lo mostrara y lo podemos hacer con el siguiente cdigo. mov ah,01h int 21h

*La primera instruccin (mov ah,01h) es lo que nos permite leer el caracter con eco. *En el ltimo solo mandamos a llamar el BIOS y listo.

Lectura de caracteres.
Este cdigo permite leer un caracter sin eco. Leer un caracter sin eco quiere decir que al pulsar un caracter esta no se mostrar hasta que se haga un mtodo para desplegar el caracter. mov ah,07h int 21h

*En la primera instruccin (mov ah,07h) permite leer el caracter sin eco * Y por ultimo se manda a llamar al BIOS.

Lectura de caracteres(Ej. 1)
.MODEL SMALL ;Directiva, define el tamao en memoria .STACK ;Asigana tamao al segmento de Pila .DATA ;Reserva un espacio para DS MSJ DB 'INTRODUCE UNA CADENA',10D,13D,'$' .CODE

INICIO: ;Define etiqueta de inicio MOV AX,@DATA ;Referencia al registro de datos MOV DS,AX ;Pasa de AX a DS
LEA DX,MSJ MOV AH,9H INT 21H ;Pasa a Dx la DIR efectiva de MSJ ;Imprime en pantalla

MOV SI,0 ;Inicializa SI CICLO: MOV AH,1H ;Espera entrada desde teclado INT 21H MOV[BX+SI],AL ;Avanza y guarda en la localidad correspondiente INC SI ;Incrementa SI CMP SI,10D ;Compara si SI=10 JNE CICLO ;Salta si no es igual MOV AH,4CH ;Interrupcion, devuelve el control al usuario INT 21H ;Int. del sistema END INICIO ;Fin etiqueta

Lectura de caracteres(Ej. 2)
.MODEL SMALL ;Directiva, define el tamao en memoria .STACK ;Asigana tamao al segmento de Pila .DATA ;Reserva un espacio para DS .CODE INICIO: ;Define etiqueta de inicio MOV AX,@DATA ;Referencia al registro de datos MOV DS,AX ;Pasa de AX a DS PIDE: MOV AH,7H ;Entrada desde teclado sin exhibir en pantalla INT 21H CMP AL,30H ;Pregunta si es cero JL FIN ;Salta si es menor CMP AL,39H ;Pregunta si es 9 JG FIN ;Salta si es mayor DESP: MOV DL,AL ;Para exhibirlo MOV AH,2H INT 21H JMP PIDE FIN: MOV AH,4CH ;Interrupcion, devuelve el control al usuario INT 21H ;Int. del sistema END INICIO ;Fin etiqueta

Qu son las palabras reservadas?


Las palabras reservadas son para uso estricto del ensamblador. stas incluyen a los operadores, directivas y smbolos predefinidos. Estas palabras no pueden usarse como identificadores. La tabla muestra la lista de palabras reservadas de Turbo Assembler:

Tabla 1.1 lista de palabras reservadas

El uso de una palabra reservada para un propsito equivocado provoca que el ensamblador genere un mensaje de error. El apndice C muestra una lista de lenguaje ensamblador

Qu son los comentarios?


Los comentarios en lenguaje ensamblador empiezan con un punto y coma (;). Los comentarios permiten hacer mas fcil entender el cdigo cuando se modifique posteriormente por el mismo programador o por otro. Los comentarios en lenguaje ensamblador (y en ningn lenguaje) no generan cdigo de maquina, cuando se ensambla el programa, una fase del ensamblado elimina los comentarios y espacios innecesarios. Cuando el ensamblador encuentra un ; supone que todo el texto a la derecha son comentarios.

Ejemplos f:

Como podemos ver los comentarios hacen mas clara la lectura del codigo al describir que hace cada linea.

if ESTRUCTURA DE CONTROL
Las estructuras de control deciden que hacer basados en la comparacin de datos. El resultado de una comparacin se almacenan

en el registro FLAGS para usarlas luego.


El ensamblador 8086 suministra la instruccin CMP para realizar comparaciones.
29

INSTRUCCIONES DE RAMIFICACIN
Las instrucciones de ramificacin pueden transferir la ejecucin del programa a un punto arbitrario. En otras palabras funcionan como goto. Hay dos tipos de ramificaciones:
Incondicional es tal cual como goto. Condicional puede o no hacer el salto dependiendo de las banderas del registro FLAGS. Si una ramificacin condicional no hace el salto, el control pasa a la siguiente instruccin.

La instruccin JMP (acrnimo de jump) hace ramificaciones incondicionales. Su argumento normalmente es la etiqueta de cdigo de la instruccin a la cual debe saltar. El ensamblador o el encadenador reemplazar la etiqueta con la direccin correcta de la instruccin.
30

SALTO CONDICIONALES SIMPLE


ZF (Bandera de cero): 0 significa no y 1 significa si resultado. JE y JZ prueban esta bandera. OF (Bandera de desbordamiento): indica un acarreo interno y uno externo en el bit de signo de alto orden(de ms a la izquierda) despus de una operacin aritmtica con signo. SF (Bandera de signo): Positivo pone la bandera en 0 y negativo pone la bandera en 1. JG y JL prueban esta bandera. CF (Bandera de acarreo): Contiene un acarreo (0 o 1) del bit de orden alto (el ms a la izquierda) despus de operaciones aritmticas y algunas operaciones de corrimiento. PF (Bandera de paridad): Un nmero impar de bits en 1 limpia la bandera a cero, y un nmero par de bits en 1 lo establece en 1.

31

SALTO CONDICIONALES SIMPLE . . . (2)


if ( EAX == 0 ) EBX = 1; else EBX = 2; cmp eax, 0 ; establece las banderas ; (ZF se fija si eax ;- 0 = 0) jz thenblock ; si ZF es 1 ;salta a thenblock 4 mov ebx, 2 ; parte ELSE del if 5 jmp next ; salta sobre la parte THEN del IF 6 thenblock: 7 mov ebx, 1 ; parte THEN del IF 8 next:

32

INSTRUCCIONES DE COMPARACIN CON Y SIN SIGNO

if ( EAX >= 5 ) EBX = 1; else EBX = 2;

cmp eax, 5 jge thenblock mov ebx, 2 jmp next thenblock: mov ebx, 1 next:

33

Lenguaje ensamblador
El lenguaje ensamblador, o assembler (assembly language en ingls), es un lenguaje de programacin de bajo nivel para las computadoras, microprocesadores, microcontroladore s y otros circuitos integrados programables.
Implementa una representacin simblica de los cdigos de mquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representacin ms directa del cdigo mquina, especfico para cada arquitectura legible por un programador.
34

Importancia del lenguaje ensamblador


Las computadoras personales, los grandes servidores, los pequeos palm y pocket pc, los telfonos mviles y una gran variedad de electrodomsticos tienen en su interior uno o ms microprocesadores. Cada microprocesador reconoce un cierto conjunto de instrucciones, cuenta con un determinado conjunto de registros y tiene una capacidad de direccionamiento concreta.
35

Importancia del lenguaje ensamblador


(Cont. 2)
Al programar en ensamblador no solo se utiliza el conjunto de instrucciones y registros de un cierto microprocesador sino que, adems, se usaran dichas instrucciones para acceder a elementos hardware, como el adaptador de video, el teclado o los buses de comunicaciones de una cierta arquitectura de computadora.

36

Tipos de lenguajes ensambladores


Todos los ensambladores realizan bsicamente las mismas tareas. Se clasifican de acuerdo a sus caractersticas:
Ensambladores Cruzados Ensambladores de una fase Ensambladores de dos faces Ensambladores Residentes Macroensambladores Microensambladores

37

ENSAMBLADORES CRUZADOS
(CROSS-ASSEMBLER)
Se denominan as los ensambladores que se utilizan en una computadora que posee un procesador diferente al que tendrn las computadoras donde va a ejecutarse el programa objeto producido.
El empleo de este tipo de traductores permite aprovechar el soporte de medios fsicos (discos, impresoras, pantallas, etc.), y de programacin que ofrecen las mquinas potentes para desarrollar programas que luego los van a ejecutar sistemas muy especializados en determinados tipos de tareas.

ENSAMBLADORES DE UNA FASE


Estos ensambladores leen una lnea del programa fuente y la traducen directamente para producir una instruccin en Lenguaje mquina o la ejecuta si se trata solo de una pseudoinstruccion. Tambin va construyendo la tabla de Simbolos a medida que van apareciendo las definiciones de Variables, etiquetas, etc. Debido a su forma de traduccin, estos ensambladores obligan a definir los smbolos antes de ser empleados para que cuando aparezca una referencia a un determinado smbolo en una instruccin, se conozca la direccin de dicho smbolo y se pueda traducir de forma correcta. Estos Ensambladores son sencillos baratos y ocupan poco espacio pero tiene el inconveniente indicado

ENSAMBLADORES DE DOS FASES


Los ensambladores de dos fases se denominan as debido a que realizan la traduccin en dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de smbolos.
De esta manera, en la segunda fase vuelven a leer el programa fuente y pueden ir traduciendo totalmente, puesto que conocen la totalidad de smbolos utilizados y las posiciones que se les ha asignado.

Estos ensambladores son los mas utilizados en la actualidad.

ENSAMBLADORES RESIDENTES
Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecucin al programa objeto producido. Este tipo de ensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo un lugar a otro, como se hacia en cross assembler, y sin necesidad de programas simuladores.
Sin embargo, puede presentar problemas de espacio de memoria, ya que el traductor ocupa espacio que no puede ser utilizado por el programador. Asimismo, tambin ocupara memoria el programa fuente y el programa objeto. Esto obliga a tener un espacio de memoria relativamente amplio y el indicado para desarrollos de pequeos sistemas de control y automatismo empleando microprocesadores.

ENSAMBLADORES MACROENSAMBLADORES
Son ensambladores que permiten el uso de microinstrucciones (macros). Debido a que su potencia, normalmente son programa robustos que no permanecen en memoria una vez generado el programa objeto. Puede variar la complejidad de los mismos dependiendo de las posibilidades de definicin y manipulacin de las macroinstrucciones, pero normalmente son programas bastantes complejos, por lo que suelen ser ensambladores residentes.

MICRO ENSAMBLADORES
Generalmente, los procesadores utilizados en las computadoras tienen un repertorio fijo de instrucciones es decir, que el interprete de las mismas interpretaba de igual forma un determinado cdigo de operacin. El programa que indica al interprete de instrucciones de la UCP como debe actuar se denomina microprograma. El programa que ayuda a realizar este microprograma se llama micro ensamblador. Existen procesadores que permiten la modificacin des sus microprogramas, para lo cual se utilizan micro ensambladores.

TRADUCCION DE ENSAMBLADOR A MQUINA

44

EL PROCESADOR
Un elemento importante del hardware de la Pc, es la unidad del sistema, que contiene una tarjeta de sistema, fuente de poder y ranuras de expansin para tarjetas opcionales. Los elementos de la tarjeta son un microprocesador INTEL (o equivalente), memoria de solo lectura (ROM) y memoria de acceso aleatorio(RAM). El cerebro de la Pc y compatibles es un microprocesaro basado en la familia 8086 de INTEL, que realiza todo el procesamiento de datos e instrucciones.

45

Registros de Propsito General (Cont. 2)

46

EL PROCESADOR (Cont. 2)
EU: Unidad de Ejecucin
AX
AH AL

BIU: Unidad de Interfaz del Bus

BX CX
DX

BH
CH

BL
CL

Control del programa


CS DS SS ES

DH
SP

DL BP
SI

DI

ALU UC FLAGS

1 2 3 N

Unidad de control del bus

Bus

Cola de instruccion es
47

APUNTADOR DE INSTRUCCIONE S

Registros de Propsito General


Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Los registros son direccionables por medio de un nombre. Los bits por convencin se numeran de derecha a izquierda.
48

Registros de Propsito General (Cont. 3)


Los registros del 8086 pueden clasificarse en tres grupos:
registros de uso general, registros apuntadores y de ndice y registros de segmentos. Adicionalmente tienen un registro de banderas que seala las condiciones respecto al funcionamiento de la unidad aritmtica y lgica (ALU).

49

Registros de Propsito General (Cont. 4)


Los registros de propsito general, como su nombre lo indica, se utilizan en la forma en que lo desee el programador. Cada uno de estos registros se puede direccionar como un registro de 16 bits (AX, BX, CX, DX) o como un registro de 8 bits (AH, AL, BH, BL, CH, CL, D H, DL). Cada uno de los registros de 16 bits est formado por la concatenacin de dos registros de 8 bits: AX = AH:AL, BX = BH:BL, CX = CH:CL y DX = DH:DL, donde el bit 0 del registro AH es el bit 8 del registro AX, etc.

50

Registros de Propsito General (Cont. 5)


AX, AH, AL (Acumulador): a menudo conserva el resultado temporal despus de una operacin aritmtica o lgica. BX, BH, BL (Base): Se utiliza para guardar la direccin base de listas de datos en la memoria. CX, CH, CL (Contador): Contiene el conteo para ciertas instrucciones de corrimientos y rotaciones, de iteraciones en el ciclo loop y operaciones repetidas de cadenas. DX, DH, DL (Datos): Contiene la parte ms significativa de un producto despus de una multiplicacin; la parte ms significativa del dividendo antes de la divisin.
51

Registros Apuntadores Y De ndices


Aunque los registros apuntadores y de ndices (a excepcin del registro apuntador de instrucciones) son tambin de uso general, se utilizan principalmente para formar la direccin efectiva o real de una localidad de memoria.
Los registros apuntadores y de ndice contienen el desplazamiento con respecto a un segmento de un dato o una instruccin.
52

Registros Apuntadores Y De ndices


(Cont 2)

Las funciones primarias de los registros puntadores y de ndice incluyen:


SP (Apuntador de pila): Contiene el desplazamiento con respecto al segmento de pila del tope de la pila del programa. El registro SP se emplea para direccionar datos en la pila cuando se ejecutan las instrucciones push y pop y cuando se llama o se regresa de un procedimiento mediante las instrucciones: call y ret, respectivamente. BP (Apuntador de base): Contiene el desplazamiento con respecto al segmento de pila de datos almacenados en la pila de un programa.
53

Registros Apuntadores Y De ndices


(Cont 3)
SI (ndice fuente): Contiene el desplazamiento con respecto al segmento de datos de un elemento de un arreglo o cadena.
.

DI (ndice destino): Contiene el desplazamiento con respecto al segmento extra de un elemento de una cadena o arreglo.
.

IP (Apuntador de instrucciones): Contiene siempre el desplazamiento con respecto al segmento de cdigo de la localidad de memoria que contiene la siguiente instruccin que va a ejecutar el microprocesador.
54

Registros De Segmentos
Los registros de segmentos se utilizan para formar la direccin efectiva o real de una localidad de memoria. Los registros de segmentos contienen la direccin de segmento de un dato o una instruccin. El cdigo y los datos de un programa en ejecucin se encuentran cada uno en uno o ms segmentos de memoria. La pila del programa ocupa otro segmento.

55

Registros De Segmentos
(Cont. 2)

Los registros de segmento son:


CS (Cdigo): Tiene la direccin lgica del segmento en que se encuentra el cdigo de un programa. Si el cdigo ocupa ms de un segmento, contiene la direccin lgica de uno de los segmentos.
.

DS (Datos): Tiene la direccin lgica del segmento en que se encuentran los datos estticos de un programa. Si los datos ocupan ms de un segmento, contiene la direccin lgica de uno de los segmentos.
56

Registros De Segmentos
(Cont. 3)

ES (Extra): Este registro tambin tiene la direccin lgica de uno de los segmentos en que se encuentran los datos estticos de un programa. Este registro se utiliza en ciertas operaciones del microprocesador para el manejo de cadenas. SS (Pila): Tiene la direccin lgica del segmento en que se encuentran la pila del sistema. La pila no puede ser mayor a un segmento.

57

Registros De Segmentos
(Cont. 3)

Para calcular una direccin efectiva o real de un dato o una instruccin, el microprocesador toma de uno de los registros de segmento el valor del segmento y de otro registro el valor del desplazamiento:
.

En el clculo de la direccin de una instruccin, el valor del segmento se encuentra en el registro de segmento de cdigo, CS, y el desplazamiento en el registro apuntador de instrucciones, IP.
58

Registros De Segmentos
(Cont. 4)
En el clculo de la direccin de un dato, el valor del segmento se encuentra en el registro de segmento de datos, DS, y el desplazamiento puede estar en los registros BX, DI, SI, o ser un nmero de 16 bits.
.

En algunas instrucciones para cadenas, tambin se emplea el registro de segmento extra, ES, y el registro DI para el clculo de la direccin de los datos. ES contiene, el valor del segmento y DI el valor del desplazamiento.
.

En el clculo de la direccin de los datos almacenados en la pila, el valor del segmento se encuentra en el registro de segmento de pila, SS, y el desplazamiento en el registro apuntador de pila, SP o en el registro apuntador de base, BP.

59

El Registro De Banderas
Cada bandera es un bit en el registro de banderas, tambin llamado registro de cdigo de condiciones. En la figura de la parte inferior se ilustra el registro de banderas del microprocesador 8086. Aunque el registro de banderas es de 16 bits slo hay nueve banderas: O, D, I, T, S, Z, A, P, C. Los otros 7 bits no son usados.

60

El Registro De Banderas
(Cont. 2)

De estas nueve banderas, seis de ellas cambian despus de ejecutar muchas de las instrucciones aritmticas y lgicas. Estas seis banderas son:
.

C (Acarreo): Indica un acarreo despus de una suma o un prstamo despus de una resta. La bandera de acarreo tambin indica condiciones de error en ciertos programas y procedimientos. P (Paridad): Es un cero para una paridad impar y un 1 para una paridad par. La paridad es un conteo de unos expresada como un nmero par e impar.
61

El Registro De Banderas
(Cont. 3)

A (Acarreo auxiliar): Indica un acarreo despus de una suma o un prstamo, despus de una resta del bit 3 al bit 4 en el resultado. Esta bandera slo se utiliza en las operaciones daa y das para ajustar el valor de AL despus de una suma o resta BCD.
Z (Cero): Indica que el resultado de una operacin aritmtica o lgica es cero. Si Z = 1, el resultado es cero y si Z = 0, el resultado no es cero.
62

El Registro De Banderas

(Cont. 4)

S (Signo): Indica el signo aritmtico del resultado despus de una suma o una resta. Si S = 1, el resultado es negativo. Si S = 0, el resultado es positivo. Se debe tener en cuenta que el valor del bit ms significativo aparece en el bit de signo en cualquier instruccin que afecte las banderas. O (Sobreflujo): Es una condicin que ocurre cuando se suman o se restan nmeros con signo. Un sobreflujo indica que el resultado ha excedido la capacidad de la mquina. Por ejemplo si se suma 7FH + 01H (127 + 1) el resultado es 80H (-128). Este resultado representa una situacin de sobreflujo sealado por la bandera para la suma con signo. Para operaciones sin signo esta bandera se ignora.
63

El Registro De Banderas

(Cont. 5)

Las otras tres banderas se utilizan para controlar ciertas caractersticas del microprocesador. Esas tres banderas y su uso son:
T (Trampa): Activa, si se pone a 1, o desactiva, si se pone a 0, el modo de ejecucin paso a paso. Este modo es utilizado por los depuradores para ejecutar las instrucciones una a la vez y permitir observar el efecto de la instruccin sobre los registros y la memoria.

64

El Registro De Banderas

(Cont. 6)

I (Interrupcin): Habilita, si se pone a 1, o deshabilita, si se pone a 0, las interrupciones al microprocesador. El estado de esta bandera se controla con las instrucciones sti (habilitar interrupciones) y cli (desactivar las interrupciones).

D (Direccin): Controla la seleccin de autoincremento o autodecremento de los registros DI o SI durante las instrucciones de cadenas y arreglos. Si D = 1 hay autodecremento en los registros y si D = 0 hay autoincremento. El estado de esta bandera se controla con las instrucciones std (habilitar direccin) y cld (desactivar direccin).

65

Lenguaje mquina, lenguaje de bajo nivel y Lenguaje de alto nivel

66

Ventajas
1. Velocidad. como trabaja directamente con el microprocesador al ejecutar un programa, como este lenguaje es el mas cercano a la mquina la computadora lo procesa ms rpido. 2. Eficiencia de tamao.Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan libreras y dems como son los lenguajes de alto nivel 3. Flexibilidad.Es flexible porque todo lo que puede hacerse con una mquina, puede hacerse en el lenguaje ensamblador de esta mquina; los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al mximo los recursos dela mquina.
67

Desventajas
Tiempo de programacin .- Un lenguaje de bajo nivel requiere ms instrucciones para realizar el mismo proceso, en comparacin con un lenguaje de alto nivel. Requiere de ms cuidado por parte del programador, dado a lo propenso a que los errores de lgica se reflejen ms fuertemente en la ejecucin. Programas fuente grandes .- Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos ms instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores.

68

Desventajas (Cont. 2)
Peligro de afectar recursos inesperadamente .- Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la mquina, programar en este lenguaje lo ms comn que pueda pasar es que la mquina se bloquee o se reinicialize. Falta de portabilidad.- Porque para cada mquina existe un lenguaje ensamblador; por ello, evidentemente no es una seleccin apropiada de lenguaje cuando deseamos codificar en una mquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.

69

.model small .stack 100 .data saludo db "Hola mundo","$" .code

main proc mov ax,seg saludo mov ds, ax mov ah,09 lea dx,saludo int 21h mov ax,4c00h int 21h main endp endm main

.model samll

.stack .data cadena1 db " Dame un numero:","$" cadena2 db " Dame otro numero:","$" cadena3 db " Dame el ultimo numero:","$" cadena4 db 10,10,13," El numero mayor es:","$" cadena5 db 10,10,13," Los tres numeros son iguales","$" dato1 db ? dato2 db ? dato3 db ? mayor db ? .code

main proc mov ax, seg cadena1 mov ds,ax mov ah,2h mov dh,1 ;posicion del texto mov dl,0 int 10h mov bl,02h ;gotoxy mov cx,05h mov ah,09h int 10h mov bl,02h ;color mov cx,10h ; repeticion mov ah,09h int 10h

lea dx,cadena1 ;pide primer numero mov ah,09 int 21h mov ah,01 ;teclado mov bl,al int 21h mov dato1,al;guardamos valor

mov ax, seg cadena2 mov ds,ax mov ah,2h mov dh,2 ;posicion del texto mov dl,0 int 10h mov bl,02h ;gotoxy mov cx,05h mov ah,09h int 10h mov bl,05h ;color mov cx,12h ; repeticion mov ah,09h int 10h

lea dx,cadena2 ;pedimos segundo valor mov ah,09 int 21h

mov ah,01 ;teclado mov bl,al int 21h mov dato2,al


mov ax, seg cadena3 mov ds,ax

lea dx,cadena3 ;pedimos segundo valor mov ah,09 int 21h mov ah,01 ;teclado mov bl,al int 21h mov dato3,al

imprime1: mov mayor,bl mov ah,09 lea dx,cadena4 int 21h

mov ah,2h mov dh,3 ;posicion del texto mov bl,dato1 mov dl,0 ;guardo dato1 en bl int 10h cmp bl,dato2 mov bl,02h ;gotoxy ;comparacion mov cx,05h jg primero mov ah,09h mov bl,dato2 int 10h mov bl,09h ;color mov cx,16h ; repeticion mov ah,09h int 10h primero:cmp bl,dato3 jg imprime1 mov bl,dato3 je iguales

mov ah,2 mov dl,mayor int 21h


jmp cero iguales: mov ah,09 lea dx,cadena5 int 21h jmp cero cero: mov ax,4c00h int 21h main endp end main

.model small .stack .data m1 db 'ingresa un numero:','$' m2 db 10,10,13,'el numero binario es:','$' salto db 10,13," ","$" cont db 0 cont2 db 0 num dw 0 base db 2 .code main proc
mov ax,seg m1;IMPRIME LETRERO DE MSN mov ds,ax mov ah,09 int 21h while: ;ciclo cmp al,0Dh ;validacion del enter je salir ;valida si es igual se va a salir mov ah,01h int 21h ;captura numeros mov ah,0 sub ax,30h ;resta para hacer la convercion decimal push ax ;guarda en pila add ax,30h ;suma 30h para que regrese al valor de enter si no queda en DD inc cont ;contardor para ver cuantos elementos guarda jmp while ; regresa al ciclo mientras no tecle enter

mov ax,0 ;limpia los registro ax poniendolos a 0 fuera: pop ax pila mul bx ;multiplicar los elementos de ax por bx:unidad,decena,centena... add num,ax ;suma los numeros para hacer la cantidad ejemplo 123 mov ax,bx ;mueve los valores de bx a ax mov bx,10 ;mover 10 a bx esto para multiplicar y aumentar el valor de unidad,decena.. mul bx ;multiplica por 10 para aunmentar mov bx,ax ;mueve el valor de ax a bx dec cont ;decrementa valores de la pila cmp cont,0 ; si el contador llega a 0 se sale ja fuera ;ciclo2 ;saca elementos de la

salir: pop ax dec cont mov bx,1 lea dx,m2 mov ah,09 int 21h

;saca al enter de la pila ;decrementa uno del contador ;pone 1 en el registro bx ;IMPRIME LETRERO DE MSN

mov ax,num

;limpia la variable ax

bin: ;ciclo de conversion binaria mov bx,2 ;inicializa a bx en 2 para divir ax div bx ;divide el valor decimal en 2 en ax para calcular la conversion mov bx,ax ;mueve el valor de ax a bx para seguir dividiendo hasta que sea 0 push dx ;guardar el residuo de la pila el cual esta en dx mov bx,0 ;limpia bx iniciando en 0 inc cont2 ;incrementa un contador2 cmp al,0 ;si despues de la ultima de division el divedendo es 0 se sale je imprimir ;se va a imprimir si es = jmp bin ;buelve hacer el ciclo

imprimir: ;continuacion de imprimi mov ax,0 ;limpia ax imprimirbin: ;ciclo imprimir binario pop dx ;saca los elementos de la pila 0,1 add dl,30h ;le suma 30h hexadecimal para que no imprima otros valores mov ah,02h ;parte de la impresion int 21h ;manda a imprimir en pantalla dec cont2 ;decrementa contador2 cmp cont2,0 ;si contador2 es igual a 0 se sale ja imprimirbin ;regresa al ciclo imprimirbin mov ax,4c00h ;regresa el control al sistema int 21h endp main end main

.model small .stack .data cadena1 db "Ingresa tu cadena de parentesis:","$" cadena2 db 10,10,13,"Existen mas parentesis (","$" cadena3 db 10,10,13,"Existen mas parentesis )","$" cadena4 db 10,10,13,"Expresion de parentesis correcta","$" A db ? B db ? .code main proc mov ax,seg cadena1 mov ds,ax mov ah,09 lea dx,cadena1 int 21h

imprimir: mov al,B; pasa el valor del contador B a al cmp A,al ;comrpueba si en contador A es mayor al contador B ja mayor jb menor je igual

while: ;captura los parentesis por teclado mov ah,01d int 21h

mayor: mov ah,09 lea dx,cadena2 int 21h ;imprime dx jmp salir
menor: mov ah,09 lea dx,cadena3 int 21h ;imprime cadena menor2 jmp salir igual: mov ah,09 lea dx,cadena4 int 21h ;imprime cadena igual1 jmp salir

;comprueba si se da enter si es asi se va a imprimir cmp al,13 je imprimir ;comprueba si es parentesis abierto cmp al,28h je Pabierto ;comprueba si es parentesis cerrado cmp al,29h je Pcerrado ;si es abierto incrementa el contador A Pabierto: inc A jmp while ;si es cerrado incrementa el contador B Pcerrado: inc B jmp while

salir: mov ax,4c00h int 21h main endp end main

.model small .stack .data cadena1 db "Dame un numero:","$" salto db 10,10,13," ","$" num db ? .code main proc mov ax,seg cadena1 mov ds, ax lea dx,cadena1 mov ah,09 int 21h ;pedimos un nmero mov ah,01h int 21h ;esa interrupcion nos da el carcter (asccii) del nmero en AL sub al,30h ;Ajustamos para realizar operaciones internas mov num,al ;Tabla a visualizar mov cl,1 ;Contador auxiliar

tabla: mov al,num mul cl aam mov bx,ax mov ah,02h mov dl,' ' int 21h mov ah,02h mov dl,bh add dl,30h int 21h mov ah,02h mov dl,bl add dl,30h int 21h inc cl cmp cl,11 ;AL = N ;AL = AL * CL ;Ajuste en ASCII para separa Acarreo ;AX lo almacenamos en BX

;Separador

;PARTE ALTA

;PARTE BAJA

;CL = CL + 1

je salir jmp cont je salir ;IF CL = 11 jne tabla ;[Operaciones] salir: .exit end

.model small .stack .data cadena1 db 10,10,13," Hola mundo","$" i dw 0 .code main proc mov ax, seg cadena1 mov ds,ax mov cx,i while:cmp cx,10 je finwhile lea dx,cadena1 mov ah,09h int 21h inc cx jmp while finwhile: mov ax,4c00h int 21h

main endp end main

.model small .stack .data mensaje db 'Ingresa un numero del 1 al 4:',10,13,'$' base db 2 par db 10,10,13,'par','$' impar db 10,10,13,'impar','$' facto db 1 salto db 10,13,'el factorial es:','$' salto1 db 10,13,'el Exponente es:','$' .code main proc mov ax,seg mensaje ;mensaje mov ds,ax mov ah,09 int 21h mov ah,01;pide teclado int 21h sub al,30h;resta para convertirlo a decimal mov facto,al;rescatamos nuestro numero div base ;divide entre 2 cmp ah,0 je npar

mov dl, Al add dl, 30h mov ax,seg salto1 ;mensaje mov ds,ax mov ah,09 int 21h mov ah,02h int 21h

mov ah,02h int 21h

pop ax mov dl, Ah add dl, 30h

pop ax mov dl, Ah add dl, 30h

mov ah,02h int 21h

lea dx,impar mov ah,09 int 21h mov ax,0 mov cx,0 mov cl,facto mov al,facto ;realiza multiplicacion mov bx,ax mov ax,1 expon: mul bx loop expon

jmp salir npar: mov ax,0 mov cx,0 mov cl,facto sub cl,1 mov al,facto CICLO: mul cx loop CICLO ;imprime 2 numeros mov bl,10 div bl push ax mov dl, Al add dl, 30h mov ax,seg salto ;mensaje mov ds,ax mov ah,09 int 21h

mov ah,02h int 21h

lea dx,par mov ah,09 int 21h salir: mov ax,4c00h int 21h

;imprime 2 numeros mov bl,10 div bl push ax

main endp end main

;CONVERTIDOR ;10-100 f-C ;101-1000 C-F ;500 SALIR ;C=(F-32).5/9

while: fuera: cmp al,0Dh pop ax .model small je salir1 .stack mul bx .data mov ah,01h m1 db 'MENU','$' add num,ax m2 db 10,13,'Ingresa la temperatura:','$' m3 db 10,13,'Ingresa valores de 1 al 100 para convertir de farethein a int 21h mov ax,bx celcius','$' m4 db 10,13,'Igresa valores de 101 a 1000 para convertir de celcius a mov ah,0 mov bx,10 farethein','$' m5 db 10,13,'Ingresa 5000 para salir','$' sub ax,30h mul bx m6 db 10,13,'los grados Fareheing','$' m7 db 10,13,'los grados Celcius','$' push ax mov bx,ax salto db 10,10,13,'la conversion es:','$' cont db 0 add ax,30h dec cont num dw 0 f dw 0 inc cont cmp cont,0 valor dw 10 jmp while ja fuera .code
main proc mov ax, seg m1 mov ds,ax mov ah,09 int 21h lea dx,m3 mov ah,09 int 21h lea dx,m4 mov ah,09 int 21h lea dx,m5 mov ah,09 int 21h lea dx,m2 mov ah,09 int 21h

primero: ;C=(F-32).5/9 sub ax,32 mov bx,5 mul bx mov bx,9 div bx push ax jmp salir segundo: cmp ax,1001 jb segundo1 cmp ax,5000 je salir: segundo1: mov bx,9 mul bx mov bx,5 div bx add ax,32 salir:

mov ax,num salir1: lea dx,salto mov ah,09 int 21h pop ax dec cont mov bx,1 mov ax,0 cmp ax,100 jb primero cmp ax,101 ja segundo

pop ax add al,30h mov dl,al mov ah,02h int 21h mov ax,4c00h int 21h

; cm main endp end main

You might also like