You are on page 1of 15

UNIDAD II Programacion.

--------------------------------------------------------------------------------------------------------------

UNIDAD II PROGRAMACIÓN
2.1 LENGUAJE ENSAMBLADOR
En el lenguaje ensamblador el programador utiliza instrucciones simbólicas en lugar de instrucciones de maquina y nombres descriptivos para los elementos de datos y para las localidades de memoria. Usted escribe un programa en ensamblador de acuerdo con un conjunto estricto de reglas que después utiliza el programa traductor de ensamblador para convertir el programa ensamblador en código máquina. Existen 2 clases de lenguajes de programación: de alto nivel y de bajo nivel. Los programadores que escriben en un lenguaje de alto nivel (como C y Pascal), codifican comandos poderosos, cada uno de los cuales puede generar muchas instrucciones en lenguaje de máquina. Por otro lado, los programadores que escriben en un lenguaje ensamblador de bajo nivel codifican instrucciones simbólicas, cada una de las cuales genera una instrucción en lenguaje maquina. A pesar del hecho de que codificar en un lenguaje de alto nivel es mas productivo, algunas ventajas de codificar en lenguaje ensamblador son: • • • Proporciona mas control sobre el manejo particular de los requerimientos de hardware. Genera módulos ejecutables mas pequeños y mas compactos. Con mayor probabilidad tiene una ejecución mas rápida.

Una práctica común es combinar los beneficios de ambos niveles de programación. Un lenguaje de alto nivel utiliza un compilador para traducir el código fuente a lenguaje maquina. Un lenguaje de bajo nivel utiliza un ensamblador para realizar la traducción. Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. Los dos tipos de enunciados o líneas de programación son: 1.- Instrucción, tal como MOV y ADD, que el ensamblador traduce a código objeto 2.- Directiva, que indican al ensamblador que realice una acción especifica, como definir un elemento de dato. ENUNCIADO O LINEA DE PROGRAMACIÓN: [Etiqueta] <Operación o directiva> [ operando (s) ] [ ; comentarios ] NOTA: Los corchetes indican una entrada opcional A continuación se hará un comentario de c /elemento:

MICROPROCESADORES I (Apuntes del Ing. Jorge Aguirre B.)

19

.Model Indica el modelo de memoria que usara el programa .UNIDAD II Programacion. 20H 100 Constante Equ Algunas directivas serían: . También podemos hacer: num dw 6567H b) Como dirección.En la cual puede continuar el programa: SUMA: ADD AX. (Instrucción) (Directiva) Etiq1: MOV AX. A num se le asocia el valor 65 y la dirección donde se encuentra dicho dato..Data Indica el inicio del segmento de datos . DB.) 20 . o el nombre de una orden (directiva) que el programa ensamblador deberá ejecutar al momento de ensamblar nuestro programa. que el micro entiende.Stack Indica el tamaño del Stack o pila . Puede consistir de los siguientes caracteres: • Letras del alfabeto: A-Z a -z • Dígitos: (0 9) (no puede ser el primer carácter) • Caracteres especiales: signo de interrogación (¿) Subrayado ( _ ) Signo de pesos ( $ ) Arroba ( @ ) Punto ( . La directiva no genera código ejecutable solo el mnemónico.Es un nombre para designar un dato y la dirección donde se encuentra dicho dato. ) (no puede ser el primer carácter) no debe tener espacios en blanco en medio de la etiqueta.. Una etiqueta puede tener los siguientes usos: a) Como variable. DX _____________ _____________ JMP SUMA OPERACIÓN O DIRECTIVA. Para definir una etiqueta se usan los directivos DW.Code Indica el inicio del segmento de código End Indica el fin del programa MICROPROCESADORES I (Apuntes del Ing.Ejemplo: num db 65 . -------------------------------------------------------------------------------------------------------------ETIQUETA o IDENTIFICADOR. Jorge Aguirre B. Al ensamblarse nuestro programa se genera un código ejecutable.En este campo deberá estar el nombre de la operación (Mnemónico) que el micro deberá realizar..

ETIQUETA Counter OPERACIÓN DB OPERANDO COMENTARIO 0 . indica que la siguiente información . es el programa ejecutable .necesario para terminar el programa . 12 COMENTARIO .STACK .4CH INT 21H END SMALL 200 .Empiezan con ( . ) y mejoran la claridad del programa. el operando identifica su valor inicial.. Suma 12 al registro AX COMENTARIOS.Un programa escrito en lenguaje ensamblador se ensambla por medio de un programa ensamblador: Los programas mas comunes para el 8088. Por ejemplo.CODE ___ ___ ___ MOV AH.. define un byte con valor=0 Para una instrucción un operando indica en donde realizar la operación. Incrementa el registro CX . Una instrucción puede tener uno. Jorge Aguirre B.(Si existe) proporciona información para la operación que actúa sobre el. dos o tal vez ningun operando. indica el tamaño del STACK (bytes) . Regresa .) 21 . Para un elemento de datos. Indica el fin del programa MICROPROCESADORES I (Apuntes del Ing. 8086 con el Turboensamblador (TASM) de la compañía Borland y el de la compañía Microsoft (MASM). en le definición siguiente de un elemento de datos llamado COUNTER. Aquí están tres ejemplos: OPERACIÓN RET INC ADD OPERANDO CX AX.UNIDAD II Programacion. ESTRUCTURA DE UN PROGRAMA.. donde el propósito de un conjunto de instrucciones en especial no es claro.Model . y regresar al prompt C> . deberá quedar en el segmento de datos . indica que la siguiente información .DATA ___ ___ ___ . -------------------------------------------------------------------------------------------------------------OPERANDO. la operación DB significa “definir byte” . indica el modelo de memoria (SMALL) . Los requerimientos mínimos para un programa escrito en lenguaje ensamblador son: .

todos con valor de( 0 ) MICROPROCESADORES I (Apuntes del Ing.UNIDAD II Programacion.1. define 100 bytes. Jorge Aguirre B. FILA db 100 dup (0) . 4 .3.) 22 . ejemplo: Arreglo db 0. -------------------------------------------------------------------------------------------------------------TIPOS DE MODELOS DE MEMORIA Model Model Model Model Model TYNY SMALL MEDIUM COMPAC LARGE CS = DS CS = 64Kb CS > 64Kb CS < 64Kb CS > 64Kb CS > 64Kb En 1 solo segmento d 64K DS = 64Kb DS < 64Kb DS > 64Kb DS > 64Kb(Los arreglos de datos deben ocupar menos de 64 K) DS > 64Kb(Los arreglos de datos pueden ocupar mas de 64 Kb) Model HUGE INICIALIZACION DE DATOS Los datos pueden tener diferentes longitudes. 1. de palabras WORD (16 bits) de doble palabra (32 bits). DB 1byte DW 2byte DD 4byte DF o DP 6byte DQ 8byte DT 10byte Podemos usar una etiqueta para definir un arreglo.2. Dependiendo de la longitud del dato se usa un directivo diferente para declararlo. asi podemos hablar de BYTES (8 bits). 2. 3. define 5 bytes con valores(0. Arreglo db db db db db 0 1 2 3 4 Directiva DUP para definir una cierta cantidad de datos.4) Otra forma de inicializar arreglo.

El dato a cargar en el operando destino esta guardado en una variable (Etiqueta).. Esta constante se ensambla como parte de la instrucción. MOV AX. [ BX ] Donde [BX] es un desplazamiento relativo a DS ( DS:[ BX ] ) MICROPROCESADORES I (Apuntes del Ing.El dato a cargar en el operando destino esta guardado en una variable(Normalmente un arreglo) y se carga al operando destino indirectamente a través de uno de los siguientes registros: BX.. Ejemplo : MOV AX. 18 en el reg.18 . -------------------------------------------------------------------------------------------------------------- 2. En este direccionamiento la dirección efectiva (EA). BX • Es un ejemplo de direccionamiento de registro en donde la unidad de ejecución (EU) toma el operando del registro BX. SI o DI. en la instrucción. estos deben contener direcciones. esta contenida en la instrucción. se suman el desplazamiento que tiene la etiqueta y el contenido del registro DS. AX. Para obtener la dirección de 20 bits. Como la EA es una dirección y no el contenido de una localidad de memoria.Coloca el num. OFFSET ARREGLO Este modo de direccionamiento se puede usar para colocar el contenido de la localidad de memoria a la que apunta BX. Para evitar confundir este modo de direccionamiento con el de registro.) 23 .2 MODOS DE DIRECCIONAMIENTO • INMEDIATO. MOV BX. Una técnica para asegurar lo anterior es utilizar el operador OFFSET. determina como destino el registro AX y ordena a la ALU llevar a cabo la operación. Por ejemplo: MOV AX. • DIRECTO.UNIDAD II Programacion.El dato a cargar en el operando destino es una constante. BP. DE REGISTRO. VAR1 Donde previamente se definió en el segmento de datos a VAR1 VAR1 DB • 20H DE REGISTRO INDIRECTO.. El usuario especifica un byte o palabra como operando fuente. por ejemplo en AX. Jorge Aguirre B.. La siguiente instrucción es un ejemplo de este tipo de direccionamiento.El dato a cargar en el operando destino se obtiene de un registro . antes de utilizar los registros mencionados. los registros deben aparecer entre paréntesis rectangulares. para una localidad de memoria. MOV AX.

. en el registro AX se coloca el contenido de la localidad de memoria cuya dirección es la de ARREGLO + 2. Un ejemplo del uso de este tipo de direccionamiento lo ofrece la siguiente instrucción: MOV AX.[ BX + SI +2 ] MICROPROCESADORES I (Apuntes del Ing. la EA del operando fuente se obtiene al sumar un desplazamiento a los siguientes registros: BP o BX. La siguiente es una secuencia de instrucciones que ilustra este tipo de direccionamiento. los registros deben contener la dirección del desplazamiento.En este modo.La (EA) es la suma de los contenidos del registro base (BX). MOV SI. En este caso.) 24 . 2 MOV AX. MOV BX. donde primero se carga una dirección en un registro índice y después la misma se combina con una localidad de memoria. ARREGLO[ SI ] En este caso. MOV AX.Al hacer uso de este modo de direccionamiento. -------------------------------------------------------------------------------------------------------------• RELATIVO A LA BASE. la (EA) es la suma del contenido de un registro índice (SI o DI) y un desplazamiento. un registro índice (SI o DI) y un desplazamiento (opcional).OFFSET ETIQUETA MOV SI.UNIDAD II Programacion. Jorge Aguirre B. [ BX+2 ] • INDEXADO DIRECTO... • INDEXADO DE BASE. Un ejemplo común lo construye una secuencia de instrucciones.

b) Condicional. d) Transferencia de banderas. c) Multiplicación. b) Sincronización extrema. 4.-DE TRANSFERENCIA DE PROGRAMA. a) Suma. a) Lógicas.TRANSFERENCIA DE DATOS. MICROPROCESADORES I (Apuntes del Ing. 5. b) Resta. A) Operaciones con banderas.-MANIPULACION DE BIT. 2.) 25 . 7. a) De propósito general. b) Entrada/Salida. 6.-CONTROL DEL PROCESADOR. c) Giro. 3. c) De operando dirección.. a) Incondicional.-DE CADENA.-DE INTERRUPCIONES. c) Control de iteraciones.3 CONJUNTO DE INSTRUCCIONES Las instrucciones están agrupadas en los siguientes grupos y subgrupos: 1. b) Desplazamiento.-INSTRUCCIONES ARITMENTICAS. d) División. -------------------------------------------------------------------------------------------------------------- 2. c) NOP. Jorge Aguirre B.UNIDAD II Programacion.

. 1. puerto .Ajuste decimal después de restar .4.compara datos .Lee un dato del Puerto 2.POPF .Saca datos de la Pila .XCHG destino.LES destino..Carga el reg.Ajuste decimal después de sumar . fuente destino.Intercambia contenidos .PUSHF .Mete datos a la Pila .DAS 5.Carga una dirección efectiva 2.Ajuste ASCII después de sumar B) DE RESTA 1.SBB 3.) 26 ..resta valores binarios . 1) TRANSFERENCIA DE DATOS. fuente destino .. fuente .Ajuste ASCII después de restar MICROPROCESADORES I (Apuntes del Ing. De segmento extra D) TRANSFERENCIA DE BANDERAS.5.. fuente . De segmento datos 3.LDS destino.Traduce (Uso para tablas) B) GRUPO DE ENTRADA-SALIDA..Envía el reg AH al reg. fuente 5.Carga al reg.Mueve datos .resta con borrow .UNIDAD II Programacion.3.POP destino 4... Incrementos de 1 .MOV destino.SAHF .LAHF .. 1.Suma de números binarios .Saca un dato por el puerto C) DE OPERANDO DE DIRECCION.. -------------------------------------------------------------------------------------------------------------- CONJUNTO DE INSTRUCCIONES. de Banderas 3. fuente destino.IN acumulador. 1.PUSH fuente 3. AH con las banderas 2.XLAT .Lo que saca del stack lo pone en el reg.. fuente destino.AAS destino.. Fuente 2.CMP 4.LEA destino.Guarda las banderas en el stack 4..Carga el reg.. fuente .ADD ADC INC DAA AAA destino.. fuente . De banderas 2) INSTRUCCIONES ARITMETICAS A) DE SUMA 1.. A) DE PROPOSITO GENERAL 1..2.OUT puerto.Suma con carry ..SUB 2. acumulador . Jorge Aguirre B..

MOVS cadena-destino. fuente destino. contador destino.IDIV fuente (con signo) .Corrimiento algebraico a la izq.Multiplica con signo(enteros) . contador destino.Rotación a la derecha .Divide con signo 3.Prueba bits ..4. Rotación a la izquierda con carry .4. contador . .Multiplica sin signo .Divide sin signo 2..Almacena una cadena MICROPROCESADORES I (Apuntes del Ing.5.4. contador destino.carga cadena ..2. contador destino.STOS cadena-destino..MOVSW 2.IMUL 3. cadena-fuente MOVSB ----.2. contador destino.Negación B) DE DESPLAZAMIENTO 1. 1.Conjunción lógica (y) .OR Exclusiva .NOT AND OR XOR TEST NEG destino destino.Ajuste ASCII para la división 3) INSTRUCCIONES DE MANIPULACION DE BITS A) LOGICAS 1...) 27 . fuente destino.Negación lógica (No) .AAM fuente (sin signo) fuente (con signo) .. Rotación a la iderecha con carry 4) INSTRUCCIONES DE CADENA 1.DIV fuente (sin signo) .ROL ROR RCL RCR destino. C) GIROS 1.2.Corrimiento lógico a la Derecha .LODS cadena-fuente 3. Jorge Aguirre B..3. fuente destino. -------------------------------------------------------------------------------------------------------------- C) DE MULTIPLICACION.MUL 2.3.SHL SAL SHR SAR destino. fuente destino .6. contador destino. contador .UNIDAD II Programacion.Disyunción lógica (o) . Mueve cadenas .. Corrimiento algebraico a la Der.AAD .Corrimiento lógico a la izquierda .Rotación a la izquierda .3. cadena-fuente STOSB -----STOSW .Ajuste ASCII para la multiplicación D) DIVISION 1.

RET 3..Salto incondicional B) TRANSFERENCIA CONDICIONAL 1.JP/JPE 12.Rep..CALL 2..6. cadena-fuente CMPSB ------CMPSW 5.SCAS cadena-destino SCASB ------SCASW ..Repetir hasta que CX=0 o Z=1 .UNIDAD II Programacion. RETF) destino . Jorge Aguirre B.8.3.2.JG/JNLE 11.. -------------------------------------------------------------------------------------------------------------4. (mas grande/no menos ni igual) ZF=0 o SF=OF (paridad puesto/si hay paridad par) PF=1 (paridad no puesta/ paridad impar) PF=0 (bit de signo puesto) S=1 (bit de signo no puesto) SF=0 (carry puesto) CF=1 (carry no puesto) CF=0 (sobreflujo puesto) OF=1 (sobreflujo no puesto) OF=1 10..JNS 15.llama a un procedimiento .2.4.JB/JNAE JAE/JNB JBE/JNA JA/JNBE JE/JZ JNE/JNZ JL/JNGE JGE/JNL JLE/JNG (Salta si es bajo / no arriba ni igual) CF=1 (Salta si esta arriba o igual / no esta bajo) CF=0 (Salta si es bajo ó igual / no esta arriba) CF=1 o ZF=1 (Salta si esta arriba / no bajo ni igual) CF=0 y ZF=0 (Salta si fueron iguales) ZF=1 (Salta si no es igual a) ZF=0 (menor/no mas grande ni igual) SF diferente de OF (mas grande o igual /no menor) SF=OF (menor o igual/no mas grande) ZF=1 o SF diferente de 0F.Compara cadenas .JNP/JPO 13..) 28 .CMPS cadena-destino. Repetir hasta que CX=0 .JNC 17.JO 18.Salta si CX=0 MICROPROCESADORES I (Apuntes del Ing.....JNO C) CONTROL DE ITERACIONES 1.Explora una cadena 5) INSTRUCCIONES DE TRANSFERENCIA DE PROGRAMA A) TRANSFERENCIA INCONDICIONAL 1..3.. hasta que CX=0 o Z=0 .9..4.JMP destino (RETN.5.LOOP ETIQ LOOPE/LOOPZ ETIQ LOOPNE/LOOPNZ ETIQ JCXZ ETIQ .JC 16.regresa de un procedimiento .JS 14.7.

petición de Interrupción .6.) 29 .7. de espera hasta que se active la línea TEST. OPERACIONES CON BANDERAS 1.. -------------------------------------------------------------------------------------------------------------6) INSTRUCCIONES DE INTERRUPCION 1. INSTRUCCIONES DE CONTROL DEL PROCESADOR 1.2. Entra en edo. 8) INSTRUCCIONES DE CONVERSION 1.3.2..STC Pone la bandera de carry C=1 CLC Limpia la bandera de carry C=0 CMC Complementa la bandera de carry STD Pone la bandera de dirección D=1 CLD Limpia la bandera de dirección D=0 STI Pone la bandera de interrupción habilitada IF=1 CLI Limpia la bandera de interrupción habilitada IF=0 B.4.CWD Conversión de Byte a palabra Conversión de palabra a doble palabra MICROPROCESADORES I (Apuntes del Ing.Regreso de una interrupción 7) INSTRUCCIONES DE CONTROL DEL PROCESADOR a. Jorge Aguirre B.2.HLT WAIT Pone al micro en estado estático.5.UNIDAD II Programacion.INT vector IRET .CBW 2.

la segmentación y la inicialización.COM es mas pequeño que un programa .AX ___ ___ ___ mov AH.EXE ..COM implica el tamaño del programa.EXE no existe este problema ya que el segmento de código y el de datos están separados. El segmento de código. evitando que el CPU lea los datos como si fueran instrucciones.4CH Int 21H END DB DB 00H 00H FORMATO .4CH int 21H END 30 MICROPROCESADORES I (Apuntes del Ing. el segmento de datos. Esto no sucede así en los programas . En los programas .EXE y un programa que es para ejecutarse como .EXE b). y cargársela al registro DS. • • Un programa .UNIDAD II Programacion.Los programas . -------------------------------------------------------------------------------------------------------------- 2.Los programas . por lo tanto la primera instrucción es un salto a donde continua el código del programa . AX • DIFERENCIAS BASICAS EN SU FORMATO DE PROGRAMA: FORMATO .STACK 200 .COM está restringido a un solo segmento de 64Kb.Model TINY . MOV AX. @ DATA MOV DS.DATA Var1 Var2 db 00H db 00H INICIO: mov AX.COM . mas sin embargo las primeras instrucciones en este tipo de programas son para obtener la dirección en donde el sistema operativo guardo los datos.) .EXE En un programa ..@DATA mov DS. Jorge Aguirre B.EXE Un programa .Model SMALL HUGE . el segmento de stack y el segmento extra están todos traslapados en uno solo.COM Algunas de las diferencias básicas entre un programa que es para ejecutarse como .COM los datos están en el mismo segmento que el de código.Code ORG 100H START: JMP INICIO Var1 Var2 INICIO: ____ ____ ____ ____ mov AH.4 MODOS DE PROGRAMACIÓN Existen 2 tipos de programas: a).

UNIDAD II Programacion. reservando el espacio para datos. Pueden tener ambos tipos de brincos y llamados (NEAR:FAR). Jorge Aguirre B. Tienen brincos y llamados cortos (NEAR). Al inicio del segmento de códigos las primeras instrucciones son para recuperar la dirección del segmento de datos.COM Todos los segmentos inician en la misma dirección CS=DS=ES=SS o sea que se encuentran traslapados en un segmento de 64K (modelo TINY). PROGRAMAS . desde el SMALL hasta HUGE. ya que este espacio lo reserva para el PSP (Program Segment prefix) La primera instrucción es brinco al inicio del código. Sus segmentos pueden estar en direcciones diferentes.EXE Puede tener modelos de memoria. El programa inicia en la dirección 100H.) 31 . -------------------------------------------------------------------------------------------------------------- PROGRAMAS . MICROPROCESADORES I (Apuntes del Ing.

Funcion (09H) INT 21H . “Mensaje DOS $ “ msg3 db 13. 09H y 4CH de la INT 21H Funcion (01H) INT 21H AH= 01H Funcion para leer 1 tecla del teclado.data let1 db let2 db Small 100 13. ax MICROPROCESADORES I (Apuntes del Ing. “Mi primer programa de ejemplo $ “ 13. “ Cual mensaje deseas <1-3> $ ” msg1 db 13. Funcion (4CH) INT 21H AH= 4CH Funcion que sirve para terminar un programa y devolver el control al sistema operativo. regresa el codigo asscii de la tecla presionada en el registro AL Funcion (09H) INT 21H AH= 09H Funcion para sacar una cadena de caracteres a la pantalla.10. -------------------------------------------------------------------------------------------------------------- 2.Code mov mov ax. Cargar en el registro DX la EA de donde se encuentra la cadena de caracteres.5 EJEMPLOS DE PROGRAMACIÓN BASICA PRIMER PROGRAMA DE EJEMPLO(Formato .10.UNIDAD II Programacion.stack . @DATA ds.) 32 .10.10. “Mensaje UNO $ “ msg2 db 13.Model . “Mensaje TRES $ “ . la cadena termina con un $ y va encerrado entre comillas. Jorge Aguirre B.10.EXE): Uso de las funciones 01H.10.

01h 21h ax.) 33 . Jorge Aguirre B. 01h 21h dx. [let2] ah. 09h 21h ah. 01h 21h dx. 09h 21h ah. -------------------------------------------------------------------------------------------------------------- inicio: mov mov int lea mov int mov int mov mov int mov int mov mov int mov int mov mov int mov int exit: END mov int dx.UNIDAD II Programacion. offset let1 ah. offset msg2 ah. 09h 21h ah. offset msg3 ah. 01h 21h dx. 09h 21h dx. offset msg1 ah. 09h 21h ah. 4C00H 21h MICROPROCESADORES I (Apuntes del Ing.