MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA <ul><li>Direccionamiento Intrasegmento. </li></ul><ul><li>Direccionamie...
Modos de Direccionamiento  de la Memoria de Programa <ul><li>Direccionamiento Intra-segmento Directo  </li></ul><ul><ul><u...
Modos de Direccionamiento  de la Memoria de Programa <ul><li>Direccionamiento Intra-Segmento Directo. Ejemplo 3: 2000:1007...
Modos de Direccionamiento  de la Memoria de Programa <ul><li>Direccionamiento I ntra-segmento  Indirecto. La direcci ó n e...
Direccionamiento de la Memoria de Programa <ul><li>Direccionamiento Inter-segmento Directo. </li></ul>Desplazamiento Segme...
Direccionamiento de  la Memoria de Programa <ul><li>Direccionamiento Inter-segmento Directo Ejemplo: 1000:1007 EA34120020 ...
Direccionamiento de la Memoria de Programa <ul><li>Direccionamiento  Inter-segmento  Indirecto: Aqui IP y CS se cargan con...
Direccionamiento de la Memoria de Programa <ul><li>Direccionamiento  Inter-segmento  Indirecto. Ejemplo: JMP DWORD PTR [DI...
Instrucci ó n de salto Incondicional JMP Hay tres tipos de saltos incondicionales: saltos cortos (SHORT), saltos cercanos ...
Instrucci ó n de salto Incondicional JMP OPERANDO SHORT-ETIQUETA NEAR-ETIQUETA FAR-ETIQUETA memptr16 regptr16 memptr32 reg...
Instrucci ó n de salto Condicional   <ul><li>Las instrucciones de salto condicionales son saltos cortos en el 8086 hasta e...
Instrucci ó n de salto Condicional Jcc Nem ó nico Formato Operaci ó n Banderas afectadas Jcc JCC operando Si cc es verdade...
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...
Instrucci ó n de Comparaci ó n CMP. Operando Destino Operando Fuente registro registro registro memoria memoria registro r...
Instrucci ó n de Comparaci ó n CMP. <ul><li>Ejemplo: </li></ul>Instrucci ó n ZF  SF  CF  AF  OF  PF Estado Inicial 0  0  0...
Notaci ó n usada por Debug para las banderas Bandera Significado Encendido Apagado OF sobrecarga OV NV DF direcci ó n DN U...
LENGUAJE ENSAMBLADOR FUNDAMENTOS BASICOS
LINEAS DE PROGRAMA <ul><li>Cada linea de programa puede ser: </li></ul><ul><li>Una instruccion. </li></ul><ul><li>Una dire...
Sintaxis de Instrucciones <ul><li>Una Instrucci ó n consta de cuatro campos: ETIQUETA:  NEMONICO  OPERANDOS; COMENTARIOS <...
Sintaxis de seudo-instrucciones o  “ directivas ” <ul><li>nombre seudo-instrucción operandos;  comentarios Ejemplo: tabla1...
Constantes Enteras <ul><li>Ejemplos   26 decimal  26D decimal 1AH hexadecimal 0A3H hexadecimal 10101010B binario 36Q octal...
Constantes tipo “character” y “string” <ul><li>Constantes tipo “character”   ’ A ’ ’ X ’ “ d ” </li></ul><ul><li>Constante...
Constantes Reales <ul><li>Ejemplos de constantes Reales 2. +3.0 -44.2E+05 26.E5 Observe que al menos debe haber un d í git...
Expresiones Enteras <ul><li>Expresi ό n Entera:  es una expresi ó n matem á tica que involucra valores enteros y operadore...
Ejemplos de expresiones enteras <ul><li>4+5*2 </li></ul><ul><li>12-8MOD5 </li></ul><ul><li>-5+2 </li></ul><ul><li>(4+2)*6 ...
IDENTIFICADORES <ul><li>Identificador:   es un nombre escogido por el programador. Podr í a identificar a una variable, a ...
Ejemplos v á lidos de identificadores <ul><li>var1 _principal contador M á ximo Subrutina12 $primero _12345 </li></ul><ul>...
Directivas <ul><li>Una directiva es un comando que el ensamblador reconoce y responde durante el proceso de ensamblaje del...
Directivas <ul><li>Ejemplos .DATA  identifica el  á rea de un programa que contiene variables. .CODE  identifica el  á rea...
Directivas de Datos de MASM Tipo Uso BYTE Entero sin signo de 8 bits. SBYTE Entero con signo de 8 bits WORD Entero sin sig...
Ejemplos de BYTE y SBYTE <ul><li>Valor1 BYTE ‘ A ’ ;  constante tipo car á cter </li></ul><ul><li>Valor2 BYTE 0;  byte m á...
Cadena de caracteres <ul><li>Mensaje1 BYTE  “ Buenos D í as ” </li></ul><ul><li>Mensaje2  BYTE  “ Una cadena puede distrib...
El operador DUP <ul><li>El operador DUP designa localidades de memoria repetidas, usando una expresi ó n constante como co...
WORD y SWORD <ul><li>Palabra1 WORD  65536; valor mas grande sin signo </li></ul><ul><li>Palabra2 SWORD  -32768; valor mas ...
Próxima SlideShare
Cargando en…5
×

MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

5.718 visualizaciones

Publicado el

Publicado en: Viajes, Noticias y política
1 comentario
2 recomendaciones
Estadísticas
Notas
Sin descargas
Visualizaciones
Visualizaciones totales
5.718
En SlideShare
0
De insertados
0
Número de insertados
32
Acciones
Compartido
0
Descargas
177
Comentarios
1
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

  1. 1. MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA <ul><li>Direccionamiento Intrasegmento. </li></ul><ul><li>Direccionamiento Intersegmento. </li></ul><ul><li>Instruciones de salto. </li></ul><ul><li>Introduccion al lenguaje ensamblador. </li></ul>
  2. 2. Modos de Direccionamiento de la Memoria de Programa <ul><li>Direccionamiento Intra-segmento Directo </li></ul><ul><ul><ul><li>EA= IP nuevo =IP viejo +desplazamiento </li></ul></ul></ul><ul><li>Ejemplo1: 1000:0104 EB06 JMP 010C </li></ul><ul><li>Ejemplo 2: </li></ul><ul><li>1000:0104 E92D11 JMP 1234 </li></ul>Desplazamiento en la instrucción IP + EA de salto
  3. 3. Modos de Direccionamiento de la Memoria de Programa <ul><li>Direccionamiento Intra-Segmento Directo. Ejemplo 3: 2000:1007 EBF8 JMP 1001 Ejemplo 4: 2000:100B E9F2F0 JMP 0100 </li></ul><ul><li>JMP NEXT </li></ul><ul><li>JMP SHORT NEXT </li></ul><ul><li>JMP NEAR NEXT </li></ul>
  4. 4. Modos de Direccionamiento de la Memoria de Programa <ul><li>Direccionamiento I ntra-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. </li></ul><ul><li>IP ← EA </li></ul><ul><li>2000:1007 FF263412 JMP [1234]; DS:1234=1002 IP ← 1002 </li></ul><ul><li>Ejemplos: JMP BX JMP [BX] </li></ul><ul><li>JMP WORD PTR [DI] JMP WORD PTR [SI] </li></ul>
  5. 5. Direccionamiento de la Memoria de Programa <ul><li>Direccionamiento Inter-segmento Directo. </li></ul>Desplazamiento Segmento Registro CS Registro IP Instrucción
  6. 6. Direccionamiento de la Memoria de Programa <ul><li>Direccionamiento Inter-segmento Directo Ejemplo: 1000:1007 EA34120020 JMP 2000:1234 </li></ul><ul><li>JMP FAR NEXT </li></ul>
  7. 7. Direccionamiento de la Memoria de Programa <ul><li>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. </li></ul>Instrucción define Modo de direccionamiento de datos Memoria de Datos Desplazamiento -> IP Segmento -> CS
  8. 8. Direccionamiento de la Memoria de Programa <ul><li>Direccionamiento Inter-segmento Indirecto. Ejemplo: JMP DWORD PTR [DI] JMP DWORD PTR [BX] CALL DWORD PTR [BX] </li></ul>
  9. 9. Instrucci ó n de salto Incondicional JMP Hay tres tipos de saltos incondicionales: saltos cortos (SHORT), saltos cercanos (NEAR) y saltos lejanos (FAR) Nem ó nico Formato Operaci ó n Banderas afectadas JMP JMP operando Salta a la direcci ó n especificada por operando Ninguna
  10. 10. Instrucci ó n de salto Incondicional JMP OPERANDO SHORT-ETIQUETA NEAR-ETIQUETA FAR-ETIQUETA memptr16 regptr16 memptr32 regptr32
  11. 11. Instrucci ó n de salto Condicional <ul><li>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. </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul><ul><li>Cuando se comparan n ú meros con signo use JG, JL, JGE, JLE, JE Y JNE. </li></ul><ul><li>Cuando se comparan n ú meros sin signo use JA, JB, JAE, JBE, JE Y JNE. </li></ul><ul><li>Los t é rminos “greater than ” y “less than ” se refieren a n ú meros con signo. </li></ul><ul><li>Los t é rminos “ above ” y “ below ” se refieren a n ú meros sin signo. </li></ul>
  12. 12. 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
  13. 13. Instrucciones de salto Condicionales
  14. 14. 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
  15. 15. Instrucci ó n de Comparaci ó n CMP. Operando Destino Operando Fuente registro registro registro memoria memoria registro registro inmediato memoria inmediato acumulador inmediato
  16. 16. Instrucci ó n de Comparaci ó n CMP. <ul><li>Ejemplo: </li></ul>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
  17. 17. 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
  18. 18. LENGUAJE ENSAMBLADOR FUNDAMENTOS BASICOS
  19. 19. LINEAS DE PROGRAMA <ul><li>Cada linea de programa puede ser: </li></ul><ul><li>Una instruccion. </li></ul><ul><li>Una directiva del programa ensamblador. </li></ul><ul><li>Un comentario. </li></ul>
  20. 20. Sintaxis de Instrucciones <ul><li>Una Instrucci ó n consta de cuatro campos: ETIQUETA: NEMONICO OPERANDOS; COMENTARIOS </li></ul>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 BX CLC ; limpia bandera de acarreo
  21. 21. Sintaxis de seudo-instrucciones o “ directivas ” <ul><li>nombre seudo-instrucción operandos; comentarios Ejemplo: tabla1 BYTE 1,2,3,4,5,6; arreglo de 6 bytes lista DB 10,20,30,40;arreglo de 4 bytes </li></ul>
  22. 22. Constantes Enteras <ul><li>Ejemplos 26 decimal 26D decimal 1AH hexadecimal 0A3H hexadecimal 10101010B binario 36Q octal 42O octal </li></ul>
  23. 23. Constantes tipo “character” y “string” <ul><li>Constantes tipo “character” ’ A ’ ’ X ’ “ d ” </li></ul><ul><li>Constantes tipo “string” ‘ ABC ’ ‘ 4096 ’ ‘ Buenos d í as profesor ’ ‘ Diga “ Gracias ” , Pedro ’ </li></ul>
  24. 24. Constantes Reales <ul><li>Ejemplos de constantes Reales 2. +3.0 -44.2E+05 26.E5 Observe que al menos debe haber un d í gito y un punto decimal. Sin el punto decimal ser í a una constante entera. </li></ul>
  25. 25. Expresiones Enteras <ul><li>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. </li></ul>Operador nombre Orden de prioridades ( ) par é ntesis 1 +,- Mas , menos unitario 2 *,/ Multiplicaci ó n, divisi ó n 3 MOD M ó dulo 4 +,- Suma, resta 5
  26. 26. Ejemplos de expresiones enteras <ul><li>4+5*2 </li></ul><ul><li>12-8MOD5 </li></ul><ul><li>-5+2 </li></ul><ul><li>(4+2)*6 </li></ul><ul><li>16/5=3 </li></ul><ul><li>-(3+4)*(6-1) </li></ul><ul><li>-3+4*6-1=20 </li></ul><ul><li>25 MOD 3 = 1 </li></ul>
  27. 27. IDENTIFICADORES <ul><li>Identificador: es un nombre escogido por el programador. Podr í a identificar a una variable, a una constante o a una etiqueta. </li></ul><ul><li>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. </li></ul>
  28. 28. Ejemplos v á lidos de identificadores <ul><li>var1 _principal contador M á ximo Subrutina12 $primero _12345 </li></ul><ul><li>El sentido com ú n nos sugiere crear identificadores descriptivos y f á ciles de entender. </li></ul>
  29. 29. Directivas <ul><li>Una directiva es un comando que el ensamblador reconoce y responde durante el proceso de ensamblaje del programa fuente. </li></ul><ul><li>Las directivas se usan para definir segmentos l ó gicos, para escoger un modelo de memoria, para definir variables, para definir procedimientos, etc. etc. </li></ul><ul><li>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. </li></ul>
  30. 30. Directivas <ul><li>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. </li></ul><ul><li>Estudiar todas las directivas del ensamblador tomar í a mucho tiempo, raz ó n por la que nos concentraremos en las directivas m á s usuales. </li></ul>
  31. 31. Directivas de Datos de MASM Tipo 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.
  32. 32. Ejemplos de BYTE y SBYTE <ul><li>Valor1 BYTE ‘ A ’ ; constante tipo car á cter </li></ul><ul><li>Valor2 BYTE 0; byte m á s peque ñ o sin signo </li></ul><ul><li>Valor BYTE 255; byte m á s grande sin signo </li></ul><ul><li>Valor4 SBYTE -128; byte con signo m á s peque ñ o </li></ul><ul><li>Valor5 SBYTE +127; byte con signo m á s grande </li></ul><ul><li>Valor6 BYTE ? ; variable sin inicializar </li></ul><ul><li>Lista1 BYTE 10, 20, 30, 40; arreglo de enteros </li></ul><ul><li>Lista2 BYTE 32, ‘ A ’ , 41h, 00100010b </li></ul>
  33. 33. Cadena de caracteres <ul><li>Mensaje1 BYTE “ Buenos D í as ” </li></ul><ul><li>Mensaje2 BYTE “ Una cadena puede distribuirse ” BYTE “ en varias l í neas sin necesidad ” , 0dh,0ah BYTE “ de repetir la etiqueta en cada l í nea ” BYTE “ como se ilustra en este ejemplo ” ,0dh, 0ah </li></ul><ul><li>Los bytes 0Dh y 0Ah son los caracteres de fin de l í nea. </li></ul><ul><li>El byte 0Dh es “ retorno de carrito ” . </li></ul><ul><li>El byte 0Ah es “ avance de l í nea ” . </li></ul>
  34. 34. El operador DUP <ul><li>El operador DUP designa localidades de memoria repetidas, usando una expresi ó n constante como contador. </li></ul><ul><li>BYTE 20 DUP(0); 20 bytes, todos igual a cero </li></ul><ul><li>BYTE 20 DUP(?); 20 bytes sin inicializar </li></ul><ul><li>BYTE 4 DUP( “ STACK ” ); 20 bytes: ” stackstackstackstack ” </li></ul><ul><li>BYTE 2 DUP(1,2,5, 2DUP(6,7),8,9,10) </li></ul>
  35. 35. WORD y SWORD <ul><li>Palabra1 WORD 65536; valor mas grande sin signo </li></ul><ul><li>Palabra2 SWORD -32768; valor mas peque ñ o con signo </li></ul><ul><li>Palabra3 WORD ?; sin inicializar, sin signo </li></ul><ul><li>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 </li></ul><ul><li>Lista WORD 1, 2, 3, 4, 5, 6; arreglo de 6 palabras </li></ul><ul><li>Arreglo WORD 5 DUP(?); 5 palabras sin inicializar </li></ul>

×