Tipos de Datos

79
1 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 línea. En términos números decimales (-128 a 127) DW o WORD: Define un Word o un array de Word. Una expresión de caracteres DW está limitada a dos caracteres. DW es de uso limitado para la definición de cadenas. En términos de números decimales -32768 a 32767 DD o DWORD: Define un DWord, o un array de DWord. Son elementos que tienen longitud de dos palabras. También esta limitada a dos caracteres de forma similar a DW. En términos de números 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 términos de números decimales 1,152,921,504,606,846,976. DT o TBYTE: Define 10 Bytes. Su propósito está relacionado con los valores numéricos empacados BCD

Transcript of Tipos de Datos

Page 1: Tipos de Datos

1

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 línea. En términos números decimales (-128 a 127)

• DW o WORD: Define un Word o un array de Word. Una expresión de caracteres DW está limitada a dos caracteres. DW es de uso limitado para la definición de cadenas. En términos de números decimales -32768 a 32767

• DD o DWORD: Define un DWord, o un array de DWord. Son elementos que tienen longitud de dos palabras. También esta limitada a dos caracteres de forma similar a DW. En términos de números 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 términos de números decimales 1,152,921,504,606,846,976.

• DT o TBYTE: Define 10 Bytes. Su propósito está relacionado con los valores numéricos empacados BCD (decimal codificado en binario), que son más útiles para coprocesadores matemáticos que para operaciones aritméticas.

Page 2: Tipos de Datos

2

JUEGO DE INSTRUCCIONES DEL ENSAMBLADOR

Aritmética (ADC, ADD, DIV, etc): Estas instrucciones se utilizan para realizar operaciones artiméticas sobre los operandos fuente y destino.

Lógicas (AND, NEG, NOT, etc): Son utilizadas para realizar operaciones lógicas 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.

Page 3: Tipos de Datos

3

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.

Page 4: Tipos de Datos

4

Saltos con base de datos sin signo

Símbolo descripción Banderas Examinadas

JE / JZ Salta si es igual o salta si es cero ZF

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

JA / JNBE Salta si es mayor o salta si no es menor o si no es igual CF, ZF

JAE / JNB Salta si es mayor o igual o salta si no es menor CF

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

JBE /JNA Salta si es menor o igual o salta si no es mayor CF, AF

JMP Salta de forma incondicional, no pregunta

Page 5: Tipos de Datos

5

Saltos con base de datos con signo

Símbolo descripción Banderas Examinadas

JE / JZ Salta si es igual o si es cero ZF

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

JG / JNLE Salta si es mayor o salta si no es menor o igual ZF, SF, OF

JGE / JNL Salta si es mayor o igual o salta si no es menor SF, OF

JL/ JNGE Salta si es menor o salta si no es mayor o igual SF, OF JLE /JNG Salta si es menor o igual o salta si no es mayor ZF, SF, OF

Page 6: Tipos de Datos

6

Pruebas aritméticas especialesSímbolo descripción Banderas ExaminadasJS Salta si el signo es negativo SF

JNS Salta si el signo es positivo SF

JC Salta si hay acarreo (igual que JB) CF

JNCSalta si no hay acarreo CF

JO Salta si hay desbordamiento OF

JNO Salta si no hay desbordamiento OF

JP / JPE Salta si hay paridad o salta si la paridad es par PF

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

Page 7: Tipos de Datos

7

Modos de direccionamientoLos 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 función de los operandos de la instrucción. La instrucción MOV realiza transferencia de datos desde un operando origen a un operando destino (se verá más con más detalle en los siguientes apartados). Su formato es el siguiente:

MOV destino, origen

Page 8: Tipos de Datos

8

Direccionamiento de registro e inmediato

Direccionamiento de registroCuando ambos operando son un registro. Ejemplo:

MOV AX, BX ;transfiere el contenido de BX en AX

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

Page 9: Tipos de Datos

9

Direccionamiento directo

Cuando el operando es una dirección de memoria. Ésta puede ser especificada con su valor entre [ ], o bien mediante una variable definida previamente.

Ejemplo:MOV BX, [1000] ; almacena en BX el contenido de la dirección de memoria DS:1000.

MOV AX, TABLA ; almacena en AX el contenido de la dirección de memoria DS:TABLA.

Page 10: Tipos de Datos

10

Direccionamiento directo (Cont.)

Page 11: Tipos de Datos

11

Direccionamiento indirecto mediante registro

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

MOV [BP],CX ; almacena en al dirección apuntada por BP en contenido de CX.

Page 12: Tipos de Datos

12

Direccionamiento por registro baseCuando el operando esta en memoria en una posición apuntada por el registro BX o BP al que se le añade un determinado desplazamientoEjemplo:MOV AX, [BP] + 2 ; almacena en AX el contenido de la posición 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 cómoda, a estructuras de datos que se encuentran en memoria.

Page 13: Tipos de Datos

13

Direccionamiento indexadoCuando la dirección del operando es obtenida como la suma de un desplazamiento más un índice (DI, SI).Ejemplo:MOV AX, TABLA[DI] ; almacena en AX el contenido de la posición de memoria apuntada por el resultado de sumarle a TABLA el contenido de DI.

Page 14: Tipos de Datos

14

Direccionamiento indexado respecto a una base

Cuando la dirección 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 posición de memoria apuntada por la suma de TABLA, el contenido de BX y el contenido de DI.

Page 15: Tipos de Datos

15

Código ASCII El ASCII asigna a las letras del alfabeto, a los dígitos decimales del 0 al 9 y a varios símbolos adicionales un número binario de 7 bits (poniéndose el bit 8 en su estado de apagado o 0).

De esta forma cada letra, dígito o carácter especial ocupa un byte en la memoria de la computadora.

Se observar que este método de representación de datos es muy ineficiente en el aspecto numérico, ya que en formato binario nos basta un solo byte para representar números de 0 a 255, en cambio con el código ASCII un byte puede representar únicamente un dígito.

Debido a esta ineficiencia, el código ASCII es principalmente utilizado en la memoria para representar texto.

Page 16: Tipos de Datos

16

Método BCD BCD es un acrónimo de Binary Coded Decimal.

En esta notación se utilizan grupos de 4 bits para representar cada dígito decimal del 0 al 9. Con este método podemos representar dos dígitos por byte de información.

Aún cuando este método es mucho más práctico para representación de números en la memoria en comparación al ASCII, todavía se queda por debajo del binario, ya que con un byte en el método BCD solo podemos representar dígitos del 0 al 99, en cambio, en formato binario podemos representar todos los dígitos desde 0 hasta 255.

Este formato es utilizado principalmente para representar números muy grandes en aplicaciones mercantiles ya que facilita las operaciones con los mismos evitando errores de redondeo.

Page 17: Tipos de Datos

17

Instrucciones aritméticas básicasADD 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 tamaño 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 multiplicación con valores de 8 bits el resultado se almacena en el registro AX y cuando la multiplicación es con valores de 16 bits el resultado se almacena en el registro par DX:AX.

Page 18: Tipos de Datos

18

Instrucciones aritméticas básicas (Cont.)

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

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 básicamente en lo mismo que la instrucción DIV, solo que esta última realiza la operación con signo.

Para sus resultados utiliza los mismos registros que la instrucción DIV.

Page 19: Tipos de Datos

19

Tarea No. 5

Investigar las siguientes instrucciones• AAD• DAA• DAS• AAA• AAS• AAM

Page 20: Tipos de Datos

Lectura de caracteres.

El siguiente código nos permitirá leer un carácter con eco.Leer un caracter con eco quiere decir que al leer el caracter, este lo mostrara y lo podemos hacer con el siguiente código.

mov ah,01hint 21h

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

Page 21: Tipos de Datos

Lectura de caracteres.

Este código 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 método para desplegar el caracter.

mov ah,07hint 21h

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

Page 22: Tipos de Datos

• .MODEL SMALL ;Directiva, define el tamaño en memoria • .STACK ;Asigana tamaño 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 ;Pasa a Dx la DIR efectiva de MSJ • MOV AH,9H ;Imprime en pantalla• INT 21H• • 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. 1)

Page 23: Tipos de Datos

• .MODEL SMALL ;Directiva, define el tamaño en memoria • .STACK ;Asigana tamaño 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

Lectura de caracteres(Ej. 2)

Page 24: Tipos de Datos

¿Qué son las palabras reservadas?• Las palabras reservadas son para uso estricto del ensamblador. Éstas incluyen a los

operadores, directivas y símbolos 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

Page 25: Tipos de Datos
Page 26: Tipos de Datos

• El uso de una palabra reservada para un propósito equivocado provoca que el ensamblador genere un mensaje de error. El apéndice C muestra una lista de lenguaje ensamblador

Page 27: Tipos de Datos

¿Qué son los comentarios?

• Los comentarios en lenguaje ensamblador empiezan con un punto y coma (;). Los comentarios permiten hacer mas fácil entender el código cuando se modifique posteriormente por el mismo programador o por otro. Los comentarios en lenguaje ensamblador (y en ningún lenguaje) no generan código 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.

Page 28: Tipos de Datos

• Ejemplos f:

Como podemos ver los comentarios hacen masclara la lectura del codigo al describir que hace

cada linea.

Page 29: Tipos de Datos

ifESTRUCTURA DE CONTROL

• Las estructuras de control deciden que hacer

basados en la comparación de datos.

• El resultado de una comparación se almacenan

en el registro FLAGS para usarlas luego.

• El ensamblador 8086 suministra la instrucción

CMP para realizar comparaciones. 29

Page 30: Tipos de Datos

INSTRUCCIONES DE RAMIFICACIÓN

• Las instrucciones de ramificación pueden transferir la ejecución 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 ramificación condicional no hace el salto, el control pasa a la siguiente instrucción.

• La instrucción JMP (acrónimo de jump) hace ramificaciones incondicionales. Su argumento normalmente es la etiqueta de código de la instrucción a la cual debe saltar. El ensamblador o el encadenador reemplazará la etiqueta con la dirección correcta de la instrucción. 30

Page 31: Tipos de Datos

SALTO CONDICIONALES SIMPLE

31

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 más a la izquierda) después de una operación aritmética 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 más a la izquierda) después de operaciones aritméticas y algunas operaciones de corrimiento.

PF (Bandera de paridad): Un número impar de bits en 1 limpia la bandera a cero, y un número par de bits en 1 lo establece en 1.

Page 32: Tipos de Datos

32

SALTO CONDICIONALES SIMPLE . . . (2)

if ( EAX == 0 )EBX = 1;elseEBX = 2;

cmp eax, 0 ; establece las banderas ; (ZF se fija si eax ;- 0 = 0)

jz thenblock ; si ZF es 1 ;salta a thenblock4 mov ebx, 2 ; parte ELSE del if5 jmp next ; salta sobre la parte THEN del IF6 thenblock:7 mov ebx, 1 ; parte THEN del IF8 next:

Page 33: Tipos de Datos

INSTRUCCIONES DE COMPARACIÓN CON Y SIN SIGNO

33

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

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

Page 34: Tipos de Datos

Lenguaje ensamblador

• El lenguaje ensamblador, o assembler (assembly language en inglés), es un lenguaje de programación de bajo nivel para las computadoras, microprocesadores, microcontroladores y otros circuitos integrados programables.

• Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representación más directa del código máquina, específico para cada arquitectura legible por un programador.

34

Page 35: Tipos de Datos

Importancia del lenguaje ensamblador

Las computadoras personales, los grandes servidores, los pequeños palm y pocket pc, los teléfonos móviles y una gran variedad de electrodomésticos tienen en su interior uno o más microprocesadores.

Cada microprocesador reconoce un cierto conjunto de instrucciones, cuenta con un determinado conjunto de registros y tiene una capacidad de direccionamiento concreta.

35

Page 36: Tipos de Datos

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, además, 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

Page 37: Tipos de Datos

Tipos de lenguajes ensambladores

Todos los ensambladores realizan básicamente las mismas tareas. Se clasifican de acuerdo a sus características:

– Ensambladores Cruzados– Ensambladores de una fase– Ensambladores de dos faces– Ensambladores Residentes– Macroensambladores– Microensambladores

37

Page 38: Tipos de Datos

ENSAMBLADORES CRUZADOS(CROSS-ASSEMBLER)

Se denominan así los ensambladores que se utilizan en una computadora que posee un procesador diferente al que tendrán las computadoras donde va a ejecutarse el programa objeto producido.

El empleo de este tipo de traductores permite aprovechar el soporte de medios físicos (discos, impresoras, pantallas, etc.), y de programación que ofrecen lasmáquinas potentes para desarrollar programas que luego los van a ejecutar sistemas muy especializados en determinados tipos de tareas.

Page 39: Tipos de Datos

ENSAMBLADORES DE UNA FASEEstos ensambladores leen una línea del programa fuente y la traducen directamente para producir una instrucción en Lenguaje máquina o la ejecuta si se trata solo de una pseudoinstruccion. También va construyendo la tabla de Simbolos a medida que van apareciendo las definiciones de Variables, etiquetas, etc.

Debido a su forma de traducción, estos ensambladores obligan a definir los símbolos antes de ser empleados para que cuando aparezca una referencia a un determinado símbolo en una instrucción, se conozca la dirección de dicho símbolo y se pueda traducir de forma correcta. EstosEnsambladores son sencillos baratos y ocupan poco espacio pero tiene el inconveniente indicado

Page 40: Tipos de Datos

ENSAMBLADORES DE DOS FASES

Los ensambladores de dos fases se denominan así debido a que realizan la traducción en dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de símbolos.

De esta manera, en la segunda fase vuelven a leer el programa fuente y pueden ir traduciendo totalmente, puesto que conocen la totalidad de símbolos utilizados y las posiciones que se les ha asignado.

Estos ensambladores son los mas utilizados en la actualidad.

Page 41: Tipos de Datos

ENSAMBLADORES RESIDENTES

Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecución 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, también 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 pequeños sistemas de control y automatismo empleando microprocesadores.

Page 42: Tipos de Datos

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 definición y manipulación de las macroinstrucciones, pero normalmente son programas bastantes complejos, por lo que suelen ser ensambladores residentes.

Page 43: Tipos de Datos

MICRO ENSAMBLADORESGeneralmente, 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 código de operación.

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 modificación des sus microprogramas, para lo cual se utilizan micro ensambladores.

Page 44: Tipos de Datos

TRADUCCION DE ENSAMBLADOR A MÁQUINA

44

Page 45: Tipos de Datos

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 expansión 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

Page 46: Tipos de Datos

Registros de Propósito General (Cont. 2)

46

Page 47: Tipos de Datos

EL PROCESADOR (Cont. 2)

47

AH AL

BH BL

CH CL

DH DL

SP

BP

SI

DI

EU: Unidad de Ejecución

ALU

UC

FLAGS

APUNTADOR DE INSTRUCCIONES

CS

DS

SS

ES

1

2

3

N

Unidad de control del bus

Control del programa

BIU: Unidad de Interfaz del Bus

Cola de instruccion

es

AXBXCXDX

Bus

Page 48: Tipos de Datos

Registros de Propósito General

Los registros del procesador se emplean para controlar instrucciones en ejecución, manejar direccionamiento de memoria y proporcionar capacidad aritmética.

Los registros son direccionables por medio de un nombre. Los bits por convención se numeran de derecha a izquierda.

48

Page 49: Tipos de Datos

Registros de Propósito 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 señala las condiciones respecto al funcionamiento de la unidad aritmética y lógica (ALU).

49

Page 50: Tipos de Datos

Registros de Propósito General (Cont. 4)

Los registros de propósito 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 concatenación 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

Page 51: Tipos de Datos

Registros de Propósito General (Cont. 5)

• AX, AH, AL (Acumulador): a menudo conserva el resultado temporal después de una operación aritmética o lógica.

• BX, BH, BL (Base): Se utiliza para guardar la dirección 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 más significativa de un producto después de una multiplicación; la parte más significativa del dividendo antes de la división.

51

Page 52: Tipos de Datos

Registros Apuntadores Y De Índices

Aunque los registros apuntadores y de índices (a excepción del registro apuntador de instrucciones) son también de uso general, se utilizan principalmente para formar la dirección 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 instrucción.

52

Page 53: Tipos de Datos

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

Page 54: Tipos de Datos

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 código de la localidad de memoria que contiene la siguiente instrucción que va a ejecutar el microprocesador.

54

Page 55: Tipos de Datos

Registros De Segmentos Los registros de segmentos se utilizan para formar la dirección efectiva o real de una localidad de memoria. Los registros de segmentos contienen la dirección de segmento de un dato o una instrucción. El código y los datos de un programa en ejecución se encuentran cada uno en uno o más segmentos de memoria. La pila del programa ocupa otro segmento.

55

Page 56: Tipos de Datos

Registros De Segmentos (Cont. 2)

Los registros de segmento son:• CS (Código): Tiene la dirección lógica del segmento en

que se encuentra el código de un programa. Si el código ocupa más de un segmento, contiene la dirección lógica de uno de los segmentos.

.

• DS (Datos): Tiene la dirección lógica del segmento en que se encuentran los datos estáticos de un programa. Si los datos ocupan más de un segmento, contiene la dirección lógica de uno de los segmentos.

56

Page 57: Tipos de Datos

Registros De Segmentos (Cont. 3)

• ES (Extra): Este registro también tiene la dirección lógica de uno de los segmentos en que se encuentran los datos estáticos de un programa. Este registro se utiliza en ciertas operaciones del microprocesador para el manejo de cadenas.

• SS (Pila): Tiene la dirección lógica del segmento en que se encuentran la pila del sistema. La pila no puede ser mayor a un segmento.

57

Page 58: Tipos de Datos

Registros De Segmentos (Cont. 3)

Para calcular una dirección efectiva o real de un dato o una instrucción, el microprocesador toma de uno de los registros de segmento el valor del segmento y de otro registro el valor del desplazamiento:

.

• En el cálculo de la dirección de una instrucción, el valor del segmento se encuentra en el registro de segmento de código, CS, y el desplazamiento en el registro apuntador de instrucciones, IP.

58

Page 59: Tipos de Datos

Registros De Segmentos (Cont. 4)

• En el cálculo de la dirección 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 número de 16 bits. .

• En algunas instrucciones para cadenas, también se emplea el registro de

segmento extra, ES, y el registro DI para el cálculo de la dirección de los datos. ES contiene, el valor del segmento y DI el valor del desplazamiento. .

• En el cálculo de la dirección 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

Page 60: Tipos de Datos

El Registro De Banderas

Cada bandera es un bit en el registro de banderas, también llamado registro de código 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 sólo hay nueve banderas: O, D, I, T, S, Z, A, P, C. Los otros 7 bits no son usados.

60

Page 61: Tipos de Datos

El Registro De Banderas (Cont. 2)

De estas nueve banderas, seis de ellas cambian después de ejecutar muchas de las instrucciones aritméticas y lógicas. Estas seis banderas son: . • C (Acarreo): Indica un acarreo después de una suma o un préstamo

después de una resta. La bandera de acarreo también 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 número par e impar.

61

Page 62: Tipos de Datos

El Registro De Banderas (Cont. 3)

• A (Acarreo auxiliar): Indica un acarreo después de una suma o un préstamo, después de una resta del bit 3 al bit 4 en el resultado. Esta bandera sólo se utiliza en las operaciones daa y das para ajustar el valor de AL después de una suma o resta BCD.

• Z (Cero): Indica que el resultado de una operación aritmética o lógica es cero. Si Z = 1, el resultado es cero y si Z = 0, el resultado no es cero.

62

Page 63: Tipos de Datos

El Registro De Banderas (Cont. 4)

• S (Signo): Indica el signo aritmético del resultado después 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 más significativo aparece en el bit de signo en cualquier instrucción que afecte las banderas.

• O (Sobreflujo): Es una condición que ocurre cuando se suman o

se restan números con signo. Un sobreflujo indica que el resultado ha excedido la capacidad de la máquina. Por ejemplo si se suma 7FH + 01H (127 + 1) el resultado es 80H (-128). Este resultado representa una situación de sobreflujo señalado por la bandera para la suma con signo. Para operaciones sin signo esta bandera se ignora.

63

Page 64: Tipos de Datos

El Registro De Banderas (Cont. 5)

Las otras tres banderas se utilizan para controlar ciertas características 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 ejecución 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 instrucción sobre los registros y la memoria.

64

Page 65: Tipos de Datos

El Registro De Banderas (Cont. 6)

• I (Interrupción): 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 (Dirección): Controla la selección 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 dirección) y cld (desactivar dirección).

65

Page 66: Tipos de Datos

Lenguaje máquina, lenguaje de bajo nivel y Lenguaje de alto nivel

66

Page 67: Tipos de Datos

Ventajas• 1. Velocidad.

como trabaja directamente con el microprocesador al ejecutar un programa, como este lenguaje es el mas cercano a la máquina la computadora lo procesa más rápido.

• 2. Eficiencia de tamaño.-Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan librerías y demás como son los lenguajes de alto nivel

• 3. Flexibilidad.- Es flexible porque todo lo que puede hacerse con una máquina, puede hacerse en el lenguaje ensamblador de esta máquina; los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al máximo los recursos dela máquina.

67

Page 68: Tipos de Datos

Desventajas

• Tiempo de programación .- Un lenguaje de bajo nivel requiere más instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel. Requiere de más cuidado por parte del programador, dado a lo propenso a que los errores de lógica se reflejen más fuertemente en la ejecución.

• Programas fuente grandes .- Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos más 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

Page 69: Tipos de Datos

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 máquina, programar en este lenguaje lo más común que pueda pasar es que la máquina se bloquee o se reinicialize.

• Falta de portabilidad.- Porque para cada máquina existe un lenguaje ensamblador; por ello, evidentemente no es una selección apropiada de lenguaje cuando deseamos codificar en una máquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.

69

Page 70: Tipos de Datos

• .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

Page 71: Tipos de Datos

• .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 •

Page 72: Tipos de Datos

mov ah,01 ;teclado mov bl,al int 21h mov dato2,al mov ax, seg cadena3 mov ds,ax mov ah,2h mov dh,3 ;posicion del texto mov dl,0 int 10h mov bl,02h ;gotoxy mov cx,05h mov ah,09h int 10h mov bl,09h ;color mov cx,16h ; repeticion mov ah,09h int 10h

lea dx,cadena3 ;pedimos segundo valor mov ah,09 int 21h mov ah,01 ;teclado mov bl,al int 21h mov dato3,al mov bl,dato1 ;guardo dato1 en bl cmp bl,dato2 ;comparacion jg primero mov bl,dato2 primero:cmp bl,dato3 jg imprime1 mov bl,dato3 je iguales

imprime1: mov mayor,bl mov ah,09 lea dx,cadena4 int 21h 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

Page 73: Tipos de Datos

• .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• • • • salir:• pop ax ;saca al enter de la pila• dec cont ;decrementa uno del contador• mov bx,1 ;pone 1 en el registro bx• • lea dx,m2 ;IMPRIME LETRERO DE MSN• mov ah,09 • int 21h•

mov ax,0 ;limpia los registro ax poniendolos a 0 fuera: ;ciclo2 pop ax ;saca elementos de la 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

Page 74: Tipos de Datos

• 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

Page 75: Tipos de Datos

• .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• • • while:• ;captura los parentesis por teclado • mov ah,01d• int 21h • • ;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•

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 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 salir: mov ax,4c00h int 21h main endpend main

Page 76: Tipos de Datos

• .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 número• mov ah,01h• int 21h•• ;esa interrupcion nos da el carácter (asccii) del número 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 ;AL = N• mul cl ;AL = AL * CL• aam ;Ajuste en ASCII para separa Acarreo• mov bx,ax ;AX lo almacenamos en BX

• mov ah,02h • mov dl,' ' ;Separador• int 21h

• mov ah,02h • mov dl,bh ;PARTE ALTA• add dl,30h • int 21h

• mov ah,02h • mov dl,bl ;PARTE BAJA• add dl,30h • int 21h

• inc cl ;CL = CL + 1• cmp cl,11• • je salir• jmp cont• je salir ;IF CL = 11• jne tabla ;[Operaciones]• salir:• • .exit• end

Page 77: Tipos de Datos

• .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•

Page 78: Tipos de Datos

• .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• • • 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 • • • • ;imprime 2 numeros• mov bl,10• div bl• push ax•

mov dl, Al add dl, 30h mov ax,seg salto1 ;mensaje mov ds,ax mov ah,09 int 21h mov ah,02h int 21h pop ax mov dl, Ah add dl, 30h mov ah,02h int 21h 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 pop ax mov dl, Ah add dl, 30h mov ah,02h int 21h

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

mov ax,4c00h int 21h

main endpend main

Page 79: Tipos de Datos

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

• .model small• .stack• .data• m1 db 'MENU','$'• m2 db 10,13,'Ingresa la temperatura:','$'• m3 db 10,13,'Ingresa valores de 1 al 100 para convertir de farethein a celcius','$'• m4 db 10,13,'Igresa valores de 101 a 1000 para convertir de celcius a farethein','$'• m5 db 10,13,'Ingresa 5000 para salir','$'• m6 db 10,13,'los grados Fareheing','$'• m7 db 10,13,'los grados Celcius','$' • salto db 10,10,13,'la conversion es:','$'• cont db 0• num dw 0• f dw 0 • valor dw 10• • .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•

while: cmp al,0Dh je salir1 mov ah,01h int 21h mov ah,0 sub ax,30h push ax add ax,30h inc cont jmp while salir1: lea dx,salto mov ah,09 int 21h pop ax dec cont mov bx,1 mov ax,0

fuera: pop ax mul bx add num,ax mov ax,bx mov bx,10 mul bx mov bx,ax dec cont cmp cont,0 ja fuera mov ax,num cmp ax,100 jb primero cmp ax,101 ja segundo

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: pop ax add al,30h mov dl,al mov ah,02h int 21h mov ax,4c00h int 21h ; cm main endpend main