Vous êtes sur la page 1sur 11

UNIVERSIDAD TECNOLGICA DEL PER

TEMA:

LABORATORIO 1

CURSO: MICROPROCESADORES
DOCENTE:
Pedro Pascual Aberga Farro
ALUMNO:
ATENCIO MAURICIO, Enrique Alcides

1525315

Lima, 27-02-2016

INTRODUCCION
El 8086 es un procesador de 16 bits. Esto significa que trabaja con registros
internos de este tamao y que la amplitud del bus de datos de tambin de 16
bits. Sin embargo todas las instrucciones que usaremos aqu sern todava
funcionales cuando queramos adaptarnos a generaciones posteriores de
procesadores, como el 80386, 486, Pentium, con tamaos de palabra
mayores.
Conceptos de espacio de almacenamiento de datos:
Palabra 16 bits, Doble palabra, cudruple palabra.
Almacenamiento: primero el byte menos significativo y luego el ms
significativo (en sentido creciente de las direcciones de memoria)
Pgina 256 bytes
Segmento 64K bytes
No es necesario que las direcciones se ajusten a palabra (ajuste de frontera)
porque el procesador genera automticamente las lecturas de memoria que
necesite. Sin embargo s es recomendable.
Espacio de memoria:
Decimos que un procesador trabaja con un tamao de palabra N, porque sus
registros tienen tamao N y generalmente las transacciones de datos se hacen
en bloques de N bits. Pese a esto el bus que comunica al procesador con el
entorno no tiene que corresponder a estas restricciones. Generalmente el bus
de datos va a seguir siendo de tamao N, aunque puede ocurrir que su
tamao sea menor y una transaccin haya que realizarla en dos fases (8088).
En cuanto al bus de direcciones no est restringido a N lneas, de hecho
interesa que sea lo mayor posible para que abarque el mayor espacio de
direcciones posible.
La memoria en el 8086 est dividida en segmentos. Como el tamao de los
registros es de 16 bits, el mayor rango de direcciones que podemos sealar
con ellos es de 64K bytes. Sin embargo el bus de direcciones tiene veinte bits
abarcando un espacio de direcciones de 1M bytes. El modo de sealar una
direccin entonces consiste en fijar una posicin de memoria llamada base e
indicar un desplazamiento a partir de esa direccin. Este desplazamiento
puede ser como mximo de 64K bytes.
Cuando un programa se va a ejecutar, primero tiene que fijar sus segmentos.
Un programa trabaja con cuatro segmentos simultneamente: el segmento de
cdigo, dos segmentos de datos y un segmento de pila. Estos segmentos de
memoria, pueden ser disjuntos, o tener parcial o an completo solapamiento.
Las direcciones base de segmentos son siempre mltiplos de 16. As, por
ejemplo, el segmento 0 y el segmento 1 se solapan parcialmente, pero cada
uno de ellos tiene diecisis bytes particulares.
2

Recursos del procesador:


Registros.
Para poder programar en un procesador particular debemos conocer primero el
conjunto de recursos que el procesador pone a disposicin del programador:
registros, interrupciones, espacio de memoria y entrada salida. Y luego el
conjunto de instrucciones que nos permiten manipularlos para lograr nuestros
fines.
En primer lugar se nos ofrecen cuatro registros de 16 bits de propsito general,
aunque cada uno tiene asignadas labores ms especializadas:
AX: Acumulador
BX: Base
CX: Contador
DX: Dato
Si se trabaja con datos de ocho bits, estos registros pueden ser vistos por las
instrucciones como ocho registros de un byte cada uno
AH, AL
BH, BL
CH, CL
DH, DL
SP,BP
SI,DI
Se pueden utilizar como propsito general, aunque tienen una funcionalidad
ms definida. Son llamados registros de ndice y sirven para mediatizar en
accesos a memoria. SP y BP se utilizan en accesos al segmento de pila y SI y
DI, en los accesos a segmentos de datos.
Para mantener la referencia a los segmentos con los que trabaja un proceso
durante su ejecucin existen cuatro registros:
CS: mantiene el segmento de cdigo
DS: segmento de datos
ES: segmento de datos extra
SS: segmento de stack
Estos cuatro registros contienen la referencia al segmento correspondiente
(desplazndolos cuatro bits a la izquierda la direccin base del segmento)
Cualquier referencia a memoria utiliza estos registros de forma automtica,
aunque el usuario, puede especificar concretamente qu registros desea usar
en transacciones determinadas.
CS:IP
DS:BX,SI,DI
SS:SP,BP
ES:BX,SI,DI

Flags, IP
El registro IP contiene la siguiente instruccin a ejecutar y el usuario no tiene
ningn acceso a este registro, sin embargo con instrucciones de bifurcacin
est modificndolo implcitamente.
En cuanto al registro de flags, contiene una serie de seales que nos indican el
estado del procesador en cualquier momento. Estas seales o banderas nos
sirven para dirigir el control del proceso a partir de sucesos previos. Las
banderas que se nos ofrecen son las siguientes:
de estado:
CF: de acarreo.
OF: de overflow
ZF: de resultado cero
SF: de resultado negativo
PF: paridad del resultado
AF: auxiliar (correccin en lgica decimal BCD)
de control:
DF: de direccin (en instrucciones mltiples)
IF: de interrupciones
TF: paso a paso.
Interrupciones:
El sistema de interrupciones para un programador consiste en un conjunto de
posiciones de memoria comenzando en la direccin absoluta de memoria 0,
que contienen, cada dos palabras, una direccin de salto a una rutina de
atencin a la interrupcin. (la direccin 0 corresponde a la interrupcin 0, la
direccin 2 a la interrupcin 1, etc). Cuando se invoca una interrupcin, sea
fsica, por algn dispositivo, o lgica, algn error de ejecucin o invocacin de
programa, el mecanismo de atencin toma de la direccin correspondiente que
le indica el nmero de interrupcin, la direccin destino del salto y obtiene de
all la siguiente instruccin a ejecutar. Para crear una rutina de atencin a
determinada interrupcin, el programador tiene que localizar el programa en
memoria y luego almacenar en la posicin de la interrupcin correspondiente la
direccin de comienzo del mismo. Naturalmente escribir una rutina de
interrupcin obliga a respetar ciertos protocolos.
Entrada/Salida
Se dispone de instrucciones especficas de entrada salida. El procesador
proporciona un espacio de direcciones de entrada salida separado del de
memoria. No existe registro de segmento de entrada salida por lo que se
supone que todos las direcciones estn en el primer y nico segmento.

Instrucciones:
Hay 92 tipos de instrucciones. Por tipo entendemos instruccin genrica, por
ejemplo mover. Una instruccin genrica puede tener muchos casos segn
donde residan los datos y el modo de direccionamiento que seleccionemos
para sealar un dato en memoria.
Todas las instrucciones pueden trabajar con ambos tamaos 8 o 16 bits.
Naturalmente ambos operandos deben ser semejantes para poder realizar una
operacin entre ellos. En los accesos a memoria, dependiendo de los registros
utilizados se codifica la instruccin mquina con tamao byte o tamao palabra.
Si no se utilizan registros, el tamao debe venir definidos en la propia
instruccin mediante una directiva.
Hay 7 modos de direccionamiento.
(En todos los casos se usa AX como podra haberse utilizado cualquier otro
registro)
1. MOV AX,BX
De registro a registro
2. MOV AX, 500
Inmediato.
3. MOV AX, TABLA
Uso de variable
TABLA es un smbolo que para el compilador tendr el mismo sentido que
una direccin de memoria especificada directamente.
4. MOV AX, [BX]
Indirecto mediante registro.
MOV AX, [BP]
MOV AX, [DI]
MOV AX, [SI]
Los registros encerrados entre corchetes contienen un desplazamiento
dentro del segmento con el que se trabaje. El uso de determinados registros
asume implcitamente un registro de segmento. En este caso BX, DI y SI
asume el registro DS y al usar BP se asume el registro de segmento SS
5. MOV AX, [BX]+4
Relativo a base
MOV AX, [BP]+4
Al contenido de BX o BP se le suma el valor especificado para obtener el
desplazamiento.
6. MOV AL,TABLA[DI]
Directo indexado
MOV AL,TABLA[SI]
7. MOV AX,TABLA[BX][SI]
Indexado a base.
MOV AX,TABLA[BX][DI]
MOV AX,TABLA[BP][SI]
MOV AX,TABLA[BP][DI]
La duracin de las instrucciones va de 2 a 206 ciclos de procesador.
El conjunto de instrucciones se puede clasificar en uno de los siguientes
grupos:
Transferencia de datos
Aritmticas
Aritmtica de bits
5

Transferencia de control
Operaciones de cadenas (de bytes)
Interrupciones
Control del microprocesador

Programacin en ensamblador:
Un programa en ensamblador es una especificacin de instrucciones en el
orden en que deseamos que se ejecuten, adems de una especificacin de los
datos de partida. Para facilitar esta especificacin existen las instrucciones
ensamblador y adems otras herramientas que nos proporciona el nivel de
abstraccin tales como pseudo instrucciones y directivas.
Las directiva son una serie de comandos que nos permiten controlar las
acciones del compilador, tanto las relacionadas con la propia codificacin de
instrucciones como con la generacin de informacin residual del proceso.
Las pseudo instrucciones son instrucciones en ensamblador que podran no
corresponderse directamente con una instruccin en cdigo mquina. Es una
abstraccin que se crea en el nivel de abstraccin para facilitar la tarea al
programador.
En un programa hay que especificar los segmentos; como mnimo el segmento
de cdigo que es el que almacena el programa. Generalmente un segmento de
datos y opcionalmente un segmento de pila y un segmento extra.
El cdigo, naturalmente, va encerrado dentro del segmento de cdigo.
Generalmente los datos iniciales se encierran el segmento de datos quedando
el extra para apoyo de la codificacin. Sin embargo cada situacin requiere sus
propias decisiones. Un programa puede carecer de segmentos de datos
predefinidos, aunque no de segmento de cdigo.

JNB
- Saltar si no es menor
JNBE
- Saltar si no es menor o igual
JNC
- Saltar si no hay acarreo
JNE
- Saltar si no es igual
JNG
- Saltar si no es mayor
JNGE
- Saltar si no es mayor o igual
JNL
- Saltar si no es menor
JNLE
- Saltar si no es menor o igual
JNO
- Saltar si no se produce desbordamiento
JNP
- Saltar si no hay paridad
JNS
- Saltar si no es negativo
JNZ
- Saltar si no es cero
JMP
- Salto incondicional
JO
- Saltar si se produce desbordamiento
JP
- Saltar si hay paridad
JPE
- Saltar si hay paridad par
JPO
- Saltar si hay paridad impar
JS
- Saltar si el signo es negativo
JZ
- Saltar si el resultado es cero
LOOP
- Bucle hasta que acabe contador
LOOPE - Bucle mientras igual
LOOPNE - Bucle mientras no igual
LOOPNZ - Bucle mientras resultado no cero
LOOPZ - Bucle mientras resultado cero
RET
- Retornar de un procedimiento

INSTRUCCIONES 8086
Transferencia de datos
IN
LAHF
LDS
LEA
LES
MOV
OUT
POP
POPF
PUSh
PUSHF
SAHF
XCHG
XLAT

- entrada de bytes o palabra


- Cargar AH con las banderas
- Cargar puntero usando DS
- Cargar direccin efectiva
- Cargar puntero usando ES
- Mover
- Salida de byte o palabra
- Recuperar palabra de la pila
- Recuperar banderas de la pila
- Depositar palabra en la pila
- Depositar banderas en la pila
- Almacenar Ah en banderas
- Intercambiar dos operandos
- Traducir

Instrucciones aritmticas
AAA
AAD
AAM
AAS
ADC
ADD
CBW
CMP
CWD
DAA
DAS
DEC
DIV
IDIV
IMUL
INC
MUL
NEG
SBB
SUB

- Ajuste ASCII en suma


- Ajuste ASCII en divisin
- Ajuste ASCII en multiplicacin
- Ajuste ASCII en resta
- Sumar con acarreo
- Sumar (sin acarreo)
- Convertir byte en palabra
- Comparar operandos
- Convertir palabra a doble palabra
- Ajuste decimal en suma
- Ajuste decimal en resta
- Decrementar en uno
- Dividir sin signo
- Dividir con signo
- Multiplicar con signo
- Incrementar en uno
- Multiplicar sin signo
- Negar/formar complemento a 2
- Restar con acarreo
- Restar (sin acarreo)

Instrucciones de manejo de cadenas.


CMPS
- Comparar cadenas de bytes o palabras
CMPSB - Comparar cadenas de bytes
CMPSW - Comparar cadenas de palabras
LODS
- Cargar cadena (bytes o palabras)
LODSB - Cargar cadena de bytes
LODSW - Cargar cadena de palabras
MOVS
- Mover cadena (bytes o palabras)
MOVSB - Mover cadenas de bytes
MOVSW - Mover cadenas de palabras
REP
- Repetir operacin de cadena
REPE
- Repetir mientras igual
REPNE - Repetir mientras no igual
REPNZ - Repetir mientras resultado no cero
REPZ
- Repetir mientras resultado cero
SCAS
- Explorar cadena (b o p)
SCASB - Explorar cadena de bytes
SCASW - Explorar cadena de palabras
STOS
- Almacenar cadena (b o w)
STOSB - Almacenar cadena de bytes
STOSW - Comprarse una tienda en el polo norte.

Instrucciones de manejo de bits


AND
- Y lgico
NOT
- Negacin lgica
OR
- O lgico
RCL
- Rotacin a izquierda a travs del bit de acarreo
RCR
- Rotacin a derecha a travs del bit de acarreo
ROL
- Rotacin a izquierda
ROR
- Rotacin a derecha
SAL
- Desplazamiento aritmtico a izquierda
SAR
- Desplazamiento aritmtico a derecha
(conservando el signo)
SHL
- Desplazamiento lgico a izquierda
SHR
- Desplazamiento lgico a derecha
TEST
- Comparacin lgica de dos operandos
XOR
- O lgico exclusivo

Instrucciones de interrupcin.
INT
INTO
IRET

Instrucciones de control de microprocesador.


CLC
- Borrar bandera de acarreo
CLD
- Borrar bandera de direccin
CLI
- Borrar bandera de interrupcin
CMC
- Complementar bandera de acarreo
ESC
- Escape (transmitir informacin a un
coprocesador)
HLT
- Parar el procesador
LOCK
- Bloquear el bus
NOP
- No operacin
STC
- Activar bandera de acarreo
STD
- Activar bandera de direccin
STI
- Activar bandera de interrupcin
WAIT
- Esperar a que termine un coprocesador.

Instrucciones de transferencia del control


CALL
JA
JAE
JB
JBE
JC
JCXZ
JE
JG
JGE
JL
JLE
JNA
JNAE

- Invocar a la interrupcin
- Interrupcin si desbordamiento
- Retorno de interrupcin

- Llamada a procedimiento
- Saltar si superior
- Saltar si superior o igual
- Saltar si inferior
- Saltar si inferior o igual
- Saltar si hay acarreo
- Saltar si CX es cero
- Saltar si igual
- Saltar si mayor
- Saltar si mayor o igual
- Saltar si menor
- Saltar si menor o igual
- Saltar si no es mayor
- Saltar sino es mayor o igual

Directivas de listado

DIRECTIVAS DEL
COMPILADOR

Formato del listado


PAGUE - Formato de la pgina del listado
TITLE
- Ttulo del listado
SUBTTL - Subttulo del listado

Directivas de datos
Definicin de smbolos
EQU
=

Listado de macros

- Asigna smbolo a expresin fija


- Asigna smbolo a expresin variable

.LALL
.SALL
.XALL

Definicin de datos
DB
DW
DD
DQ
DT

- Definir byte
- Definir palabra
- Definir doble palabra
- Definir cudruple palabra
- Definir diez bytes

- Listar macros y expansiones


- Suprimir listado macros y expansiones
- Listar slo macros que generan cdigo objeto

Control del listado


.XCREF
.CREF
.XLIST
.LIST

Referencias externas

- Suprimir referencias cruzadas


- Restaurar listado de referencias cruzadas
- Suprimir listado ensamblador
- Restaurar listado ensamblador

Comentarios

PUBLIC - Definir smbolo pblico


EXTRN - Definir smbolo externo
INCLUDE - Incluir fichero fuente

COMMENT - Comentario
Mensajes

Control del ensamblador

%OUT

END
- Fin del mdulo fuente
ORIGIN - Origen de cdigo o datos
EVEN
- Poner contador de posiciones a par
.RADIX - Definir base de numeracin por defecto.

Control del listado de los bloques asociados a una


condicin falsa
.LFCOND - Listar bloques asociados a una condicin falsa
.SFCOND - Suprimir ese listado mencionado arriba
.TFCOND - Invertir el modo de listado de los bloques...

Definicin de segmentos y procedimientos


SEGMENT - Comienzo de segmento
ENDS
- Final de segmento
ASSUME - Suponer registros de segmentos
PROC
- Comienzo de procedimiento
ENDP
- Fin de procedimiento

Directivas de macro
Definicin de macros
MACRO - Comienza macro
ENDM - Fin macro
LOCAL - Define etiquetas dentro de macro
EXITM - Terminar expansin de la macro
PURGE - Borrar macros de la memoria
REPT
- Repetir bloque de sentencias un nmero de
veces
IRP
- Repetir bloque de sentencias con un valor cada
vez
IRPC
- Repetir bloque de sentencias con un carcter
cada vez
Operadores de macro
&
- Operador para concatenar smbolos o texto
;;
- Operador para comentarios que no aparecern
en la expansin
!
- Operador para interpretar caracteres en sentido
literal
%
- Operador para convertir una expresin en un
nmero

Definicin de bloques
GROUP - Agrupar segmentos
NAME - Nombrar un mdulo
LABEL - Asignar un atributo a un nombre
RECORD - Definir registro
STRUC - Definir estructura
Directivas condicionales
IF
ELSE
ENDIF

- Emitir un mensaje durante el ensamblaje

- Evaluar condicin y decidir


- Si condicin es falsa
- Fin de estructura condicional

LABORATORIO 1
Crear un programa en lenguaje ensamblador para el up 8086 que calcule el
promedio de 4 notas, cada uno con diferente peso.
El programa debe contar con ingreso de datos por teclado y mostrar resultados
en consola.
; Desarrollo:
; inicio del programa que calcule el promedio de 4 notas
org 100h
; add your code here
mov dx, offset nn1 ; se inicia el programa se ingresa nota 1
mov ah, 9
; imprimir una cadena
int 21h
;interrupcion generada por accion del teclado
mov ah, 1
int 21h
sub al, 30h
mov bh,al
mov ah, 1
int 21h
sub al, 30h
mov bl,al
mov ax,bx
aad
mov bx,ax
mov n1,al

;resto 30H (48Dec) para obtener el primer valor

;resto 30H (48Dec) para obtener el primer valor

;Realiza un ajuste del dividendo en AL antes de hacer la divsion de dos numeros.

mov dx, offset pp1 ;se ingresa el valor del peso 1


mov ah, 9
int 21h
mov ah, 1
int 21h
sub al, 30h
;resto 30H (48Dec) para obtener el primer valor
mov p1,al
mov dx, offset nn2
mov ah, 9
int 21h
mov ah, 1
int 21h
sub al, 30h
mov bh,al
mov ah, 1
int 21h
sub al, 30h
mov bl,al
mov ax,bx
aad
mov bx,ax
mov n2,al
mov dx, offset pp2
mov ah, 9
int 21h
mov ah, 1
int 21h
sub al, 30h
mov p2,al

mov dx, offset nn3


mov ah, 9
int 21h
mov ah, 1
int 21h
sub al, 30h
mov bh,al
mov ah, 1
int 21h
sub al, 30h
mov bl,al
mov ax,bx
aad
mov bx,ax
mov n3,al
mov dx, offset pp3
mov ah, 9
int 21h
mov ah, 1
int 21h
sub al, 30h
mov p3,al
mov dx, offset nn4
mov ah, 9
int 21h
mov ah, 1
int 21h
sub al, 30h
mov bh,al
mov ah, 1
int 21h
sub al, 30h
mov bl,al
mov ax,bx
aad
mov bx,ax
mov n4,al
mov dx, offset pp4
mov ah, 9
int 21h
mov ah, 1
int 21h
sub al, 30h
mov p4,al
;se multiplica la nota por el peso correspondiente
mov al,n1
mul p1
mov dato1,al
mov al,n2
mul p2
mov dato2,al
mov al,n3
mul p3
mov dato3,al
mov al,n4
mul p4
mov dato4,al
;suma del producto de las notas con su respectivo peso
mov al,dato1
add al,dato2

10

add al,dato3
add al,dato4
mov suma,al
mov al,p1
add al,p2
add al,p3
add al,p4
mov r,al

;suma de las notas por el peso

;suma de los valores total de los pesos

mov al,suma
div r
mov e,al
;se divide la suma producto entre el valor de la suma de los peso
mov bx,0
mov bl,e
mov ax,bx
aam
mov bx,ax
add bx,3030h
mov dx, offset promedio
mov ah, 9
int 21h
mov ah, 2
mov dl,bh
int 21h
mov ah, 2
mov dl,bl
int 21h

;interrupcion terminar el programa

ret
;

se definen la variables

n1 db ?;
n2 db ?;
n3 db ?;
n4 db ?;
p1 db ?;
p2 db ?;
p3 db ?;
p4 db ?;
suma db ?
r db ?
e db ?
dato1 db ?;
dato2 db ?;
dato3 db ?;
dato4 db ?;
nn1 db 10, 13, 'Nota practica 01:$'
nn2 db 10, 13, 'Nota practica 02:$'
nn3 db 10, 13, 'Nota practica 03:$'
nn4 db 10, 13, 'Nota practica 04:$'
pp1 db 10,13, 'peso 01:$'
pp2 db 10,13, 'peso 02:$'
pp3 db 10,13, 'peso 03:$'
pp4 db 10,13, 'peso 04:$'
promedio db 10,13, 'promedio:$'
ret

11

Vous aimerez peut-être aussi