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

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

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

COMENTARIO
; Regresa
; Incrementa el registro CX
; Suma 12 al registro AX

CX
AX, 12

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
___
___
___
.CODE
___
___
___
MOV AH,4CH
INT 21H

; indica que la siguiente informacin


; deber quedar en el segmento de datos

END

; Indica el fin del programa

; indica que la siguiente informacin


; es el programa ejecutable
;necesario para terminar el programa
; y regresar al prompt C>

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

Model HUGE

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)

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

; Mueve cadenas

2.- LODS
cadena-fuente
3.- STOS
cadena-destino, cadena-fuente
STOSB -----STOSW

;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

;Compara cadenas

5.- SCAS
cadena-destino
SCASB ------SCASW

;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

10.- JG/JNLE
11.- JP/JPE
12.- JNP/JPO
13.- JS
14.- JNS
15.- JC
16.- JNC
17.- JO
18.- JNO

(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

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

DB
DB

00H
00H

INICIO:
____
____
____
____
mov AH,4CH
Int 21H
END

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

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

30

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

Small
100

let1 db
let2 db

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

exit:

dx, offset let1


ah, 09h
21h

lea
mov
int

dx, [let2]
ah, 09h
21h

mov
int

ah, 01h
21h

mov
mov
int

dx, offset msg1


ah, 09h
21h

mov
int
mov
mov
int

ah, 01h
21h
dx, offset msg2
ah, 09h
21h

mov
int

ah, 01h
21h

mov
mov
int

dx, offset msg3


ah, 09h
21h

mov
int

ah, 01h
21h

mov
int

ax, 4C00H
21h

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

33

También podría gustarte