modos de direcionamiento de la memoria de programa

35
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA •Direccionamiento Intrasegmento. •Direccionamiento Intersegmento. •Instruciones de salto. •Introduccion al lenguaje ensamblador.

Upload: gbermeo

Post on 12-Jun-2015

5.462 views

Category:

Travel


0 download

TRANSCRIPT

Page 1: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

•Direccionamiento Intrasegmento.•Direccionamiento Intersegmento.•Instruciones de salto.•Introduccion al lenguaje ensamblador.

Page 2: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Modos de Direccionamiento de la Memoria de Programa

• Direccionamiento Intra-segmento Directo

EA= IPnuevo=IPviejo+desplazamiento

• Ejemplo1:1000:0104 EB06 JMP 010C

• Ejemplo 2:• 1000:0104 E92D11 JMP 1234

Desplazamientoen la instrucción

IP

+ EA de salto

Page 3: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Modos de Direccionamiento de la Memoria de Programa

• Direccionamiento Intra-Segmento Directo.

Ejemplo 3:2000:1007 EBF8 JMP 1001Ejemplo 4:2000:100B E9F2F0 JMP 0100

• JMP NEXT• JMP SHORT NEXT• JMP NEAR NEXT

Page 4: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Modos de Direccionamiento de la Memoria de Programa

• Direccionamiento Intra-segmento Indirecto.La dirección efectiva EA del salto es el contenido de un registro o localidad de memoria que se accesa usando direccionamiento de datos.

• IP ← EA• 2000:1007 FF263412 JMP [1234]; DS:1234=1002

IP ← 1002• Ejemplos:

JMP BXJMP [BX]

• JMP WORD PTR [DI]JMP WORD PTR [SI]

Page 5: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Direccionamiento de la Memoria de Programa

• Direccionamiento Inter-segmento Directo.

Desplazamiento Segmento Registro CS

Registro IP

Instrucción

Page 6: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Direccionamiento de la Memoria de Programa

• Direccionamiento Inter-segmento Directo

Ejemplo:1000:1007 EA34120020 JMP 2000:1234

• JMP FAR NEXT

Page 7: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Direccionamiento de la Memoria de Programa

• Direccionamiento Inter-segmento Indirecto: Aqui IP y CS se cargan con el contenido de dos palabras consecutivas residentes en la memoria de datos. Estas dos palabras contienen la dirección del salto lejano (FAR). Se excluye el modo de direccionamiento de datos por registro y el inmediato.

Instrucción defineModo de direccionamiento de datos

Memoria de Datos

Desplazamiento → IP

Segmento → CS

Page 8: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Direccionamiento de la Memoria de Programa

• Direccionamiento Inter-segmento Indirecto.

Ejemplo:JMP DWORD PTR [DI]JMP DWORD PTR [BX]CALL DWORD PTR [BX]

Page 9: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Instrucción de salto Incondicional JMP

Nemónico Formato Operación Banderas afectadas

JMP JMP operando Salta a la dirección

especificada por operando

Ninguna

Hay tres tipos de saltos incondicionales: saltos cortos (SHORT), saltos cercanos (NEAR) y saltos lejanos (FAR)

Page 10: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Instrucción de salto Incondicional JMP

OPERANDO

SHORT-ETIQUETA

NEAR-ETIQUETA

FAR-ETIQUETA

memptr16

regptr16

memptr32

regptr32

Page 11: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Instrucción de salto Condicional

• Las instrucciones de salto condicionales son saltos cortos en el 8086 hasta el 80286, esto limita el salto al intervalo +127 bytes y -128 bytes, desde la localidad que sigue a la instrucción de salto.

• Con el 80386 los saltos condicionales pueden ser cortos (short) y cercanos (near). Esto permite ejecutar saltos condicionales a cualquier localidad dentro del segmento de código actual.

• Estas instrucciones basan las acciones de salto en las banderas de estado siguientes: Signo (S), Cero (Z), Acarreo (C), Paridad (P) y Sobrecarga (O). Si la condición es verdadera ejecuta el salto a la etiqueta indicada en la instrucción. Si la condición es falsa, ejecuta la próxima instrucción en la secuencia normal de instrucciones.

• Cuando se comparan números con signo use JG, JL, JGE, JLE, JE Y JNE.

• Cuando se comparan números sin signo use JA, JB, JAE, JBE, JE Y JNE.

• Los términos “greater than” y “less than” se refieren a números con signo.

• Los términos “above” y “below” se refieren a números sin signo.

Page 12: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Instrucción de salto Condicional Jcc

Nemónico Formato Operación Banderas afectadas

Jcc JCC operando Si cc es verdadero,

entonces salta a dirección

especificada por operando, sino continúa con la

próxima instrucción

Ninguna

Page 13: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Instrucciones de salto Condicionales

Page 14: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Instrucción de Comparación CMP.

Nemónico Formato Operación Banderas afectadas

CMP CMP D,S D-S

Acondiciona banderas

CF, AF, OF, PF, SF, ZF

Page 15: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Instrucción de Comparación CMP.

Operando Destino Operando Fuente

registro registro

registro memoria

memoria registro

registro inmediato

memoria inmediato

acumulador inmediato

Page 16: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Instrucción de Comparación CMP.

• Ejemplo:

Instrucción ZF SF CF AF OF PF

Estado Inicial 0 0 0 0 0 0

MOV AX, 1234H 0 0 0 0 0 0

MOV BX, 0ABCDH 0 0 0 0 0 0

CMP AX, BX 0 0 1 1 0 0

Page 17: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Notación usada por Debug para las banderas

Bandera Significado Encendido Apagado

OF sobrecarga OV NV

DF dirección DN UP

IF interrupcón EI DI

SF signo NG PL

ZF cero ZR NZ

AF acarreo auxiliar

AC NA

PF paridad PE PO

CF acarreo CY NC

Page 18: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

LENGUAJE ENSAMBLADOR

FUNDAMENTOS BASICOS

Page 19: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

LINEAS DE PROGRAMA

• Cada linea de programa puede ser:

1. Una instruccion.

2. Una directiva del programa ensamblador.

3. Un comentario.

Page 20: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Sintaxis de Instrucciones

• Una Instrucción consta de cuatro campos:

ETIQUETA: NEMONICO OPERANDOS; COMENTARIOS

Identificador de dirección.

Instrucción. Operandos separados por comas

Comentarios

Ejemplo: Inicio: MOV CX, 10 ; carga CX con 10

MOV AX, BX ; carga AX con BXCLC ; limpia bandera de acarreo

Page 21: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Sintaxis de seudo-instrucciones o “directivas”

•nombre seudo-instrucción operandos; comentarios

Ejemplo:

tabla1 BYTE 1,2,3,4,5,6; arreglo de 6 byteslista DB 10,20,30,40;arreglo de 4 bytes

Page 22: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Constantes Enteras

• Ejemplos 26 decimal 26D decimal1AH hexadecimal0A3H hexadecimal10101010B binario36Q octal42O octal

Page 23: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Constantes tipo “character” y “string”

• Constantes tipo “character” ’A’’X’“d”

• Constantes tipo “string”‘ABC’‘4096’‘Buenos días profesor’‘Diga “Gracias”, Pedro’

Page 24: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Constantes Reales

• Ejemplos de constantes Reales2.+3.0-44.2E+0526.E5Observe que al menos debe haber un dígito y un punto decimal. Sin el punto decimal sería una constante entera.

Page 25: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Expresiones Enteras

• Expresiόn Entera: es una expresión matemática que involucra valores enteros y operadores aritméticos. La expresión se evalúa a un entero que se almacena en 32 bits. Los operadores aritméticos se muestran en la siguiente tabla.

Operador nombre Orden de prioridades

( ) paréntesis 1

+,- Mas , menos unitario

2

*,/ Multiplicación, división

3

MOD Módulo 4

+,- Suma, resta 5

Page 26: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Ejemplos de expresiones enteras

• 4+5*2

• 12-8MOD5

• -5+2

• (4+2)*6

• 16/5=3

• -(3+4)*(6-1)

• -3+4*6-1=20

• 25 MOD 3 = 1

Page 27: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

IDENTIFICADORES

• Identificador: es un nombre escogido por el programador. Podría identificar a una variable, a una constante o a una etiqueta.

• Al crear identificadores mantenga en mente lo siguiente:(1) puede contener entre 1 y 247 caracteres(2) insensitivo a mayúsculas y minúsculas(3) el primer carácter puede ser una letra (A..Z, a..z) o guión bajo(_), @, ?, $. Los demás caracteres pueden también ser dígitos.(4) un identificador no puede ser igual a palabras reservadas del ensamblador.

Page 28: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Ejemplos válidos de identificadores

• var1_principalcontadorMáximoSubrutina12$primero_12345

• El sentido común nos sugiere crear identificadores descriptivos y fáciles de entender.

Page 29: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Directivas• Una directiva es un comando que el

ensamblador reconoce y responde durante el proceso de ensamblaje del programa fuente.

• Las directivas se usan para definir segmentos lógicos, para escoger un modelo de memoria, para definir variables, para definir procedimientos, etc. etc.

• Las directivas forman parte de la sintaxis del programa ensamblador, pero no están relacionadas con las instrucciones del procesador, es decir, no generan código de máquina.

Page 30: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Directivas• Ejemplos

.DATA identifica el área de un programa que contiene variables..CODE identifica el área de un programa que contiene instrucciones.Nombre PROC identifica el inicio de un procedimiento. Nombre puede ser cualquier identificador.Nombre ENDP identifica el fin de un procedimiento.

• Estudiar todas las directivas del ensamblador tomaría mucho tiempo, razón por la que nos concentraremos en las directivas más usuales.

Page 31: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Directivas de Datos de MASMTipo Uso

BYTE Entero sin signo de 8 bits.

SBYTE Entero con signo de 8 bits

WORD Entero sin signo de 16 bits.

SWORD Entero con signo de 16 bits

DWORD Entero sin signo de 32 bits

SDWORD Entero con signo de 32 bits

FWORD Entero de 48 bits (Puntero FAR en modo protegido

QWORD Entero de 64 bits

TBYTE Entero de 80 bits (10 bytes)

REAL4 Real corto de 32 bits (4 bytes), estándar de IEEE.

REAL8 Real largo de 64 bits (8 bytes), estándar de IEEE.

REAL10 Real extendido de 80 bits (10bytes), estándar de IEEE.

Page 32: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Ejemplos de BYTE y SBYTE

• Valor1 BYTE ‘A’; constante tipo carácter

• Valor2 BYTE 0; byte más pequeño sin signo

• Valor BYTE 255; byte más grande sin signo

• Valor4 SBYTE -128; byte con signo más pequeño

• Valor5 SBYTE +127; byte con signo más grande

• Valor6 BYTE ? ; variable sin inicializar

• Lista1 BYTE 10, 20, 30, 40; arreglo de enteros

• Lista2 BYTE 32, ‘A’, 41h, 00100010b

Page 33: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

Cadena de caracteres

• Mensaje1 BYTE “Buenos Días”• Mensaje2 BYTE “Una cadena puede distribuirse”

BYTE “en varias líneas sin necesidad”, 0dh,0ahBYTE “de repetir la etiqueta en cada línea”BYTE “como se ilustra en este ejemplo”,0dh,

0ah

• Los bytes 0Dh y 0Ah son los caracteres de fin de línea.

• El byte 0Dh es “retorno de carrito”.• El byte 0Ah es “avance de línea”.

Page 34: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

El operador DUP

• El operador DUP designa localidades de memoria repetidas, usando una expresión constante como contador.

• BYTE 20 DUP(0); 20 bytes, todos igual a cero

• BYTE 20 DUP(?); 20 bytes sin inicializar

• BYTE 4 DUP(“STACK”); 20 bytes:”stackstackstackstack”

• BYTE 2 DUP(1,2,5, 2DUP(6,7),8,9,10)

Page 35: MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

WORD y SWORD• Palabra1 WORD 65536;valor mas grande sin signo

• Palabra2 SWORD -32768;valor mas pequeño con signo

• Palabra3 WORD ?; sin inicializar, sin signo

• Versiones viejas del ensamblador usan la directiva DW para definir palabras con y sin signo.Valor1 DW 65535; sin signo

valor2 DW -32768; con signo

• Lista WORD 1, 2, 3, 4, 5, 6; arreglo de 6 palabras

• Arreglo WORD 5 DUP(?); 5 palabras sin inicializar