modos de direcionamiento de la memoria de programa

Post on 12-Jun-2015

5.463 Views

Category:

Travel

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

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

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

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

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]

Direccionamiento de la Memoria de Programa

• Direccionamiento Inter-segmento Directo.

Desplazamiento Segmento Registro CS

Registro IP

Instrucción

Direccionamiento de la Memoria de Programa

• Direccionamiento Inter-segmento Directo

Ejemplo:1000:1007 EA34120020 JMP 2000:1234

• JMP FAR NEXT

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

Direccionamiento de la Memoria de Programa

• Direccionamiento Inter-segmento Indirecto.

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

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)

Instrucción de salto Incondicional JMP

OPERANDO

SHORT-ETIQUETA

NEAR-ETIQUETA

FAR-ETIQUETA

memptr16

regptr16

memptr32

regptr32

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.

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

Instrucciones de salto Condicionales

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

Instrucción de Comparación CMP.

Operando Destino Operando Fuente

registro registro

registro memoria

memoria registro

registro inmediato

memoria inmediato

acumulador inmediato

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

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

LENGUAJE ENSAMBLADOR

FUNDAMENTOS BASICOS

LINEAS DE PROGRAMA

• Cada linea de programa puede ser:

1. Una instruccion.

2. Una directiva del programa ensamblador.

3. Un comentario.

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

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

Constantes Enteras

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

Constantes tipo “character” y “string”

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

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

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.

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

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

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.

Ejemplos válidos de identificadores

• var1_principalcontadorMáximoSubrutina12$primero_12345

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

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.

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.

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.

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

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

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)

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

top related