Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MICROCONTROLADORES 1
SISTEMA DE ORDENADORES
Clasificacin segn su capacidad de
trabajo y tratamiento de datos
Mainframes
Miniordenadores
Microordenadores
DEFINICIN DE TRMINOS BSICOS
Conjunto de instrucciones y
FIRMWARE
programas
CAMPOS DE APLICACIN
CAMPOS DE APLICACIN
CLASIFICACIN DE UN SISTEMA
MICROPROCESADO SEGN SU FUNCIONALIDAD
CISC (Complex
Juego complejo de ms de 80 instrucciones
Instruction Set Muchos ciclos de reloj
Computer)
RISC (Reduced
Juego reducido de instrucciones
Instruction Set Un ciclo de reloj
Computer)
SISC (Specific
Instruction Set Juego especfico de instrucciones
Computer)
CLASIFICACION DE UN SISTEMA
MICROPROCESADO SEGN SU ARQUITECTURA
INTERNA
Von Neumann
CLASIFICACION DE UN SISTEMA
MICROPROCESADO SEGN SU ARQUITECTURA
INTERNA
Harvard
EJEMPLO DE UN SISTEMA MICROPROCESADO
ARQUITECTURA
INTERNA 2
CONCEPTO DE UN MICROPROCESADOR
Circuito integrado o chip formado por millones de transistores construidos sobre
una oblea de silicio.
decodificar coordinar y
y ejecutar controlar
La unidad central de procesamiento (CPU) tambin se denomina
microprocesador o simplemente el procesador. Es un circuito integrado
compuesto por millones de transistores.
Qu es?
CPU
Qu hace?
La controladora de
memoria (RAM)
Interface
Densidad de integracin
Alimentacin (voltaje)
CARACTERISTICAS DEL MICROPROCESADOR
Bus de datos
Representa el dato ms grande que es capaz de manejar el microprocesador
en una sola operacin.
Adems, el tamao de este bus determina el ancho de palabra de la
memoria principal.
Bus de direcciones
El tamao de este bus determina la cantidad mxima de memoria que
podemos direccionar.
Con 32 bits de ancho de bus podremos direccionar hasta 4 GB (232).
Actualmente casi todos los microprocesadores disponen de buses de
direccionamiento de 64 bits por lo que podran direccionar 16 exabytes.
CARACTERISTICAS DEL MICROPROCESADOR
MEMORIA CACH
DENSIDAD DE INTEGRACIN
ALIMENTACIN O VOLTAJE
21
SEGMENTACIN
Tiempo de ciclo
Tiempo de ciclo debe permitir que una instruccin pase por todas las
etapas en un ciclo.
Throughput
Rendimiento.
Nmero de instrucciones por unidad de tiempo.
1
=
22
SEGMENTACIN
EJERCICIO 1
Las 5 etapas del procesador tienen las siguientes latencias:
Cada etapa supone 20ps extra debido a los registros entre etapas en
procesadores segmentados.
Con un procesador no segmentado, calcular:
Cul es el tiempo de ciclo?
Cul es la latencia de cada instruccin?
Cul es el rendimiento?
23
SEGMENTACIN
EJERCICIO 2
Las 5 etapas del procesador tienen las siguientes latencias:
Cada etapa supone 20ps extra debido a los registros entre etapas en
procesadores segmentados.
Con un procesador segmentado, calcular:
Cul es el tiempo de ciclo?
Cul es la latencia de cada instruccin?
Cul es el rendimiento?
24
SEGMENTACIN
ETAPA 1 ETAPA 2 ETAPA 3 ETAPA
1 .
= =
SEGMENTACIN
EJERCICIO 3
= =
Ejemplo:
=
14
=
7
= 2
SEGMENTACIN
CICLO POR INSTRUCCIN CPI
EJERCICIO 5
A: =
= 10 2 250 = 5000
B: =
= 10 1.2 500 = 6000
SEGMENTACIN
CICLO POR INSTRUCCIN - CPI
A.
Ciclos CPU (1 programa) = (21) + (12) + (23) = 2+2+6 = 10 ciclos
Ciclos CPU (2 programa) = (41) + (12) + (13) = 4+2+3 = 9 ciclos
B.
CPI (1r programa) = 10/5 = 2
CPI (2 programa) = 9/6 = 1.5
RELANTIZACIN DE LA SEGMENTACIN
RELANTIZACIN DE LA SEGMENTACIN
RELANTIZACIN DE LA SEGMENTACIN
RELANTIZACIN DE LA SEGMENTACIN
RELANTIZACIN DE LA SEGMENTACIN
Dependencia de datos
RELANTIZACIN DE LA SEGMENTACIN
Dependencia de datos
RELANTIZACIN DE LA SEGMENTACIN
Dependencia de datos
RELANTIZACIN DE LA SEGMENTACIN
Dependencia de datos
RELANTIZACIN DE LA SEGMENTACIN
Dependencia de datos
MEMORIA
4
MEMORIA
MEMORIA
MEMORIA
MEMORIA
MEMORIA
Ta = Tiempo de acceso
Tc = Tiempo de ciclo de memoria
MEMORIA
MEMORIA
Tamao de la palabra
Unidad direccionable
Unidad de transferencia
TIPOS DE MEMORIA
ROM
PROM
MEMORIA
MEMORIA DE SOBRE TODO LECTURA
EPROM
EEPROM
MEMORIA FLASH
MEMORIA
Ejemplo 3:
Supngase una memoria RAM de 1024 palabras
16 bits/palabra construida empleando circuitos
integrados de memoria RAM de 128 palabras 8
bits/palabra. A fin de permitir el direccionamiento
de las palabras de la memoria, calcular:
a) El nmero de lneas del bus de direcciones
b) El nmero de lneas del bus de direcciones
comunes a todos los mdulos.
MEMORIA
Ejemplo 4:
Disear el mapa de memoria de un sistema basado
en microprocesador para el 8085 de INTEL
(A0..A15, D0..D7), suponiendo que se necesitan
8K8 de memoria ROM, 4K8 de memoria RAM.
Se disponen de circuitos integrados ROM de 2K8
y circuitos integrados RAM de 2K8 y que la
memoria est situada a partir de la direccin $0
empezando por la ROM y colocando a continuacin
la RAM
MICROPROCESADOR
8086
CARACTERSTICAS PRINCIPALES
ARQUITECTURA DEL 8086
PROGRAMACIN DEL 8086
PROGRAMACIN DEL 8086
REGISTRO DE DATOS O DE PROPSITO GENERAL
PROGRAMACIN DEL 8086
REGISTRO DE SEGMENTO
PROGRAMACIN DEL 8086
REGISTRO DE PILA
PROGRAMACIN DEL 8086
PUNTERO DE INTRUCCIONES O CONTADOR DEL PROGRAMA
PROGRAMACIN DEL 8086
REGISTROS NDICES
PROGRAMACIN DEL 8086
REGISTROS DE ESTADO O DE INDICADORES (FLAG)
Es un registro de 16 bits de los cuales 9 son utilizados para indicar
diversas situaciones durante la ejecucin de un programa.
DEFINICIN DE VARIABLES
PROGRAMACIN DEL 8086
DEFINICIN DE VARIABLES
PROGRAMACIN DEL 8086
FORMATO DE LAS INSTRUCCIONES
INSTRUCCIONES DE MOVIMIENTO DE DATOS
INSTRUCCIONES ARITMTICAS
INSTRUCCIONES ARITMTICAS
INSTRUCCIONES ARITMTICAS
INSTRUCCIONES ARITMTICAS
INSTRUCCIONES LGICAS
INSTRUCCIONES LGICAS
INSTRUCCIONES LGICAS
INSTRUCCIONES LGICAS
INSTRUCCIONES LGICAS
INSTRUCCIONES DE SALTO
INSTRUCCIONES DE SALTO
INSTRUCCIONES DE SALTO
UNIVERSIDAD TCNICA DEL NORTE
FACULTAD DE INGENIERIA EN CIENCIAS APLICADAS
CARRERA DE MECATRNICA
INTERRUPCIONES
INT 21h
INT 10h/00h INT 21h/35h
INT 21h/01h
INT 10h/01h INT 10h/1003h INT 21h/39h
INT 21h/02h
INT 10h/02h INT 11h INT 21h/3Ah
INT 21h/05h
INT 10h/03h INT 12h INT 21h/3Bh
INT 21h/06h
INT 10h/05h INT 13h/00h INT 21h/3Ch
INT 21h/07h
INT 10h/06h INT 13h/02h INT 21h/3Dh INT 33h/0000h
INT 21h/09h
INT 10h/07h INT 13h/03h INT 21h/3Eh INT 33h/0001h
INT 21h/0Ah
INT 10h/08h INT 15h/86h INT 21h/3Fh INT 33h/0002h
INT 21h/0Bh
INT 10h/09h INT 16h/00h INT 21h/40h INT 33h/0003h
INT 21h/0Ch
INT 10h/0Ah INT 16h/01h INT 21h/41h
INT 21h/0Eh
INT 10h/0Ch INT 19h INT 21h/42h
INT 21h/19h
INT 10h/0Dh INT 1Ah/00h INT 21h/47h
INT 21h/25h
INT 10h/0Eh INT 20h INT 21h/4Ch
INT 21h/2Ah
INT 10h/13h INT 21h/56h
INT 21h/2Ch
when bit 5 of CH is set to 0, the cursor is visible. when bit 5 is 1, the cursor is not visible.
mov dh, 10
mov dl, 20
mov bh, 0
mov ah, 2
int 10h
input:
BH = page number.
return:
AH = attribute.
AL = character.
input:
AL = character to display.
BH = page number.
BL = attribute.
CX = number of times to write character.
input:
AL = character to display.
BH = page number.
CX = number of times to write character.
input:
AL = pixel color
CX = column.
DX = row.
example:
input:
CX = column.
DX = row.
output:
AL = pixel color
input:
AL = character to write.
this functions displays a character on the screen, advancing the cursor and scrolling the screen as necessary. the
printing is always done to current active page.
example:
input:
AL = write mode:
bit 0: update cursor after writing;
bit 1: string contains attributes.
BH = page number.
BL = attribute if string contains only characters (bit 1 of AL is zero).
CX = number of characters in string (attributes are not counted).
DL,DH = column, row at which to start writing.
ES:BP points to string to be printed.
example:
mov al, 1
mov bh, 0
mov bl, 0011_1011b
mov cx, msg1end - offset msg1 ; calculate message size.
mov dl, 10
mov dh, 7
push cs
pop es
mov bp, offset msg1
mov ah, 13h
int 10h
jmp msg1end
msg1 db " hello, world! "
msg1end:
input:
BL = write mode:
0: enable intensive colors.
1: enable blinking (not supported by the emulator and windows command prompt).
BH = 0 (to avoid problems on some adapters).
example:
0 0000 black
1 0001 blue
2 0010 green
3 0011 cyan
4 0100 red
5 0101 magenta
6 0110 brown
7 0111 light gray
8 1000 dark gray
9 1001 light blue
A 1010 light green
B 1011 light cyan
C 1100 light red
D 1101 light magenta
E 1110 yellow
F 1111 white
note:
; use this code for compatibility with dos/cmd prompt full screen mode:
mov ax, 1003h
mov bx, 0 ; disable blinking.
int 10h
Currently this function can be used to determine the number of installed number of floppy disk drives.
Note:
the resolution of the wait period is 977 microseconds on many systems (1 million microseconds - 1 second).
Windows XP does not support this interrupt (always sets CF=1).
If no drive letter is specified and current directory is not set, then C:\emu8086\MyBuild\ path is used by default.
FLOPPY_0,1,2,3 files are emulated independently from DOS file system.
For the emulator physical drive A: is this file c:\emu8086\FLOPPY_0 (for BIOS interrupts: INT 13h and boot).
For DOS interrupts (INT 21h) drive A: is emulated in this subdirectory: C:\emu8086\vdrive\a\
Note: DOS file system limits the file and directory names to 8 characters, extension is limited to 3 characters;
example of a valid file name: myfile.txt (file name = 6 chars, extension - 3 chars). extension is written after the dot,
no other dots are allowed.
INT 21h / AH=1 - read character from standard input, with echo, result is stored in AL.
if there is no character in the keyboard buffer, the function waits until any key is pressed.
example:
mov ah, 1
int 21h
example:
mov ah, 2
mov dl, 'a'
int 21h
example:
mov ah, 5
mov dl, 'a'
int 21h
example:
mov ah, 6
mov dl, 'a'
int 21h ; output character.
mov ah, 6
mov dl, 255
int 21h ; get character from keyboard buffer (if any) or set ZF=1.
example:
mov ah, 7
int 21h
INT 21h / AH=9 - output of a string at DS:DX. String must be terminated by '$'.
example:
org 100h
mov dx, offset msg
mov ah, 9
int 21h
ret
msg db "hello world $"
INT 21h / AH=0Ah - input of a string to DS:DX, fist byte is buffer size, second byte is number of chars actually read.
this function does not add '$' in the end of string. to print using INT 21h / AH=9 you must set dollar character at the
end of it and start printing from address DS:DX + 2.
example:
org 100h
mov dx, offset buffer
mov ah, 0ah
int 21h
jmp print
buffer db 10,?, 10 dup(' ')
print:
xor bx, bx
mov bl, buffer[1]
mov buffer[bx+2], '$'
mov dx, offset buffer + 2
mov ah, 9
int 21h
ret
the function does not allow to enter more characters than the specified buffer size.
see also int21.asm in c:\emu8086\examples
INT 21h / AH=0Ch - flush keyboard buffer and read standard input.
entry: AL = number of input function to execute after flushing buffer (can be 01h,06h,07h,08h, or 0Ah - for other
values the buffer is flushed but no input is attempted); other registers as appropriate for the selected input function.
org 100h
mov dx, offset filepath
mov ah, 39h
int 21h
ret
Entry: DS:DX -> ASCIZ pathname to become current directory (max 64 bytes).
Return:
entry:
CX = file attributes:
returns:
example:
org 100h
mov ah, 3ch
mov cx, 0
mov dx, offset filename
mov ah, 3ch
int 21h
jc err
mov handle, ax
jmp k
filename db "myfile.txt", 0
handle dw ?
err:
; ....
k:
ret
Entry:
Return:
example:
org 100h
mov al, 2
mov dx, offset filename
mov ah, 3dh
int 21h
jc err
mov handle, ax
jmp k
filename db "myfile.txt", 0
handle dw ?
err:
; ....
k:
ret
Return:
Entry:
BX = file handle.
CX = number of bytes to read.
DS:DX -> buffer for data.
Return:
CF is clear if successful - AX = number of bytes actually read; 0 if at EOF (end of file) before call.
CF is set on error AX = error code.
Note: data is read beginning at current file position, and the file position is updated after a successful read the
returned AX may be smaller than the request in CX if a partial read occurred.
entry:
BX = file handle.
CX = number of bytes to write.
DS:DX -> data to write.
return:
note: if CX is zero, no data is written, and the file is truncated or extended to the current position data is written
beginning at the current file position, and the file position is updated after a successful write the usual cause for AX <
CX on return is a full disk.
Entry:
return:
Note: DOS does not erase the file's data; it merely becomes inaccessible because the FAT chain for the file is
cleared deleting a file which is currently open may lead to filesystem corruption.
INT 21h / AH= 42h - SEEK - set current file position.
Entry:
Return:
CF clear if successful, DX:AX = new file position in bytes from start of file.
CF set on error, AX = error code.
Notes:
for origins 1 and 2, the pointer may be positioned before the start of the file; no error is returned in that case, but
subsequent attempts to read or write the file will produce errors. If the new position is beyond the current end of file,
the file will be extended by the next write (see AH=40h).
example:
org 100h
mov ah, 3ch
mov cx, 0
mov dx, offset filename
mov ah, 3ch
int 21h ; create file...
mov handle, ax
mov al, 0
mov bx, handle
mov cx, 0
mov dx, 7
mov ah, 42h
int 21h ; seek...
filename db "myfile.txt", 0
handle dw ?
data db " hello files! "
data_size=$-offset data
buffer db 4 dup(' ')
INT 21h / AH= 47h - get current directory.
Entry:
Return:
Notes:
the returned path does not include a drive and the initial backslash.
INT 21h / AH=4Ch - return control to the operating system (stop program).
Entry:
Return:
CF clear if successful.
CF set on error, AX = error code.
Note: allows move between directories on same logical drive only; open files should not be renamed!
INT 33h / AX=0000 - mouse ininialization. any previous mouse pointer is hidden.
returns:
if successful: AX=0FFFFh and BX=number of mouse buttons.
if failed: AX=0
example:
mov ax, 0
int 33h
see also: mouse.asm in examples.
example:
mov ax, 1
int 33h
example:
mov ax, 2
int 33h
INT 33h / AX=0003 - get mouse position and status of its buttons.
returns:
if left button is down: BX=1
if right button is down: BX=2
if both buttons are down: BX=3
CX = x
DX = y
example:
mov ax, 3
int 33h
Los microprocesadores de la familia 8086, posee instrucciones diseadas para un rpido procesamiento de los string,
cuando se habla de string, se refiere a una secuencia de elementos uno despus del otro, estos elementos pueden
ser de bytes, words y para el caso de 80386 y superiores, doble word, la diferencia de estas instrucciones en particular
con respecto a las dems instrucciones estndar de Assembler, es que, con la suma de un prefijo se puede realizar
un determinado procesamiento a un conjunto de posiciones de memoria.
Instrucciones:
MOVS
El MOVS copia una string fuente a un string destino, esta funcin puede ser usada en conjunto con el prefijo REP. En
el ejemplo copiamos el contenido de un vector de 10 elementos a otro vector de posee tambin 10 elementos. name
"movs"
.model tiny
.stack 100h
.data
fuente db 1 DUP('0123456789')
destino db 10 DUP(?)
.code
cld
mov cx,10 ; cargar la longitud de la cadena en CX
mov si,offset fuente ; Cargar direccin fuente a SI
mov di,offset destino ; Cargar direccin destino a DI (al utilizar
rep movsb ; copiar 10 bytes
ret
Sin prefijo: cuando deseamos cargar una cadena en la cual cada elemento necesita un procesamiento
individual, entonces podemos con un simple STOS guardar los elementos de a uno, con la ventaja que nos
provee de la funcin de incremento o decremento de la direccin destino evitando ser implementada por
nosotros.
Con prefijo: nos sirve para realizar un llenado de una cadena. Ingresamos el dato con que vamos a llenar
la cadena en AL o AX y luego mediante un prefijo REP realizamos CX loops.
En el ejemplo siguiente dada una cadena de 11 elementos, llenar con asteriscos mediante una STOS con prefijo
REP
.model tiny
.stack 100h
.data
destino db 11 DUP(?)
.code
cld ; trabajar en forma ascendente
mov cx,11 ; cargar long. de la cadena en CX
mov di,offset destino ; cargar direccin destino en DI
mov al,'*' ; byte a llenar el vector destino
rep stosb ; lleno con '*' la cadena
ret
Carga desde una cadena un elemento a el acumulador AL o AX segn la longitud del elemento. Esta instruccin
no se usa con prefijos puesto que no tendra sentido ya que cada vez que carga un valor al acumulador borra el
anterior. LODS se utiliza cuando queremos procesar cada elemento de la cadena, entonces creamos un bucle
mediante una instruccin LOOP y dentro de este utilizamos la instruccin LODS.
En el ejemplo, utilizamos esta funcin en conjunto con STOSB para transformar una cadena de nmero a su
correspondiente cdigo ASCII.
.model tiny
.stack 100h
.data
fuente db 0,1,2,3,4,5,6,7,8,9
destino db 10 DUP(?)
longitud equ 10
.code
cld ; trabajar en forma ascendente
mov cx,longitud ; cargar la longitud de la cadena en CX
mov si,offset fuente ; cargar fuente para inst LODSB
mov di,offset destino ; cargar destino para inst STOSB
loop1:
lodsb
add al,'0'
stosb
loop loop1
ret
Compara dos cadenas, realiza una resta de cada elemento sin modificar ninguno de sus valores pero si actualizando
los flags, esta instruccin se puede utilizar en conjunto con el prefijo REPNZ o REPZ.
Utilizando REPNZ o REPNE: Compara mientras no sean iguales, saliendo del bucle cuando dos elementos
lo sean y dejando el flag de cero en 1, en caso de no encontrar elementos iguales, llegar a CX = 0, y
retornar el flag de cero en 0,
Utilizando REPZ o REPE: Compara mientras sean iguales, saliendo del bucle cuando encuentre dos
elementos que no lo sean y dejando el flag de cero en 0, en caso de no encontrar elementos distintos llegara
a CX = 0, y retornar el flag de cero en 1.
Luego de realizado el bucle de comparacin mediante un salto condicional como el JZ o JNZ se elige que hacer.
En el ejemplo se realiza la comparacin de dos cadenas para determinar si son iguales o no, para esto, luego de
comparar se verifica el estado de la bandera de cero.
.model tiny
.stack 100h
.data
.code
mov cx,longitud ; cargar la longitud de la cadena en CX
cld ; trabajar en forma ascendente
mov si,offset cadena1 ; Cargar direccin fuente a SI
mov di,offset cadena2 ; Cargar direccin destino a DI
repe
cmpsb
je igual ; en caso que sean distintas ;
mov ah,0d
jmp final
final:
ret
Compara el valor de un elemento de la cadena con el acumulador. La forma en que se usa es similar al CMPS, se
utilizara tambin en conjunto con los prefijos REPNE y REPE.
Prefijo REPNE o REPNZ: Sale del bucle y retorna el flag cero en 1 cuando encuentra un valor que coincide
con el acumulador en caso de no encontrar algn elemento igual que el acumulador llega a CX = 0
retornando el flag cero en 0.
Prefijo REPE o REPZ: Sale del bucle y retorna el flag cero en 0 cuando encuentra un valor que no coincide
con el acumulador en caso de no encontrar algn elemento distinto que el acumulador llega a CX = 0
retornando el flag cero en 1.
.model tiny
.stack 100h
.data
cadena db "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
longitud EQU 26
.code
cld ; trabajar en forma ascendente
mov cx,longitud ; cargar la long.de la cadena en CX
mov di,OFFSET cadena ; cargar direccion de cadena en DI
mov al,'F' ; caracter a buscar
repne
jne noencontrado
mov ax,longitud
sub ax,cx ; calcular la posicion
noencontrado:
ret