Está en la página 1de 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:

19
UNIDAD II Programacion.
--------------------------------------------------------------------------------------------------------------
ETIQUETA o IDENTIFICADOR.- Es un nombre para designar un dato y la
dirección donde se encuentra dicho dato. 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 ( . ) (no puede ser el primer carácter)

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 dirección donde se encuentra


dicho dato.

También podemos hacer:


num dw 6567H

b) Como dirección.- En la cual puede continuar el programa:


SUMA: ADD AX, DX
_____________
_____________
JMP SUMA

OPERACIÓN O DIRECTIVA.- En este campo deberá estar el nombre de la


operación (Mnemónico) 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
código ejecutable, que el micro entiende. La directiva no genera código ejecutable
solo el mnemónico.

(Instrucción) Etiq1: MOV AX, 20H

(Directiva) Constante Equ 100

Algunas directivas serían:


.Model Indica el modelo de memoria que usara el programa
.Stack Indica el tamaño del Stack o pila
.Data Indica el inicio del segmento de datos
.Code Indica el inicio del segmento de código
End Indica el fin del programa

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

OPERANDO.- (Si existe) proporciona información para la operación que actúa


sobre el. Para un elemento de datos, el operando identifica su valor inicial. Por
ejemplo, en le definición siguiente de un elemento de datos llamado COUNTER, la
operación DB significa “definir byte” .

ETIQUETA OPERACIÓN OPERANDO COMENTARIO


Counter DB 0 ; define un byte con valor=0

Para una instrucción un operando indica en donde realizar la operación. Una


instrucción puede tener uno, dos o tal vez ningun operando. Aquí están tres
ejemplos:

OPERACIÓN 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 propósito 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 compañía Borland y el de la compañía Microsoft (MASM).

Los requerimientos mínimos para un programa escrito en lenguaje


ensamblador son:

.Model SMALL ; indica el modelo de memoria (SMALL)

.STACK 200 ; indica el tamaño del STACK (bytes)

.DATA ; indica que la siguiente información


___ ; deberá quedar en el segmento de datos
___
___
.CODE ; indica que la siguiente información
___ ; 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

21
UNIDAD II Programacion.
--------------------------------------------------------------------------------------------------------------
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 )

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 instrucción. 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


ejecución (EU) toma el operando del registro BX, determina como destino el
registro AX y ordena a la ALU llevar a cabo la operación.

 DIRECTO.- El dato a cargar en el operando destino esta guardado en una


variable (Etiqueta). En este direccionamiento la dirección efectiva (EA), para
una localidad de memoria, esta contenida en la instrucción. Para obtener la
dirección de 20 bits, se suman el desplazamiento que tiene la etiqueta y el
contenido del registro DS. La siguiente instrucción 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 través de uno de los siguientes registros: BX, BP,
SI o DI. Para evitar confundir este modo de direccionamiento con el de
registro, en la instrucción, los registros deben aparecer entre paréntesis
rectangulares. Como la EA es una dirección y no el contenido de una
localidad de memoria, antes de utilizar los registros mencionados, estos
deben contener direcciones. Una técnica 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 ] )

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
dirección del desplazamiento. Un ejemplo del uso de este tipo de
direccionamiento lo ofrece la siguiente instrucción:

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 común lo
construye una secuencia de instrucciones, donde primero se carga una
dirección en un registro índice y después 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 dirección 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 ]

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

2.3 CONJUNTO DE INSTRUCCIONES


Las instrucciones están agrupadas en los siguientes grupos y subgrupos:

1.- TRANSFERENCIA DE DATOS.


a) De propósito general.
b) Entrada/Salida.
c) De operando dirección.
d) Transferencia de banderas.

2.-INSTRUCCIONES ARITMENTICAS.
a) Suma.
b) Resta.
c) Multiplicación.
d) División.

3.-MANIPULACION DE BIT.
a) Lógicas.
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) Sincronización extrema.
c) NOP.

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

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 dirección 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 ;Envía 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 números binarios


2.- ADC destino, fuente ;Suma con carry
3.- INC destino ; Incrementos de 1
4.- DAA ;Ajuste decimal después de sumar
5.- AAA ;Ajuste ASCII después 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 después de restar
5.- AAS ;Ajuste ASCII después de restar

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

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 multiplicación

D) DIVISION
1.- DIV fuente (sin signo) ;Divide sin signo
2.- IDIV fuente (con signo) ;Divide con signo
3.- AAD ;Ajuste ASCII para la división

3) INSTRUCCIONES DE MANIPULACION DE BITS

A) LOGICAS

1.- NOT destino ;Negación lógica (No)


2.- AND destino, fuente ;Conjunción lógica (y)
3.- OR destino, fuente ;Disyunción lógica (o)
4.- XOR destino, fuente ;OR Exclusiva
5.- TEST destino, fuente ;Prueba bits
6.- NEG destino ;Negación

B) DE DESPLAZAMIENTO

1.- SHL destino, contador ;Corrimiento lógico a la izquierda


2.- SAL destino, contador ;Corrimiento algebraico a la izq.
3.- SHR destino, contador ;Corrimiento lógico a la Derecha
4.- SAR destino, contador ; Corrimiento algebraico a la Der.

C) GIROS

1.- ROL destino, contador ;Rotación a la izquierda


2.- ROR destino, contador ;Rotación a la derecha
3.- RCL destino, contador ; Rotación a la izquierda con carry
4.- RCR destino, contador ; Rotación 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

27
UNIDAD II Programacion.
--------------------------------------------------------------------------------------------------------------
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

28
UNIDAD II Programacion.
--------------------------------------------------------------------------------------------------------------
6) INSTRUCCIONES DE INTERRUPCION

1.- INT vector ;petición de Interrupción


2.- IRET ;Regreso de una interrupción

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 dirección D=1
5.- CLD Limpia la bandera de dirección D=0
6.- STI Pone la bandera de interrupción habilitada IF=1
7.- CLI Limpia la bandera de interrupción habilitada IF=0

B. INSTRUCCIONES DE CONTROL DEL PROCESADOR

1.- HLT Pone al micro en estado estático.


2.- WAIT Entra en edo. de espera hasta que se active la línea
TEST.

8) INSTRUCCIONES DE CONVERSION

1.- CBW Conversión de Byte a palabra


2.- CWD Conversión de palabra a doble palabra

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

2.4 MODOS DE PROGRAMACIÓN

Existen 2 tipos de programas:


a).- Los programas .EXE
b).- Los programas .COM

Algunas de las diferencias básicas entre un programa que es para ejecutarse


como .EXE y un programa que es para ejecutarse como .COM implica el tamaño
del programa, la segmentación y la inicialización.

 Un programa .COM es mas pequeño que un programa .EXE


 Un programa .COM está restringido a un solo segmento de 64Kb. El
segmento de código, el segmento de datos, el segmento de stack y el
segmento extra están todos traslapados en uno solo. Esto no sucede así en
los programas .EXE
 En un programa .COM los datos están en el mismo segmento que el de
código, por lo tanto la primera instrucción es un salto a donde continua el
código 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 código y el de datos están separados, 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, y cargársela al
registro DS.
MOV AX, @ DATA
MOV DS, 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

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

PROGRAMAS .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).
- El programa inicia en la dirección 100H, ya que este espacio lo reserva
para el PSP (Program Segment prefix)
- La primera instrucción es brinco al inicio del código, 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 códigos las primeras instrucciones son para
recuperar la dirección del segmento de datos.
- Pueden tener ambos tipos de brincos y llamados (NEAR:FAR).

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

2.5 EJEMPLOS DE PROGRAMACIÓN 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 Small
.stack 100
.data

let1 db 13,10,10, “Mi primer programa de ejemplo $ “


let2 db 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 ax, @DATA
mov ds, ax

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

inicio: mov dx, offset let1


mov ah, 09h
int 21h

lea dx, [let2]


mov ah, 09h
int 21h

mov ah, 01h


int 21h

mov dx, offset msg1


mov ah, 09h
int 21h

mov ah, 01h


int 21h
mov dx, offset msg2
mov ah, 09h
int 21h

mov ah, 01h


int 21h

mov dx, offset msg3


mov ah, 09h
int 21h

mov ah, 01h


int 21h

exit: mov ax, 4C00H


int 21h

END

33

También podría gustarte