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=   IP nuevo =IP viejo +desplazamiento Ejemplo1: 1000:0104 EB06 JMP 010C Ejemplo 2: 1000:0104 E92D11 JMP 1234 Desplazamiento en 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 1001 Ejemplo 4: 2000:100B E9F2F0 JMP 0100 JMP NEXT JMP SHORT NEXT JMP NEAR NEXT
Modos de Direccionamiento  de la Memoria de Programa 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. IP  ← EA 2000:1007 FF263412 JMP [1234]; DS:1234=1002 IP  ← 1002 Ejemplos: JMP BX JMP [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 define Modo 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 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
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: Una instruccion. Una directiva del programa ensamblador. 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 BX CLC   ; 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 bytes lista DB 10,20,30,40;arreglo de 4 bytes
Constantes Enteras Ejemplos   26 decimal  26D decimal 1AH hexadecimal 0A3H hexadecimal 10101010B binario 36Q octal 42O 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 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.
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 _principal contador M á ximo Subrutina12 $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 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.
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,0ah BYTE  “ 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

MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA

  • 1.
    MODOS DE DIRECIONAMIENTODE LA MEMORIA DE PROGRAMA Direccionamiento Intrasegmento. Direccionamiento Intersegmento. Instruciones de salto. Introduccion al lenguaje ensamblador.
  • 2.
    Modos de Direccionamiento de la Memoria de Programa Direccionamiento Intra-segmento Directo EA= IP nuevo =IP viejo +desplazamiento Ejemplo1: 1000:0104 EB06 JMP 010C Ejemplo 2: 1000:0104 E92D11 JMP 1234 Desplazamiento en la instrucción IP + EA de salto
  • 3.
    Modos de Direccionamiento de la Memoria de Programa Direccionamiento Intra-Segmento Directo. Ejemplo 3: 2000:1007 EBF8 JMP 1001 Ejemplo 4: 2000:100B E9F2F0 JMP 0100 JMP NEXT JMP SHORT NEXT JMP NEAR NEXT
  • 4.
    Modos de Direccionamiento de la Memoria de Programa 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. IP ← EA 2000:1007 FF263412 JMP [1234]; DS:1234=1002 IP ← 1002 Ejemplos: JMP BX JMP [BX] JMP WORD PTR [DI] JMP WORD PTR [SI]
  • 5.
    Direccionamiento de laMemoria de Programa Direccionamiento Inter-segmento Directo. Desplazamiento Segmento Registro CS Registro IP Instrucción
  • 6.
    Direccionamiento de la Memoria de Programa Direccionamiento Inter-segmento Directo Ejemplo: 1000:1007 EA34120020 JMP 2000:1234 JMP FAR NEXT
  • 7.
    Direccionamiento de laMemoria 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 define Modo de direccionamiento de datos Memoria de Datos Desplazamiento -> IP Segmento -> CS
  • 8.
    Direccionamiento de laMemoria de Programa Direccionamiento Inter-segmento Indirecto. Ejemplo: JMP DWORD PTR [DI] JMP DWORD PTR [BX] CALL DWORD PTR [BX]
  • 9.
    Instrucci ó nde 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.
    Instrucci ó nde salto Incondicional JMP OPERANDO SHORT-ETIQUETA NEAR-ETIQUETA FAR-ETIQUETA memptr16 regptr16 memptr32 regptr32
  • 11.
    Instrucci ó nde 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.
  • 12.
    Instrucci ó nde 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.
  • 14.
    Instrucci ó nde 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.
    Instrucci ó nde Comparaci ó n CMP. Operando Destino Operando Fuente registro registro registro memoria memoria registro registro inmediato memoria inmediato acumulador inmediato
  • 16.
    Instrucci ó nde 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
  • 17.
    Notaci ó nusada 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.
  • 19.
    LINEAS DE PROGRAMACada linea de programa puede ser: Una instruccion. Una directiva del programa ensamblador. Un comentario.
  • 20.
    Sintaxis de InstruccionesUna 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 BX CLC ; limpia bandera de acarreo
  • 21.
    Sintaxis de seudo-instruccioneso “ directivas ” 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
  • 22.
    Constantes Enteras Ejemplos 26 decimal 26D decimal 1AH hexadecimal 0A3H hexadecimal 10101010B binario 36Q octal 42O octal
  • 23.
    Constantes tipo “character”y “string” Constantes tipo “character” ’ A ’ ’ X ’ “ d ” Constantes tipo “string” ‘ ABC ’ ‘ 4096 ’ ‘ Buenos d í as profesor ’ ‘ Diga “ Gracias ” , Pedro ’
  • 24.
    Constantes Reales Ejemplosde 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.
  • 25.
    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
  • 26.
    Ejemplos de expresionesenteras 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
  • 27.
    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.
  • 28.
    Ejemplos v álidos de identificadores var1 _principal contador M á ximo Subrutina12 $primero _12345 El sentido com ú n nos sugiere crear identificadores descriptivos y f á ciles de entender.
  • 29.
    Directivas Una directivaes 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.
  • 30.
    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.
  • 31.
    Directivas de Datosde 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.
    Ejemplos de BYTEy 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
  • 33.
    Cadena de caracteresMensaje1 BYTE “ Buenos D í as ” 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 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 ” .
  • 34.
    El operador DUPEl 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)
  • 35.
    WORD y SWORDPalabra1 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