View
5.463
Download
0
Category
Preview:
Citation preview
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
Recommended