Vous êtes sur la page 1sur 15

UNIDAD II Programacion.

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

UNIDAD II PROGRAMACIN
2.1 LENGUAJE ENSAMBLADOR
En el lenguaje ensamblador el programador utiliza instrucciones simblicas 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 despus utiliza el programa traductor de ensamblador para convertir el programa ensamblador en cdigo mquina. Existen 2 clases de lenguajes de programacin: 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 mquina. Por otro lado, los programadores que escriben en un lenguaje ensamblador de bajo nivel codifican instrucciones simblicas, cada una de las cuales genera una instruccin 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 mdulos ejecutables mas pequeos y mas compactos. Con mayor probabilidad tiene una ejecucin mas rpida.

Una prctica comn es combinar los beneficios de ambos niveles de programacin. Un lenguaje de alto nivel utiliza un compilador para traducir el cdigo fuente a lenguaje maquina. Un lenguaje de bajo nivel utiliza un ensamblador para realizar la traduccin. Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. Los dos tipos de enunciados o lneas de programacin son: 1.- Instruccin, tal como MOV y ADD, que el ensamblador traduce a cdigo objeto 2.- Directiva, que indican al ensamblador que realice una accin especifica, como definir un elemento de dato. ENUNCIADO O LINEA DE PROGRAMACIN: [Etiqueta] <Operacin o directiva> [ operando (s) ] [ ; comentarios ] NOTA: Los corchetes indican una entrada opcional A continuacin se har un comentario de c /elemento:

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

19

UNIDAD II Programacion. -------------------------------------------------------------------------------------------------------------ETIQUETA o IDENTIFICADOR.- Es un nombre para designar un dato y la direccin donde se encuentra dicho dato. Puede consistir de los siguientes caracteres: Letras del alfabeto: A-Z a -z Dgitos: (0 9) (no puede ser el primer carcter) Caracteres especiales: signo de interrogacin () Subrayado ( _ ) Signo de pesos ( $ ) Arroba ( @ ) Punto ( . ) (no puede ser el primer carcter) no debe tener espacios en blanco en medio de la etiqueta. Para definir una etiqueta se usan los directivos DW, DB. Una etiqueta puede tener los siguientes usos: a) Como variable.- Ejemplo: num db 65 ; A num se le asocia el valor 65 y la direccin donde se encuentra dicho dato.

Tambin podemos hacer: num dw 6567H b) Como direccin.- En la cual puede continuar el programa: SUMA: ADD AX, DX _____________ _____________ JMP SUMA OPERACIN O DIRECTIVA.- En este campo deber estar el nombre de la operacin (Mnemnico) que el micro deber realizar, o el nombre de una orden (directiva) que el programa ensamblador deber ejecutar al momento de ensamblar nuestro programa. Al ensamblarse nuestro programa se genera un cdigo ejecutable, que el micro entiende. La directiva no genera cdigo ejecutable solo el mnemnico. (Instruccin) (Directiva) Etiq1: MOV AX, 20H 100

Constante Equ

Algunas directivas seran: .Model Indica el modelo de memoria que usara el programa .Stack Indica el tamao del Stack o pila .Data Indica el inicio del segmento de datos .Code Indica el inicio del segmento de cdigo End Indica el fin del programa

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

20

UNIDAD II Programacion. -------------------------------------------------------------------------------------------------------------OPERANDO.- (Si existe) proporciona informacin para la operacin que acta sobre el. Para un elemento de datos, el operando identifica su valor inicial. Por ejemplo, en le definicin siguiente de un elemento de datos llamado COUNTER, la operacin DB significa definir byte . ETIQUETA Counter OPERACIN DB OPERANDO COMENTARIO 0 ; define un byte con valor=0

Para una instruccin un operando indica en donde realizar la operacin. Una instruccin puede tener uno, dos o tal vez ningun operando. Aqu estn tres ejemplos: OPERACIN RET INC ADD OPERANDO CX AX, 12 COMENTARIO ; Regresa ; Incrementa el registro CX ; Suma 12 al registro AX

COMENTARIOS.- Empiezan con ( ; ) y mejoran la claridad del programa, donde el propsito de un conjunto de instrucciones en especial no es claro. ESTRUCTURA DE UN PROGRAMA.- Un programa escrito en lenguaje ensamblador se ensambla por medio de un programa ensamblador: Los programas mas comunes para el 8088, 8086 con el Turboensamblador (TASM) de la compaa Borland y el de la compaa Microsoft (MASM). Los requerimientos mnimos para un programa escrito en lenguaje ensamblador son: .Model .STACK .DATA ___ ___ ___ .CODE ___ ___ ___ MOV AH,4CH INT 21H END SMALL 200 ; indica el modelo de memoria (SMALL) ; indica el tamao del STACK (bytes) ; indica que la siguiente informacin ; deber quedar en el segmento de datos ; indica que la siguiente informacin ; es el programa ejecutable ;necesario para terminar el programa ; y regresar al prompt C> ; Indica el fin del programa

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

21

UNIDAD II Programacion. -------------------------------------------------------------------------------------------------------------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, asi podemos hablar de BYTES (8 bits), de palabras WORD (16 bits) de doble palabra (32 bits). Dependiendo de la longitud del dato se usa un directivo diferente para declararlo. DB 1byte DW 2byte DD 4byte DF o DP 6byte DQ 8byte DT 10byte Podemos usar una etiqueta para definir un arreglo, ejemplo: Arreglo db 0, 1, 2, 3, 4 ; define 5 bytes con valores(0,1,2,3,4)

Otra forma de inicializar arreglo. Arreglo db db db db db 0 1 2 3 4

Directiva DUP para definir una cierta cantidad de datos. FILA db 100 dup (0) ; define 100 bytes, todos con valor de( 0 )

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

22

UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------

2.2 MODOS DE DIRECCIONAMIENTO


INMEDIATO.- El dato a cargar en el operando destino es una constante. El usuario especifica un byte o palabra como operando fuente. Esta constante se ensambla como parte de la instruccin. Por ejemplo: MOV AX,18 ;Coloca el num. 18 en el reg. AX. DE REGISTRO.- El dato a cargar en el operando destino se obtiene de un registro . Ejemplo : MOV AX, BX

Es un ejemplo de direccionamiento de registro en donde la unidad de ejecucin (EU) toma el operando del registro BX, determina como destino el registro AX y ordena a la ALU llevar a cabo la operacin. DIRECTO.- El dato a cargar en el operando destino esta guardado en una variable (Etiqueta). En este direccionamiento la direccin efectiva (EA), para una localidad de memoria, esta contenida en la instruccin. Para obtener la direccin de 20 bits, se suman el desplazamiento que tiene la etiqueta y el contenido del registro DS. La siguiente instruccin es un ejemplo de este tipo de direccionamiento. MOV AX, VAR1 Donde previamente se defini en el segmento de datos a VAR1 VAR1 DB 20H

DE REGISTRO INDIRECTO.- El dato a cargar en el operando destino esta guardado en una variable(Normalmente un arreglo) y se carga al operando destino indirectamente a travs de uno de los siguientes registros: BX, BP, SI o DI. Para evitar confundir este modo de direccionamiento con el de registro, en la instruccin, los registros deben aparecer entre parntesis rectangulares. Como la EA es una direccin y no el contenido de una localidad de memoria, antes de utilizar los registros mencionados, estos deben contener direcciones. Una tcnica para asegurar lo anterior es utilizar el operador OFFSET. MOV BX, OFFSET ARREGLO Este modo de direccionamiento se puede usar para colocar el contenido de la localidad de memoria a la que apunta BX, por ejemplo en AX. MOV AX, [ BX ] Donde [BX] es un desplazamiento relativo a DS ( DS:[ BX ] )

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

23

UNIDAD II Programacion. ------------------------------------------------------------------------------------------------------------- RELATIVO A LA BASE.- Al hacer uso de este modo de direccionamiento, la EA del operando fuente se obtiene al sumar un desplazamiento a los siguientes registros: BP o BX. En este caso, los registros deben contener la direccin del desplazamiento. Un ejemplo del uso de este tipo de direccionamiento lo ofrece la siguiente instruccin: MOV AX, [ BX+2 ] INDEXADO DIRECTO.- En este modo, la (EA) es la suma del contenido de un registro ndice (SI o DI) y un desplazamiento. Un ejemplo comn lo construye una secuencia de instrucciones, donde primero se carga una direccin en un registro ndice y despus la misma se combina con una localidad de memoria. MOV SI, 2 MOV AX, ARREGLO[ SI ] En este caso, en el registro AX se coloca el contenido de la localidad de memoria cuya direccin es la de ARREGLO + 2. INDEXADO DE BASE.- La (EA) es la suma de los contenidos del registro base (BX), un registro ndice (SI o DI) y un desplazamiento (opcional). La siguiente es una secuencia de instrucciones que ilustra este tipo de direccionamiento. MOV BX,OFFSET ETIQUETA MOV SI, MOV AX,[ BX + SI +2 ]

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

24

UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------

2.3 CONJUNTO DE INSTRUCCIONES


Las instrucciones estn agrupadas en los siguientes grupos y subgrupos: 1.- TRANSFERENCIA DE DATOS. a) De propsito general. b) Entrada/Salida. c) De operando direccin. d) Transferencia de banderas. 2.-INSTRUCCIONES ARITMENTICAS. a) Suma. b) Resta. c) Multiplicacin. d) Divisin. 3.-MANIPULACION DE BIT. a) Lgicas. b) Desplazamiento. c) Giro. 4.-DE CADENA. 5.-DE TRANSFERENCIA DE PROGRAMA. a) Incondicional. b) Condicional. c) Control de iteraciones. 6.-DE INTERRUPCIONES. 7.-CONTROL DEL PROCESADOR. A) Operaciones con banderas. b) Sincronizacin extrema. c) NOP.

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

25

UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------

CONJUNTO DE INSTRUCCIONES. 1) TRANSFERENCIA DE DATOS. A) DE PROPOSITO GENERAL 1.- MOV destino, Fuente 2.- PUSH fuente 3.- POP destino 4.- XCHG destino, fuente 5.- XLAT

;Mueve datos ;Mete datos a la Pila ;Saca datos de la Pila ;Intercambia contenidos ;Traduce (Uso para tablas)

B) GRUPO DE ENTRADA-SALIDA. 1.- IN acumulador, puerto ;Lee un dato del Puerto 2.- OUT puerto, acumulador ;Saca un dato por el puerto C) DE OPERANDO DE DIRECCION. 1.- LEA destino, fuente ;Carga una direccin efectiva 2.- LDS destino, fuente ;Carga el reg. De segmento datos 3.- LES destino, fuente ;Carga el reg. De segmento extra D) TRANSFERENCIA DE BANDERAS. 1.- LAHF ;Carga al reg. AH con las banderas 2.- SAHF ;Enva el reg AH al reg. de Banderas 3.- PUSHF ;Guarda las banderas en el stack 4.- POPF ;Lo que saca del stack lo pone en el reg. De banderas 2) INSTRUCCIONES ARITMETICAS A) DE SUMA 1.2.3.4.5.ADD ADC INC DAA AAA destino, fuente destino, fuente destino ;Suma de nmeros binarios ;Suma con carry ; Incrementos de 1 ;Ajuste decimal despus de sumar ;Ajuste ASCII despus de sumar

B) DE RESTA 1.- SUB 2.- SBB 3.- CMP 4.- DAS 5.- AAS destino, fuente destino, fuente destino, fuente ;resta valores binarios ;resta con borrow ;compara datos ;Ajuste decimal despus de restar ;Ajuste ASCII despus de restar

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

26

UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------

C) DE MULTIPLICACION. 1.- MUL 2.- IMUL 3.- AAM fuente (sin signo) fuente (con signo) ;Multiplica sin signo ;Multiplica con signo(enteros) ;Ajuste ASCII para la multiplicacin

D) DIVISION 1.- DIV fuente (sin signo) ;Divide sin signo 2.- IDIV fuente (con signo) ;Divide con signo 3.- AAD ;Ajuste ASCII para la divisin 3) INSTRUCCIONES DE MANIPULACION DE BITS A) LOGICAS 1.2.3.4.5.6.NOT AND OR XOR TEST NEG destino destino, fuente destino, fuente destino, fuente destino, fuente destino ;Negacin lgica (No) ;Conjuncin lgica (y) ;Disyuncin lgica (o) ;OR Exclusiva ;Prueba bits ;Negacin

B) DE DESPLAZAMIENTO 1.2.3.4.SHL SAL SHR SAR destino, contador destino, contador destino, contador destino, contador ;Corrimiento lgico a la izquierda ;Corrimiento algebraico a la izq. ;Corrimiento lgico a la Derecha ; Corrimiento algebraico a la Der.

C) GIROS 1.2.3.4.ROL ROR RCL RCR destino, contador destino, contador destino, contador destino, contador ;Rotacin a la izquierda ;Rotacin a la derecha ; Rotacin a la izquierda con carry ; Rotacin a la iderecha con carry

4) INSTRUCCIONES DE CADENA 1.- MOVS cadena-destino, cadena-fuente MOVSB ----- MOVSW 2.- LODS cadena-fuente 3.- STOS cadena-destino, cadena-fuente STOSB -----STOSW ; Mueve cadenas ;carga cadena ;Almacena una cadena

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

27

UNIDAD II Programacion. -------------------------------------------------------------------------------------------------------------4.- CMPS cadena-destino, cadena-fuente CMPSB ------CMPSW 5.- SCAS cadena-destino SCASB ------SCASW ;Compara cadenas ;Explora una cadena

5) INSTRUCCIONES DE TRANSFERENCIA DE PROGRAMA

A) TRANSFERENCIA INCONDICIONAL 1.- CALL 2.- RET 3.- JMP destino (RETN, RETF) destino ;llama a un procedimiento ;regresa de un procedimiento ;Salto incondicional

B) TRANSFERENCIA CONDICIONAL 1.2.3.4.5.6.7.8.9.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. (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.- JG/JNLE 11.- JP/JPE 12.- JNP/JPO 13.- JS 14.- JNS 15.- JC 16.- JNC 17.- JO 18.- JNO

C) CONTROL DE ITERACIONES 1.2.3.4.LOOP ETIQ LOOPE/LOOPZ ETIQ LOOPNE/LOOPNZ ETIQ JCXZ ETIQ ; Repetir hasta que CX=0 ;Repetir hasta que CX=0 o Z=1 ;Rep. hasta que CX=0 o Z=0 ;Salta si CX=0

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

28

UNIDAD II Programacion. -------------------------------------------------------------------------------------------------------------6) INSTRUCCIONES DE INTERRUPCION 1.2.INT vector IRET ;peticin de Interrupcin ;Regreso de una interrupcin

7) INSTRUCCIONES DE CONTROL DEL PROCESADOR a. OPERACIONES CON BANDERAS 1.2.3.4.5.6.7.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 direccin D=1 CLD Limpia la bandera de direccin D=0 STI Pone la bandera de interrupcin habilitada IF=1 CLI Limpia la bandera de interrupcin habilitada IF=0

B. INSTRUCCIONES DE CONTROL DEL PROCESADOR 1.2.HLT WAIT Pone al micro en estado esttico. Entra en edo. de espera hasta que se active la lnea TEST.

8) INSTRUCCIONES DE CONVERSION 1.- CBW 2.- CWD Conversin de Byte a palabra Conversin de palabra a doble palabra

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

29

UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------

2.4 MODOS DE PROGRAMACIN


Existen 2 tipos de programas: a).- Los programas .EXE b).- Los programas .COM Algunas de las diferencias bsicas entre un programa que es para ejecutarse como .EXE y un programa que es para ejecutarse como .COM implica el tamao del programa, la segmentacin y la inicializacin. Un programa .COM es mas pequeo que un programa .EXE Un programa .COM est restringido a un solo segmento de 64Kb. El segmento de cdigo, el segmento de datos, el segmento de stack y el segmento extra estn todos traslapados en uno solo. Esto no sucede as en los programas .EXE En un programa .COM los datos estn en el mismo segmento que el de cdigo, por lo tanto la primera instruccin es un salto a donde continua el cdigo del programa , evitando que el CPU lea los datos como si fueran instrucciones. En los programas .EXE no existe este problema ya que el segmento de cdigo y el de datos estn separados, mas sin embargo las primeras instrucciones en este tipo de programas son para obtener la direccin en donde el sistema operativo guardo los datos, y cargrsela al registro DS. MOV AX, @ DATA MOV DS, AX

DIFERENCIAS BASICAS EN SU FORMATO DE PROGRAMA: FORMATO .COM .Model TINY .Code ORG 100H START: JMP INICIO Var1 Var2 INICIO: ____ ____ ____ ____ mov AH,4CH Int 21H END DB DB 00H 00H FORMATO .EXE .Model SMALL HUGE .STACK 200 .DATA Var1 Var2 db 00H db 00H

INICIO: mov AX,@DATA mov DS,AX ___ ___ ___ mov AH,4CH int 21H END 30

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

UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------

PROGRAMAS .COM Todos los segmentos inician en la misma direccin CS=DS=ES=SS o sea que se encuentran traslapados en un segmento de 64K (modelo TINY). El programa inicia en la direccin 100H, ya que este espacio lo reserva para el PSP (Program Segment prefix) La primera instruccin es brinco al inicio del cdigo, reservando el espacio para datos. Tienen brincos y llamados cortos (NEAR).

PROGRAMAS .EXE Puede tener modelos de memoria, desde el SMALL hasta HUGE. Sus segmentos pueden estar en direcciones diferentes. Al inicio del segmento de cdigos las primeras instrucciones son para recuperar la direccin del segmento de datos. Pueden tener ambos tipos de brincos y llamados (NEAR:FAR).

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

31

UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------

2.5 EJEMPLOS DE PROGRAMACIN BASICA PRIMER PROGRAMA DE EJEMPLO(Formato .EXE): Uso de las funciones 01H, 09H y 4CH de la INT 21H Funcion (01H) INT 21H AH= 01H Funcion para leer 1 tecla del teclado, 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, la cadena termina con un $ y va encerrado entre comillas. Cargar en el registro DX la EA de donde se encuentra la cadena de caracteres. Funcion (4CH) INT 21H AH= 4CH Funcion que sirve para terminar un programa y devolver el control al sistema operativo. Funcion (09H) INT 21H .Model .stack .data let1 db let2 db Small 100 13,10,10, Mi primer programa de ejemplo $ 13,10, Cual mensaje deseas <1-3> $

msg1 db 13,10, Mensaje UNO $ msg2 db 13,10, Mensaje DOS $ msg3 db 13,10, Mensaje TRES $ .Code mov mov ax, @DATA ds, ax

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

32

UNIDAD II Programacion. --------------------------------------------------------------------------------------------------------------

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, offset let1 ah, 09h 21h dx, [let2] ah, 09h 21h ah, 01h 21h dx, offset msg1 ah, 09h 21h ah, 01h 21h dx, offset msg2 ah, 09h 21h ah, 01h 21h dx, offset msg3 ah, 09h 21h ah, 01h 21h ax, 4C00H 21h

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

33

Vous aimerez peut-être aussi