lenguaje ensamblador

15
UNIDAD II Programacion. ------------------------------------------------------------------------------ UNIDAD II PROGRAMACIÓN 2.1 LENGUAJE ENSAMBLADOR En el lenguaje ensamblador el programador utiliza instrucciones simbólicas en instrucciones de maquina y nombres descriptios para los elementos de datos y localidades de memoria. Usted escribe un programa en ensamblador de acuerdo co conjunto estricto de reglas que despu!s utiliza el programa traductor de ensam conertir el programa ensamblador en código m"quina. E#isten $ clases de lenguajes de programación% de alto niel y de programadores que escriben en un lenguaje de alto niel 'como ( y comandos poderosos* cada uno de los cuales puede generar muc,as inst lenguaje de m"quina. Por otro lado* los programadores que escriben e ensamblador de bajo niel codi+ican instrucciones simbólicas* cada una de las una instrucción en lenguaje maquina. A pesar del ,ec,o de que codi+icar en un alto niel es mas productio* algunas entajas de codi+icar en lenguaje ensamb Proporciona mas control sobre el manejo particular de los requer ,ard are. enera módulos ejecutables mas peque/os y mas compactos. (on mayor probabilidad tiene una ejecución mas r"pida. Una pr"ctica com0n es combinar los bene+icios de ambos nieles de programación lenguaje de alto niel utiliza un compilador para traducir el código +uente a maquina. Un lenguaje de bajo niel utiliza un ensamblador para realizar la tra Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. &os tipos de enunciados o l1neas de programación son% 2.- Instrucción* tal como 345 y ADD* que el ensamblador traduce a código objet $.- Directia* que indican al ensamblador que realice una acción especi+ica* c elemento de dato. ENUNCIADO O LINEA DE PROGRAMACIÓN: [Etiqueta] <Operación o irecti!a" [ operano #$% ] [ & co'entari NOTA: Los corchetes indican una entrada opcional A continuación se ,ar" un comentario de c 6elemento% 27

Upload: javier-velazquez-sanchez

Post on 07-Oct-2015

218 views

Category:

Documents


0 download

DESCRIPTION

una pequeña descripcion de lo que es programar en lenguaje ensamblador

TRANSCRIPT

GRUPO DE INSTRUCCIONES Y LENGUAJE ENSAMBLADOR

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] [ operando (s) ] [ ; comentarios ]

NOTA: Los corchetes indican una entrada opcional

A continuacin se har un comentario de c /elemento:

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) Etiq1:MOV AX, 20H

(Directiva) Constante Equ 100

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

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 OPERACIN OPERANDO COMENTARIO

Counter DB 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 OPERANDO COMENTARIO RET ; Regresa

INC CX ; Incrementa el registro CX

ADD AX, 12 ; 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 SMALL ; indica el modelo de memoria (SMALL)

.STACK 200 ; indica el tamao del STACK (bytes)

.DATA ; indica que la siguiente informacin

___ ; deber quedar en el segmento de datos

___

___

.CODE ; indica que la siguiente informacin

___ ; es el programa ejecutable

___

___

MOV AH,4CH ;necesario para terminar el programa

INT 21H ; y regresar al prompt C>

END ; Indica el fin del programa

TIPOS DE MODELOS DE MEMORIA

Model TYNY CS = DS En 1 solo segmento d 64K

Model SMALL CS = 64Kb DS = 64Kb

Model MEDIUM CS > 64Kb DS < 64Kb

Model COMPAC CS < 64Kb DS > 64Kb

Model LARGE CS > 64Kb DS > 64Kb(Los arreglos de datos

deben ocupar menos de 64 K)

Model HUGE CS > 64Kb DS > 64Kb(Los arreglos de datos

pueden ocupar mas de 64 Kb)

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 0

db 1

db 2

db 3

db 4

Directiva DUP para definir una cierta cantidad de datos.

FILA db 100 dup (0) ; define 100 bytes, todos con valor de( 0 )

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 ] )

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 ]

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.

CONJUNTO DE INSTRUCCIONES.

1) TRANSFERENCIA DE DATOS.

A) DE PROPOSITO GENERAL

1.- MOV destino, Fuente ;Mueve datos

2.- PUSH fuente

;Mete datos a la Pila

3.- POP destino

;Saca datos de la Pila

4.- XCHG destino, fuente;Intercambia contenidos

5.- XLAT

;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.- ADD destino, fuente;Suma de nmeros binarios

2.- ADC destino, fuente;Suma con carry

3.- INC destino

; Incrementos de 1

4.- DAA

;Ajuste decimal despus de sumar

5.- AAA

;Ajuste ASCII despus de sumar

B) DE RESTA

1.- SUB destino, fuente;resta valores binarios

2.- SBB destino, fuente;resta con borrow

3.- CMP destino, fuente;compara datos

4.- DAS

;Ajuste decimal despus de restar

5.- AAS

;Ajuste ASCII despus de restar

C) DE MULTIPLICACION.

1.- MUL fuente (sin signo)

;Multiplica sin signo

2.- IMUL fuente (con signo)

;Multiplica con signo(enteros)

3.- AAM

;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.- NOT destino

;Negacin lgica (No)

2.- AND destino, fuente;Conjuncin lgica (y)

3.- OR destino, fuente;Disyuncin lgica (o)

4.- XOR destino, fuente;OR Exclusiva

5.- TEST destino, fuente;Prueba bits

6.- NEG destino

;Negacin

B) DE DESPLAZAMIENTO

1.- SHL destino, contador;Corrimiento lgico a la izquierda

2.- SAL destino, contador;Corrimiento algebraico a la izq.

3.- SHR destino, contador;Corrimiento lgico a la Derecha

4.- SAR destino, contador; Corrimiento algebraico a la Der.

C) GIROS

1.- ROL destino, contador;Rotacin a la izquierda

2.- ROR destino, contador;Rotacin a la derecha

3.- RCL destino, contador; Rotacin a la izquierda con carry

4.- RCR destino, contador; Rotacin a la iderecha con carry

4) INSTRUCCIONES DE CADENA

1.- MOVS cadena-destino, cadena-fuente ; Mueve cadenas

MOVSB ----- MOVSW

2.- LODS cadena-fuente

;carga cadena

3.- STOS cadena-destino, cadena-fuente;Almacena una cadena

STOSB -----STOSW

4.- CMPS cadena-destino, cadena-fuente

;Compara cadenas

CMPSB ------CMPSW

5.- SCAS cadena-destino

;Explora una cadena

SCASB ------SCASW

5) INSTRUCCIONES DE TRANSFERENCIA DE PROGRAMA

A) TRANSFERENCIA INCONDICIONAL

1.- CALL destino

;llama a un procedimiento

2.- RET (RETN, RETF)

;regresa de un procedimiento

3.- JMP destino

;Salto incondicional

B) TRANSFERENCIA CONDICIONAL

1.- JB/JNAE (Salta si es bajo / no arriba ni igual) CF=1

2.- JAE/JNB (Salta si esta arriba o igual / no esta bajo) CF=0

3.- JBE/JNA (Salta si es bajo igual / no esta arriba) CF=1 o ZF=1

4.- JA/JNBE (Salta si esta arriba / no bajo ni igual) CF=0 y ZF=0

5.- JE/JZ (Salta si fueron iguales) ZF=1

6.- JNE/JNZ (Salta si no es igual a) ZF=0

7.- JL/JNGE (menor/no mas grande ni igual) SF diferente de OF

8.- JGE/JNL (mas grande o igual /no menor) SF=OF

9.- JLE/JNG (menor o igual/no mas grande) ZF=1 o SF diferente

de 0F.

10.- JG/JNLE (mas grande/no menos ni igual) ZF=0 o SF=OF

11.- JP/JPE (paridad puesto/si hay paridad par) PF=1

12.- JNP/JPO (paridad no puesta/ paridad impar) PF=0

13.- JS (bit de signo puesto) S=1

14.- JNS (bit de signo no puesto) SF=0

15.- JC (carry puesto) CF=1

16.- JNC (carry no puesto) CF=0

17.- JO (sobreflujo puesto) OF=1

18.- JNO (sobreflujo no puesto) OF=1

C) CONTROL DE ITERACIONES

1.- LOOP ETIQ ; Repetir hasta que CX=0

2.- LOOPE/LOOPZ ETIQ;Repetir hasta que CX=0 o Z=1

3.- LOOPNE/LOOPNZ ETIQ;Rep. hasta que CX=0 o Z=0

4.- JCXZ ETIQ;Salta si CX=0

6) INSTRUCCIONES DE INTERRUPCION

1.- INT vector

;peticin de Interrupcin

2.- IRET

;Regreso de una interrupcin

7) INSTRUCCIONES DE CONTROL DEL PROCESADOR

a. OPERACIONES CON BANDERAS

1.- STC Pone la bandera de carry C=1

2.- CLC Limpia la bandera de carry C=0

3.- CMC Complementa la bandera de carry

4.- STD Pone la bandera de direccin D=1

5.- CLD Limpia la bandera de direccin D=0

6.- STI Pone la bandera de interrupcin habilitada IF=1

7.- CLI Limpia la bandera de interrupcin habilitada IF=0

b. instrucciones de control del procesador

1.- HLT Pone al micro en estado esttico.

2.- WAIT Entra en edo. de espera hasta que se active la lnea

TEST.

8) INSTRUCCIONES DE CONVERSION

1.- CBW Conversin de Byte a palabra

2.- CWD Conversin de palabra a doble palabra

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.

MOVAX, @ DATA

MOVDS, AX

DIFERENCIAS BASICAS EN SU FORMATO DE PROGRAMA:

FORMATO .COM

FORMATO .EXE .Model TINY

.Model SMALL HUGE

.Code

.STACK 200

ORG 100H

.DATA

START: JMP INICIO

Var1 DB 00H

Var1 db 00H

Var2 DB 00H

Var2 db 00H

INICIO:

INICIO: mov AX,@DATA

____ mov DS,AX

____ ___ ____ ___

____ ___

mov AH,4CH mov AH,4CH

Int 21H int 21H

END END

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).

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 21HAH= 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 Small

.stack 100

.data

let1db13,10,10, Mi primer programa de ejemplo $

let2 db 13,10, Cual mensaje deseas $

msg1 db 13,10, Mensaje UNO $

msg2 db 13,10, Mensaje DOS $

msg3 db 13,10, Mensaje TRES $

.Code

movax, @DATA

movds, ax

inicio: movdx, offset let1

movah, 09h

int

21h

lea

dx, [let2]

mov ah, 09h

int 21h

movah, 01h

int 21h

movdx, offset msg1

mov ah, 09h

int 21h

movah, 01h

int 21h

movdx, offset msg2

mov ah, 09h

int 21h

movah, 01h

int 21h

movdx, offset msg3

mov ah, 09h

int 21h

movah, 01h

int 21h

exit: movax, 4C00H

int

21h

END

PAGE 32