Ensamblador 2013(1)
-
Upload
mar-soy-yo -
Category
Documents
-
view
32 -
download
0
Transcript of Ensamblador 2013(1)
1
Ensamblador
2
2013
Horario de Laboratorio:
L M M J V
X 12h-14h
X 19,30h-21h
3
Curso 2011-2012 BIBLIOGRAFIA
•El universo digital del IBM PC AT y PS2 (Capítulos 5 y 6-Ensamblador) atc.ugr.es/docencia/udigital Lenguaje Ensamblador de los 80x86. Jon Beltrán de Heredia ANAYA Los microprocesadores xx86 y la arquitectura del PC (Apéndice A) Antonio Garcia Guerra Publicaciones de la E.T.S.I.T.M.
Esquema de bloques del μP 8086/8088
μP 8086
(8088)
00000H
00001H
00002H
00003H
00004H
00005H
00006H
00007H
FFFEDH
FFFEEH
FFFEFH
FFFF0H
FFFF1H
FFFF2H
FFFF3H
FFFF4H
FFFF5H
FFFF6H
FFFF7H
FFFF8H
FFFF9H
FFFFAH
FFFFBH
FFFFCH
FFFFDH
FFFFEH
FFFFFH
· ·
1 MB
MEMORIA CENTRAL
A BUS
20 bits
D BUS 8 bits (8088 16 bits (8086)
· · ·
5
Esquema de bloques del μP 8086/8088
SP BP
AL AH
SI DI
REGISTROS TEMPORALES
CS
REGISTROS INTERNOS
INACCESIBLES
POR EL USUARIO
SUMADOR
INDICADORES (FLAGS) 1 2 3 4 5 6
CONTROL
DE LA EU
AX BX
DX CX
BL BH CL CH DL DH
ALU
DS SS ES IP
BUS DE DATOS (16 BITS)
UNIDAD DE
EJECUCION
(EU) BUS DE DIRECCIONES
(20 BITS)
BUS DE DATOS DE LA ALU (16 BITS)
UNIDAD DE
INTERFAZ
CON EL BUS
(BIU)
COLA DE INSTRUCCIONES
CONTROL
DEL BUS
2.7 SEGMENTACIÓN
• Dirección efectiva = Segmentox16 + Offset
00000
FFFFF
Segmento = 7F3C Offset = 4BE3
7F3C0
4BE3
83FA3 64Kb
Dirección accedida = 7F3C0 + 4BE3 = 83FA3
PERIFERICOS E INTERFACES 6
2.8 REGISTROS DEL 8086
Registros Generales:
AH AX ACUMULADOR
BH BL
AL
BX BASE
CX CONTADOR
DX DATOS
CH
DH DL
CL
ADD AH,5FH; AH+5FHAH
MOV AH,[BX+6]
REP (Repite CX veces)
MOV AL,DH
PERIFERICOS E INTERFACES 7
Registros de Segmento:
CS SEGMENTO DE CODIGO
SEGMENTO DE PILA
SEGMENTO DE DATOS
SEGMENTO EXTRA
CS:IP INSTRUCCIÓN
PILA SS: SP
MOV AH,[1000H] ; DS:1000H AH
SS
DS
ES
PERIFERICOS E INTERFACES 8
2.8 REGISTROS DEL 8086
Otros registros:
SP
REGISTRO DE BASE
PUNTERO DE PILA
INDICE FUENTE
INDICE DESTINO
CS:IP INSTRUCCIÓN
PILA SS: SP
MOVSB DS:SI ES:DI
BP
SI
DI
IP PUNTERO DE INSTRUCCION
PERIFERICOS E INTERFACES 9
2.8 REGISTROS DEL 8086
Registro de flags:
IF TF OF DF AF SF ZF CF PF
Acarreo
Paridad
Acarreo auxiliar
Zero
Signo
Trap (Paso a paso)
Máscara de interrupciones
Flag de dirección
Flag de overflow
PERIFERICOS E INTERFACES 10
2.8 REGISTROS DEL 8086
Registro de flags; Flag de acarreo
IF TF OF DF AF SF ZF CF PF
Acarreo
Acarreo en sumas
Borrow (Acarreo negativo) en restas y comparaciones
Después de una suma si CF = 1 significa desbordamiento
solo en caso de enteros sin signo
Después de una resta si FC = 1 significa A<B solo si se
trata de enteros sin signo.
En Shifts y rotaciones el bit que “sale” del registro en
cuestión se conserva en este flag
PERIFERICOS E INTERFACES 11
2.8 REGISTROS DEL 8086
Registro de flags; Flag de paridad
IF TF OF DF AF SF ZF CF PF
Paridad
•Se activa (Se pone a “1”) si el resultado de una
operación de suma, resta o de una operación lógica tiene
paridad par (Número par de unos)
PERIFERICOS E INTERFACES 12
2.8 REGISTROS DEL 8086
Registro de flags; Flag de acarreo auxiliar
IF TF OF DF AF SF ZF CF PF
Acarreo auxiliar
•Indica el acarreo del 4º al 5º bit en una operación de
suma o resta.
Es útil si los operandos son cifras BCD
PERIFERICOS E INTERFACES 13
2.8 REGISTROS DEL 8086
Registro de flags; Flag de cero
IF TF OF DF AF SF ZF CF PF
Flag de cero
•Se activa (Se pone a “1”) si el resultado de la última
operación aritmética o lógica ha sido cero
PERIFERICOS E INTERFACES 14
2.8 REGISTROS DEL 8086
Registro de flags; Flag de signo
IF TF OF DF AF SF ZF CF PF
Flag de signo
•Es una copia del bit mas significativo del resultado de la
última operación aritmética o lógica efectuada
PERIFERICOS E INTERFACES 15
2.8 REGISTROS DEL 8086
Registro de flags; Flag Trap (Trampa)
IF TF OF DF AF SF ZF CF PF
Flag de trap
•Si el flag T está activado (=1) el programa efectúa una
única instrucción.
Se utiliza en ejecución paso a paso y a partir del 80386
en los puntos de ruptura introducidos por el depurador.
PERIFERICOS E INTERFACES 16
2.8 REGISTROS DEL 8086
Registro de flags; Máscara de interrupciones
IF TF OF DF AF SF ZF CF PF
Máscara de
interrupciones
•IF = 1 (Su estado habitual) Interrupciones habilitadas
IF = 0 Interrupciones deshabilitadas
Es el único flag que está a “1” por defecto
PERIFERICOS E INTERFACES 17
2.8 REGISTROS DEL 8086
Registro de flags; Flag de dirección
IF TF OF DF AF SF ZF CF PF
Flag de dirección
•
En las instrucciones de Ensamblador de manejo de cadenas :
MOVSB/MOVSW
CMPSB/CMPSW
LODSB/LODSW
STOSB/STOSW
Se efectúa en unos casos una lectura en memoria en la
posición indicada por el par de registros DS:SI y en otros una escritura
en la posición ES:DI.
Finalizada la lectura o la escritura se incrementa o se
decrementa el/los punteros SI o/y DI que hayan intervenido en la
instreucción según que el flag de dirección esté a “0” o a “1”
PERIFERICOS E INTERFACES 18
2.8 REGISTROS DEL 8086
Registro de flags; Flag de dirección
IF TF OF DF AF SF ZF CF PF
Flag de dirección
•Incrementa (Si DF = 0) o decrementa (Si DF = 1) los índices DI
y/o SI después de ejecutar alguna de las instrucciones de manipulación de
cadenas.
.Ejemplo:
DF = 1
Se ejecuta CMPSB (Comparar string de bytes)
El μP calcula DS:SI – ES:DI Flags
Luego SI – 1 SI
DI – 1 DI
Si el DF Hubiera estado a “0” Los registros SI y DI se hubieran
incrementado
2.8 REGISTROS DEL 8086
PERIFERICOS E INTERFACES 19
Registro de flags; Flag de Overflow
IF TF OF DF AF SF ZF CF PF
Flag de Overflow
•Se activa (Se pone a “1”) si en una operación de suma o resta de
enteros con signo se produce desbordamiento.
Una forma práctica y sencilla de obtener el valor de este flag es
observar los signos de los operandos y del resultado. Si los operandos
tienen el mismo signo y el resultado signo diferente es que se ha
producido desbordamiento.
2.8 REGISTROS DEL 8086
PERIFERICOS E INTERFACES 20
Registro de flags; Flag de Overflow
IF TF OF DF AF SF ZF CF PF
Flag de Overflow
•Ejemplo:
AH = 7C = 01111100 BL = A4 = 10100100
Obtener SUB AH,BL ( AH – BL AH )
El μP sumará AH con el Cmp a 2 de BL:
01111100
01011100
11011000
El flag de Overflow se pondrá a “1” indicando que en el
supuesto caso de que los operandos sean enteros con signo, se ha
producido desbordamiento.
Si los operandos son enteros sin signo este flag no indica nada
2.8 REGISTROS DEL 8086
PERIFERICOS E INTERFACES 21
Registro de flags; Ejemplo 1
IF TF OF DF AF SF ZF CF PF
•AH = D2H = 11010010 BH = B4H = 10110100
Obtener ADD AH,BH ( AH + BH AH )
El μP sumará AH con BH:
11010010
10110100
110000110
Fc = 1 Fo = 0 Fs = 1 Fp = 0 Fz = 0
2.8 REGISTROS DEL 8086
PERIFERICOS E INTERFACES 22
Registro de flags; Ejemplo 2
IF TF OF DF AF SF ZF CF PF
•AL = C4H = 11000100 AH = 5BH = 01011011
Obtener SUB AL,AH ( AL - AH AL )
El μP sumará AL con el Ca2 de AH:
11000100
10100101
101101001
Fc = 0 Fo = 1 Fs = 0 Fp = 1 Fz = 0
¡OJO!
PERIFERICOS E INTERFACES 23
2.8 REGISTROS DEL 8086
24
SP BP
AL AH
SI DI
AX BX
DX CX
BL BH CL CH DL DH
Registros generales
Esquema de bloques del μP 8086/8088
25
CS
SUMADOR
DS SS ES IP
Registros de segmento
Bus de direcciones (20 bits)
Bus de datos (16 bits) Segmento (16 bits)
Esquema de bloques del μP 8086/8088
26
Etiquetas
• Conjunto de letras, dígitos y caracteres
especiales con un máximo de 31.
– Letras TODAS
– Dígitos No pueden aparecer en primer
lugar
– C. Especiales @, ¿, $, . (Si se emplea “.”
deberá ser el primero)
– No se puede emplear como etiqueta los
nombres de instrucciones o de registro.
27
– Una etiqueta representa:
• Un dato
• Una dirección
• El contenido de una dirección de memoria
La diferencia estriba en la forma de definir la
etiqueta
Etiquetas
28
– Tipos de etiquetas de dirección:
ETIQUETAS NEAR
Representa a una dirección dentro del propio
segmento (16 bits solamente). Acaba en “:”
ETIQUETAS FAR
Representa a una dirección fuera del segmento
(32 bits)
Etiquetas
29
Sintaxis de una línea ensamblador
Etiqueta--Código de operación Instrucción--Operandos--;Comentario
Ejemplos:
BUCLE: MOV AH,6FH ; Copia el valor 6FH en el registro AH
INC BX ; Incrementa el contenido del registro BX
JMP BUCLE ; Salta a BUCLE
30
DIRECTIVAS
– Son instrucciones al programa Ensamblador
– Influyen en el proceso de ensamblado del
programa.
– No generan código
– No influyen en el tamaño del programa
31
DIRECTIVAS
EQU
Sintaxis:
Etiqueta EQU VALOR
Permite definir etiquetas
Ejemplo:
DATO3 EQU 5C2FH
32
DIRECTIVAS DE DEFINICION DE DATOS
DB (Define Bytes)
Permite definir bytes y cargarlos en
memoria (Para usarlos posteriormente)
Sintaxis:
Etiqueta DB Byte1, Byte2, Byte3,…
33
BD (Define Bytes)
Ejemplo: TABLA DB 54,6FH,87,0
El programa Ensamblador generará:
54
6F
87
00
Dirección 1
TABLA = [Dirección 1]
Tabla = Contenido de Dirección 1
DIRECTIVAS DE DEFINICION DE DATOS
34
BD (Define Bytes)
Ejemplo: TABLA DB 54,6FH,87,0
El programa Ensamblador generará:
54
6F
87
00
Dirección 1
TABLA = [Dirección 1]
Tabla = Contenido de Dirección 1
DIRECTIVAS DE DEFINICION DE DATOS
35
• DB
• También se pueden definir cadenas de
caracteres en código ASCII
– Ejemplo:
• Tabla DB 10,13,”Aquí el mensaje”,10,13
Se generarán 19 bytes. Los que aparecen
entrecomillados generan el código ASCII de sus
respectivos caracteres.
DIRECTIVAS DE DEFINICION DE DATOS
36
• DB
• También se pueden definir conjuntos de bytes vacíos o repetidos con DUP.
– Ejemplo: • Tabla DB 10 DUP (0)
Generará una tabla con 10 bytes consecutivos conteniendo el 00
Tabla2 DB 10 DUP (“PILA”)
Genera 40 bytes con los códigos ASCII de PILA repetidos 10 veces
DIRECTIVAS DE DEFINICION DE DATOS
37
• DW
– Define Words (2 bytes)
– Ejemplo:
• Tabla 3 DW 457FH,65A9H,2000,1001100110101B
– Se generará: 7F
45
A9
65
D0
07
35
13
DIRECTIVAS DE DEFINICION DE DATOS
38
Representación de números
Binarios : 101111….1100B
Decimales: 2378D = 2378
Octales: 57O
Hexadecimales: 46H
7FH
0D4H
39
Directivas de definición de procedimientos
• Etqueta PROC
aquí el procedimiento
• Etiqueta ENDP
– Ejemplo:
Calculo PROC
------
------
Calculo ENDP
40
Directivas de definición de segmentos
.model
Permite definir un modelo de programa:
.model TINY
El programa dispondrá de un único segmento para datos y programa. Se obtendrá un programa .COM
.model small
Se generan dos segmentos; Uno para datos y otro para el programa.
41
.DATA Define el principio del segmento de datos
.STACK n Define el principio (y el tamaño)del
segmento de pila
Directivas de definición de segmentos
42
.code Define el principio del segmento de
código
El programa finaliza con:
END Etiqueta de inicio
Directivas de definición de segmentos
43
Ejemplo de programa .EXE
.model small
.data aquí los datos
.stack 100
.code INICIO: MOV AX, @DATA
MOV DS,AX
aquí el resto del programa
MOV AH, 4CH Finaliza el programa y devuelve
INT 21H el control al Sistema Operativo
End inicio
44
DIRECCIONAMIENTOS
Distintas maneras en las que puede
aparecer un dato en una instrucción:
• Direccionamiento inmediato
• Direccionamiento directo
• Direccionamiento indirecto
45
Direccionamiento inmediato:
El dato aparece en la propia instrucción:
MOV AH, 5FH ; 5FH
MOV BX, 789AH; 789AH
AH
BX
DIRECCIONAMIENTOS
46
DIRECCIONAMIENTOS
Direccionamiento directo:
Aparece el sitio donde se encuentra la instrucción:
Direccionamiento directo por registro:
El dato se encuentra en un registro
Direccionamiento directo por valor: El dato se encuentra en memoria
47
Direccionamiento directo por registro:
Se hace constar un registro que
contiene al dato:
MOV AH, BL
MOV DS, AX
AH BL
DS AX
DIRECCIONAMIENTOS
48
Direccionamiento directo por valor:
Se hace constar una direccion de
memoria que contiene al dato:
MOV AH, AH BL
DS AX
Direccionamiento directo por valor:
Se hace constar una direccion de
memoria que contiene al dato:
MOV AH,[18C4H]
18C4H
AH
DIRECCIONAMIENTOS
49
Direccionamiento indirecto:
1) El dato está siempre en memoria
2) Se hace constar un registro en cuyo interior se encuentra la dirección de memoria donde se encuentra el dato:
-Registro de base (BX o BP)
-Registro de índice (SI o DI) + desplazamiento
-Uno de base + uno de índice + desp
-el desplazamiento es optativo
DIRECCIONAMIENTOS
50
Direccionamiento indirecto:
Por registro de base:
MOV AH,[BX] DS:BX AH
MOV AH,[BP] SS:BP AH
DIRECCIONAMIENTOS
51
Direccionamiento indirecto:
Por registro de Indice:
MOV AH,[DI] DS:DI AH
MOV AH,[SI] DS:SI AH
MOV AH,[DI+desp] DS:DI+desp AH
MOV AH,[SI+desp] DS:SI+desp AH
desp = Entero con signo de 8 o 16 bits
DIRECCIONAMIENTOS
52
Direccionamiento indirecto:
Por registro de base +Indice:
MOV AH,[BX+DI] = MOV AH;[BX][DI]
DS:BX+DI AH
MOV AH,[BP+SI] = MOV AH,[BP][S]I
SS:BP+SI AH
MOV AH,[BX+DI+desp]
DS:BX+DI+desp AH
DIRECCIONAMIENTOS
53
• Instrucciones de carga de registros y direcciones
– MOV destino, origen Mover
– XCHG destino, origen Intercambia
– XLAT Traduce
– LEA destino, origen Carga dirección efectiva
– LDS destino, origen Carga un puntero
– LES destino, origen Carga un puntero
– LAHF Carga AH con ½ registro de flags
– SAHF Copia AH en ½ registro flags
INSTRUCCIONES
54
• Instrucciones de carga de registros y
direcciones
– MOV destino, origen Mover
origen destino
Origen y destino deben ser del mismo tamaño
admite todas las expresiones de origen y destino
menos:
MOV [direcciópn1],[dirección2]
MOV registro de segmento, valor inmediato
INSTRUCCIONES
55
• Instrucciones de carga de registros y
direcciones
– MOV destino, origen Mover
Ejemplos:
MOV AH, [7000H]
DS:[7000H]AH
MOV [8600H], 78C4H
78C4H C4H 8600H
78H 8601H
INSTRUCCIONES
56
• Instrucciones de carga de registros y
direcciones
– XCHG destino, origen Intercambiar
destino origen
intercambia los contenidos de destino y de origen
INSTRUCCIONES
57
• Instrucciones de carga de registros y
direcciones
– XLAT Traduce
[BX+AL]AL
Es muy útil para tratar con tablas
INSTRUCCIONES
58
• Instrucciones de carga de registros y
direcciones
– LEA destino, origen Load efective address
carga el offset del destino indicado en el origen
Tabla DB 56h, 6ch, ….
LEA AX, Tabla Offset TABLA AX
INSTRUCCIONES
59
INSTRUCCIONES
• Instrucciones de carga de registros y
direcciones
– LDS destino, origen Carga un puntero de 32
bits en DS:destino.
• P. Ejemplo:
DIR4 EQU 12345678H
LDS AX, DIR4 12345678H DS:AX
60
• Instrucciones de carga de registros y
direcciones
– LES destino, origen Carga un puntero de 32
bits en ES:destino.
P. Ejemplo:
DIR4 EQU 3A4C789BH
LES CX, DIR4 ES 3A4CH
CX 789BH
INSTRUCCIONES
61
• Instrucciones de carga de registros y
direcciones
– LAHF
Copia la mitad menos significativa del registro
de Flags en AH.
S Z A P C AH
INSTRUCCIONES
62
• Instrucciones de carga de registros y
direcciones
– SAHF Copia AH en los indicadores
S Z A P C AH
INSTRUCCIONES
63
• Instrucciones de manipulación de flags:
PONER A “1” SET
STC ACTIVA EL FLAG C Fc 1
STI ACTIVA EL FLAG i Fi 1
STD ACTIVA EL FLAG D Fd 1
Fc = Acarreo
Fi = Máscara de interrupciones
Fd = Flag de Dirección
INSTRUCCIONES
64
• Instrucciones de manipulación de flags:
PONER A “0” CLEAR
CLC BORRA EL FLAG C Fc 0
CLI BORRA EL FLAG i Fi 0
CLD BORRA EL FLAG D Fd 0
COMPLEMENTAR (INVERTIR)
CMC COMPLEMENTA EL FLAG C
Fc Fc
INSTRUCCIONES
65
• Instrucciones de manejo de la pila:
POP destino (Extraer de la pila)
Ejemplo : POP AX
AX
1) [SP] AL
2) SP +1 SP
3) [SP] AH
4) SP +1 SP
1
3
SP (inicial)
SP (final)
INSTRUCCIONES
66
• Instrucciones de manejo de la pila:
PUSH origen (Introduce en la pila)
Ejemplo : PUSH BX
SP (inicial)
BX
1) SP-1 SP
2) BH [SP]
3) SP-1 SP
4) BL [SP]
SP (final)
2
4
INSTRUCCIONES
67
• Instrucciones de manejo de la pila:
POPF (Extrae de la pila y carga el registro
de flags)
Flags
[SP] FL
SP +1 SP
[SP] FH
SP +1 SP
1
3
SP (inicial)
SP (final)
FH Parte mas significativa del registro de Flags
FL Parte menos significativa del registro de Flags
INSTRUCCIONES
68
• Instrucciones de manejo de la pila:
PUSHF (Salva en la pila el contenido del
registro de flags)
SP (inicial)
Flags
1) SP-1 SP
2) FH [SP]
3) SP-1 SP
4) FL [SP]
SP (final)
2
4
INSTRUCCIONES
69
Instrucciones de transferencia de control
• CALL (Llamada a subrutina) Sintaxis: CALL dirección
1) Guarda en la pila la dirección de retorno. (La dirección de la siguiente instrucción)
2) Concede el control a la subrutina que se encuentra en la dirección indicada (Salta).
• RET Sintaxis: RET
Salta a la dirección contenida en la pila. Debe ser la última instrucción de una subrutina
70
• JMP (Salto a “dirección”) Sintaxis: JMP dirección
Salta, simplemente, a la dirección indicada
Instrucciones de transferencia de control
71
Instrucciones de salto condicional
Se efectúa el salto si se cumple la
condición (Estado de uno o varios flags)
a) Estado de un flag
b) Estado de varios flags
El criterio es comparar la magnitud de dos datos ( con o sin
signo)
Son saltos cortos (+ 127 -128) posiciones en
código máquina
72
Ensamblado de una instrucción
de salto condicional.
JC dirección
desplazamiento = Entero con signo de 8 bits
CO
desplazamiento
Instrucciones de salto condicional
73
a) Estado de un flag
JC dirección JNC dirección
JS dirección JNS dirección
JO dirección JNOdirección
JZ dirección JNZ dirección
JP dirección JNP dirección
Salta si el flag = 1 Salta si el flag = 0
Instrucciones de salto condicional
74
b) Estado de varios flags
Debe efectuarse previamente una
instrucción de CMP A,B.
a1) A y B son enteros sin signo
JA dirección (Salta si A>B)
JB dirección (Salta si A<B)
JE dirección (Salta si A=B)
Instrucciones de salto condicional
75
a1) A y B son enteros sin signo
JA = JNBE (Salta si A no es menor
o igual que B)
JB = JNAE (Salta si A no es mayor
o igual que B)
JNA = JBE
JNB = JAE
Instrucciones de salto condicional
76
a2) A y B son enteros con signo
JG = JNLE (Salta si A no es menor
o igual que B)
JL = JNGE (Salta si A no es mayor
o igual que B)
JNG = JLE
JNL = JGE
Instrucciones de salto condicional
77
a1) A = Above (Mayor)
B = Bellow (Menor)
E = Equal (Igual)
a2) G = Greater
L = Less
Instrucciones de salto condicional
78
Instrucciones de control de bucle
LOOP
Sintaxis: LOOP dirección
1 Decrementa CX
2 Salta a “dirección” si CX ≠ 0
Ejemplo: MOV CX, 10
BUCLE: ……………….
LOOP BUCLE
79
LOOPE
Sintaxis LOOPE dirección
1 Decrementa CX
2 salta a “dirección” si CX ≠ 0 y Fz = 1
Ejemplo: MOV CX, 10
BUCLE: ……………….
LOOPE BUCLE
Instrucciones de control de bucle
80
LOOPNE = LOOPNZ
Sintaxis LOOPNE dirección
1 Decrementa CX
2 salta a “dirección” si CX ≠ 0 y Fz = 0
Ejemplo: MOV CX, 10
BUCLE: ……………….
LOOPNE BUCLE
Instrucciones de control de bucle
81
Interrupciones
INT vector
Vector = entero sin signo de 8 bits
Salta a una subrutina caracterizada por el vector y
Por la función (Contenido de AH).
Ejemplo INT 21 H función 9
Saca una cadena de caracteres por
pantalla.
La cadena comienza en DS: DX y finaliza
con el símbolo “$”
82
INSTRUCCIONES DE ENTRADA/SALIDA
Puerto:
La dirección del puerto puede indicarse
Directamente con una constante si se trata de 8 bits
Puede indicarse como DX en cualquier caso
IN acumulador,puerto
contenido del puerto acumulador
Acumulador: AX o AL
(según el tamaño del contenido del puerto)
83
IN acumulador,puerto
contenido del puerto acumulador
Ejemplos:
IN AL,43H
MOV DX,43H
IN AL,DX
INSTRUCCIONES DE ENTRADA/SALIDA
84
OPERACIONES LOGICAS
NOT destino
destino destino
AND destino,fuente
destino ∩ fuente destino
OR destino,fuente
destino U fuente destino
XOR destino,fuente
destino fuente destino
+
85
APLICACIONES DE LAS OPERACIONES LOGICAS
AND destino,fuente
destino ∩ fuente destino
a7 a6 a5 a4 a3 a2 a1 a0
∩ 1 0 0 1 1 0 1 0
a7 0 0 a4 a3 0 a1 0
ai ∩ 0 = 0
ai ∩ 1 = ai
AND permite poner a cero los bits deseados
manteniendo inalterados los restantes
86
OR destino,fuente
destino U fuente destino
a7 a6 a5 a4 a3 a2 a1 a0
U 1 0 0 1 1 0 1 0
1 a6 a5 1 1 a2 1 a0
ai U 0 = ai
ai U 1 =1
OR permite poner a uno los bits deseados
manteniendo inalterados los restantes
APLICACIONES DE LAS OPERACIONES LOGICAS
87
XOR destino,fuente
destino fuente destino
a7 a6 a5 a4 a3 a2 a1 a0
1 0 0 1 1 0 1 0
a7 a6 a5 a4 a3 a2 a1 a0
ai 0 = ai
ai 1 = ai
XOR permite invertir los bits deseados
manteniendo inalterados los restantes
+
+
+
+
APLICACIONES DE LAS OPERACIONES LOGICAS
88
OPERACIONES ARITMETICAS
ADD destino,fuente
destino + fuente destino
ADC destino,fuente
destino + fuente + Fc destino
SUMAR
INC destino
destino + 1 destino Se modifican
todos los flags
89
SUB destino,fuente
destino - fuente destino
SBB destino,fuente
destino - fuente - Fc destino
RESTAR
DEC destino
destino - 1 destino Se modifican
todos los flags
CMP destino,fuente
destino - fuente XX
OPERACIONES ARITMETICAS
90
MUL origen (Multiplica enteros sin signo)
MUL BL ; AL*BL AX
(Si AH≠0 Fc = Fo= 1)
MUL BX ; AX*BX DXAX
( Si DX≠0 Fc = Fo = 1)
IMUL origen (Multiplica enteros con signo)
IMUL BL ; AL*BL AX
IMUL BX ; AX*BX DXAX
OPERACIONES ARITMETICAS
91
DIV origen (Dividir enteros sin signo)
DIV BL ; AX/BL AL(Coc) AH(Resto)
DIV BX ; DXAX/BX AX (Coc) DX(Resto)
IDIV origen (Dividir enteros con signo)
IDIV BL ; AX/BL AL(Coc) AH(Resto)
IDIV BX ; DXAX/BX AX (Coc) DX(Resto)
OPERACIONES ARITMETICAS
92
MANIPULACION DE CADENAS
CMPSB / CMPSW
DS:SI – ES:DI Flags
SI se incrementa si Fd = 0
se decrementa si Fd = 1
LODSB / LODSW
DS:SI AL
SI se incrementa si Fd = 0
se decrementa si Fd = 1
93
MOVSB / MOVSW
DS:SI ES:DI
SI y DI se incrementan si Fd = 0
SI y DI se decrementan si Fd = 1
SCASB / SCASW
AL – ES:DI Flags
DI se incrementa si Fd = 0
se decrementa si Fd = 1
MANIPULACION DE CADENAS
94
SCASW
AX – ES:DI Flags
DI +2 DI si Fd = 0
DI -2 DI si Fd = 1
SCASB
AL – ES:DI Flags
DI se incrementa si Fd = 0
se decrementa si Fd = 1
MANIPULACION DE CADENAS
95
STOSB
AL ES:DI
SI se incrementa si Fd = 0
se decrementa si Fd = 1
STOSW
AX ES:DI
SI +2 SI si Fd = 0
SI -2 SI si Fd = 1
MANIPULACION DE CADENAS
96
REP
Repite CX veces
REPE = REPZ
Repite CX veces si Fz = 1
REPNE = REPNZ
Repite CX veces si Fz = 0
Prefijos de repetición
MANIPULACION DE CADENAS
97
SHIFTS Y ROTACIONES
GENERALIDADES:
Shift o Rotación a la derecha
Fc
Shift o Rotación a la derecha
Shift o Rotación a la derecha
Fc
Shift o Rotación a la izquierda
98
SHIFTS (Desplazamientos):
Shift o Rotación a la derecha
Fc
Shift Aritmético a la derecha
SAR destino,1
SAR destino, cl
Shift o Rotación a la derecha
Fc
Shift Lógico a la derecha
SLR destino,1
SLR destino, cl
0
Equivale a dividir por 2
Un entero con signo
Equivale a dividir por 2
Un entero sin signo
SHIFTS Y ROTACIONES
99
SHIFTS (Desplazamientos):
Shift o Rotación a la derecha
Fc
Shift Aritmético a la izquierda
SAL destino,1
SAL destino, cl
0
SHL destino,1
SHL destino, cl
Equivale a multiplicar
por 2 un entero con o
sin signo
SHIFTS Y ROTACIONES
100
ROTACIONES:
Shift o Rotación a la derecha
Fc
Rotación circular a la izquierda
ROL destino,1
ROL destino, cl
Shift o Rotación a la derecha
Fc
Rotación circular a la derecha
ROR destino,1
ROR destino, cl
SHIFTS Y ROTACIONES
101
ROTACIONES:
Shift o Rotación a la derecha
Fc
Rotación a través de carry a la izquierda
RCL destino,1
RCL destino, cl
Shift o Rotación a la derecha
Fc
Rotación circular a la derecha
RCR destino,1
RCR destino, cl
SHIFTS Y ROTACIONES
102
PRACTICAS
103
Programación en Ensamblador
Programa.EXE
Obtener un programa Ensamblador que saque
Por el centro de la pantalla un mensaje cualquiera
Datos: INT 21H función 9
Saca por pantalla una cadena de caracteres cuyo
comienzo está en DS:DX
y cuyo final se indica con el símbolo “$”
Práctica 1
104
Programación en Ensamblador
Programa.EXE
Obtener un programa Ensamblador que saque
Por el centro de la pantalla un mensaje cualquiera
Datos: INT 10H función 2
Sitúa el cursor en DH = Fila (0-24)
DL = Columna (0- 79)
BH = Página 0- 3 En modos 2 y 3
0-7 En modos 0 y 1
0 en modo gráfico
Práctica 1
105
Programación en Ensamblador
Programa.EXE
Obtener un programa Ensamblador que saque
Por el centro de la pantalla un mensaje cualquiera
Datos:
INT 21H función 4CH Finaliza el programa y devuelve el control al
sistema operativo
Práctica 1
106
Programación en Ensamblador
Programa.EXE
Obtener un programa Ensamblador que saque por el centro de la pantalla un
mensaje cualquiera
.MODEL SMALL
.STACK 10
.DATA
MEN DB “AQUÍ EL MENSAJE$”
.CODE
INICIO: MOV AX,@DATA
MOV DS,AX
;Situar el cursor
MOV AH,2
MOV BH,0
MOV DH,12; FILA 12
MOV DL35h;COLUMNA 35
INT 10H
;Sacar el mensaje
LEA DX,MEN
MOV AH,9
INT 21H
;Finalizar el programa
MOV AH,4CH
INT 21H
END INICIO
Práctica 1
107
Programación en Ensamblador
Programa.EXE y .COM
Obtener un programa Ensamblador que saque por el centro de la pantalla un
mensaje cualquiera
1)Escribir el programa utilizando un editor de textos P. Ej EDIT
Crear un fichero [nombre].ASM
2) ejecutar el programa TASM.exe
TASM nombre.asm Se genera nombre.OBJ
3) Ejecutar el programa TLINK .EXE
TLINK nombre.obj Se crea nombre.exe TLINK/t nombre.obj Se crea nombre.COM
Cargar el programa en el TurboDebugger y
comprobar su ejecución paso a paso y
ocupación de memoria
Práctica 1
108
Programación en Ensamblador
Programa.EXE Práctica 0
109
Programación en Ensamblador
Programa.EXE
Práctica 0
PSP
110
Programación en Ensamblador
Programa.COM
Práctica 1
110
.MODEL TINY
.CODE
ORG 100H
INICIO:
;Situar el cursor
MOV AH,2
MOV BH,0
MOV DH,12; FILA 12
MOV DL35h;COLUMNA 35
INT 10H
;Sacar el mensaje
LEA DX,MEN
MOV AH,9
INT 21H
;Finalizar el programa
RET
MEN DB “AQUÍ EL MENSAJE$”
END INICIO
111
Programación en Ensamblador
Programa.COM Práctica 1
111
112
TEMPORIZADORES Práctica 1
T0
T1
T2
N0
N1
N2
fe = 1.19318MHz
f0 = 18.2 Hz
f1 = 33 KHz
Programable
Son divisores de frecuencia programables.
La frecuencia de entrada procede de un oscilador a cristal de
cuarzo (fe = 1.19318 MHz)
La frecuencia de salida es la de entrada dividida por Ni (16 bits)
113
TEMPORIZADORES Práctica 1
T0
N0 = 0000H
fe = 1.19318MHz
f0 = 18.2 Hz
La INT 8 se ejecuta 18,2 veces cada segundo.
La INT 8 incrementa la doble word contenida en
0040H:006CH, luego llama a la INT 1CH.
P40H PIC
INT 8
IRQ0
INT 1AH función 0
OBTIENE:
Nº de Tics en 0040H:006CH (Doble word)
y los devuelve en CXDX
T0 “1” Gate
114
TEMPORIZADORES Práctica 3
Obtener un programa que saque un mensaje por pantalla, espere
5 segundos y luego saque un segundo mensaje por pantalla.
.MODEL SMALL
.STACK 100
.DATA
MEN1 DB “MENSAJE1$”
MEN2 DB “MENSAJE2$”
.CODE
INICIO: MOV AX,@DATA
MOV DS, AX
CALL MENSAJE1
CALL RETARDO
CALL MENSAJE2
MOV AH,4CH
INT 21H
MENSAJE1 PROC
-------
MENSAJE1 ENDP
RETARDO PROC
---------
RETARDO ENDP
MENSAJE2 PROC
---------
MENSAJE2 ENDP
END INICIO
115
TEMPORIZADORES
Práctica 1 Rutina retardo de 4
segundos = 73 Tics
DX +73 BX
CXDX Nº DE TICS
CXDX Nº DE TICS
RET
¿DX = BX? NO
SI
RETARDO PROC
MOV AX,0
INT 1AH
ADD DX,73
MOV BX,DX
BUCLE1: INT 1AH
CMP BX,DX
JNZ BUCLE1
RET
RETARDO ENDP
116
TEMPORIZADORES Práctica 3
Rutina retardo de un
tiempo indefinido
BX 0FFFFH
CX 0FFFH
DEC
DEC CX
RET
¿BX = 0? NO
SI
¿CX = 0? NO
SI
RETARDO PROC
MOV CX,0FFFH
BUCLE2: MOV BX, 0FFFFH
BUCLE1: DEC BX
JNZ BUCLE1
LOOP BUCLE2
RET
RETARDO ENDP
117
TEMPORIZADORES Práctica 1
Rutina programar el temporizador T2
1) 10 11 011 0 P43H
2) 600 AX
3) AL P42H
4) AL AH
5) AL P42H
PROGRAMAR PROC
MOV AL,10110110B
OUT 43H,AL
MOV AX,600
OUT 42H,AL
XCHG AH,AL
OUT 42H,AL
RET
PROGRAMAR ENDP
118
TEMPORIZADORES
T1
N1 = 18 H fe = 1.19318MHz
f0 = 66 KHz
P41H
T1 y T2
“1” Gate
Al refresco de memoria
T2
N2 = Programable P42H
Gate
P43H CONTROL
0 P61H
1 2 3 4 5 6 7
Biestable
33 KHz
Práctica 1
119
TEMPORIZADORES Práctica 1
Puerto 43H (Control del temporizador)
7 6 5 4 3 2 1 0
0 = Binario
1 = BCD
000 = modo 0
001 = modo 1
x10 = modo 2
x11 = modo 3
100 = modo 4
101 = modo 5
00 = Comando de enclavamiento
01 = Leer/Escribir byte bajo
10 = Leer/Escribir byte alto
11 = Leer/Escribir byte bajo y luego byte alto
00 = Temporizador 0
01 = Temporizador 1
10 = Temporizador 2
11 = Comando Read Back
120
TEMPORIZADORES Práctica 1
Programar el temporizador T2 para obtener
un sonido de 2 KHZ en el altavoz. El
sonido durará un tiempo indefinido y luego
se parará
Programar el temporizador T2 para obtener
un sonido de 2 KHZ en el altavoz. El
sonido durará 4 segundos y luego se parará
121
TEMPORIZADORES Práctica 1
Rutina activar el temporizador T2
1) P61H AL
2) AL (OR) 00000011 AL
3) AL P61H
ACTIVAR PROC
IN AL,61H
OR AL,00000011B
OUT 61H,AL
RET
ACTIVAR ENDP
122
TEMPORIZADORES Práctica 1
Rutina desactivar el temporizador T2
1) P61H AL
2) AL (AND) 11111100 AL
3) AL P61H
DESACTIVAR PROC
IN AL,61H
AND AL,11111100B
OUT 61H,AL
RET
DESACTIVAR ENDP
123
Programación en Ensamblador
MENSAJEX PROC
;Situar el cursor
MOV AH,2
MOV BH,0
MOV DX,1235h;FILA Y COLUMNA
INT 10H
;Sacar el mensaje
LEA DX,MEN
MOV AH,9
INT 21H
MENSAJEX ENDP
Práctica 1
124
TECLADO Y TEMPORIZADORES
TECLADO
µC
Controlador
del
Teclado
Puerto 60H
Código SCAN
Sincronismo
BUFFER
INT 9
Placa base
Códigos SCAN
Código MAKE (Pulsar tecla)
Código BREAK (Soltar tecla)
A = 00011100
A = 10011100
Práctica 2
125
TECLADO Y TEMPORIZADORES
Práctica 2
EL BUFFER DEL TECLADO
Primer byte Ultimo byte
Cabeza Cola
El Buffer del teclado se encuentra en el segmento 0040H
Cabeza = Primer carácter en ser procesado
Cola = Primer byte libre. (Donde se copiarán los códigos de la
siguiente tecla pulsada
1EH 0040H : 0080H
00H 0040H : 0081H
3EH 0040H : 0082H
00H 0040H : 0083H
0040H : 001A
0040H : 001B
0040H : 001C
0040H : 001D
126
TECLADO Y TEMPORIZADORES
Práctica 2
INT 9 = Se examina el código SCAN recibido en
el puerto 60H. Si es un carácter se envía al buffer
del teclado:
Si es una tecla normal:
Si es una tecla expandida: CODIGO ASCII CODIGO SCAN
0 0 0 0 0 0 0 0 CODIGO SCAN
127
TECLADO Y TEMPORIZADORES
El BIOS y el teclado. INT 16H
F:00
Si hay carácter en el Buffer del teclado devuelve:
En AH El código SCAN
En AL El código ASCII
Borra el carácter leído del Buffer
Si el Buffer está vacío:
Espera la pulsación de una tecla
F:01
Si hay carácter en el Buffer del teclado devuelve:
En AH El código SCAN
En AL El código ASCII
Fz = 1
No borra el carácter leído del Buffer
Si no hay carácter en el Buffer del teclado devuelve:
Fz = 0
No espera pulsación
Práctica 2
128
TECLADO Y TEMPORIZADORES
El BIOS y el teclado. INT 16H
F:02
Lee el contenido de la posición de memoria 0040h:0017h y
lo copia en AL
Para el teclado expandido Existen las funciones 10h, 11h y 12h.
Funciones 10h y 11h igual que las funciones 00 y 01 con la diferencia que
detectan mas teclas y que no convierten el código 0E0H en 00
Ins Bl
May
Bl
Num
Bl
Des Alt Ctrl
Shift
Izd
Shift
Der
7 6 5 4 3 2 1 0
Práctica 2
129
TECLADO Y TEMPORIZADORES
Obtener programa ensamblador que active el temporizador T2 para que
emita sucesiva y secuencialmente las notas musicales DO, RE, MI, FA y SOL
de la 7ª octava musical. Cada nota deberá escucharse durante un segundo.
Práctica 2
Frecuencias de las notas musicales de la 7ª octava:
DO = 2093 Hz RE = 2349Hz MI = 2637Hz FA = 2794Hz SOL= 3136Hz
Frecuencia de entrada al temporizador = 1,19318MHz
Divisores de frecuencia para obtener las frecuencias anteriores:
570-508-452-427-380-339
130
TECLADO YTEMPORIZADORES Práctica 2 .MODEL SMALL
.STACK 100
.DATA
MEN1…….
MEN2……
.CODE
INICIO: MOV AX,@DATA
MOV DS, AX
BUCLE: IN AL,60H
CMP AL, 9EH
JE MENSAJE1
CMP AL, 9FH
JE MENSAJE2
CMP AL, 81H
JE FIN
JMP BUCLE
MOV AH,4CH
INT 21H
MENSAJE1 PROC
……..
131
TECLADO YTEMPORIZADORES
Práctica 2
Obtener un programa ensamblador que saque un mensaje por pantalla al
pulsar la tecla “A” , al pulsar la tecla “S” sacará un segundo mensaje por
pantalla. El programa se terminará al pulsar el ESC.
Códigos MAKE y BREAK de las teclas mencionadas:
A = 1EH (9EH)
Esc = 1 (81H)
132
Práctica 4
1.- Programar la tarjeta de vídeo en el modo 3 (Texto
80x25 16 colores). Obtener un mensaje cualquiera en el
centro de la pantalla. Seleccionar el color del fondo, el del
borde y el de los caracteres que componen el mensaje.
Video
133
Práctica 4
1.- Programar la tarjeta de vídeo en el modo 3 (Texto
80x25 16 colores). Obtener un mensaje cualquiera en el
centro de la pantalla. Seleccionar el color del fondo, el del
borde y el de los caracteres que componen el mensaje.
Video
Modo Interrupción 10H función 0 (AH = 0). AL = modo
modo 3:
MOV AX,3
INT 10H
Borde Interrupción 10H función 0BH (AH = 0BH).
BH = 0
BL = Valor del color (Número del 07)
134
Práctica 4
1.- Programar la tarjeta de vídeo en el modo 3 (Texto
80x25 16 colores). Obtener un mensaje cualquiera en el
centro de la pantalla. Seleccionar el color del fondo, el del
borde y el de los caracteres que componen el mensaje.
Video
Fondo
Se efectúa un falso SCROLL de 0 toda la pantalla 0 líneas.
INTERRUPCION 10H función 6 o 7.
AH = 6
AL = 0 (Número de líneas a desplazar)
BH = Color (0 7)
CH = 0 CL = 0 (Coordenadas del punto superior izquierdo)
DH = 24 DL = 79 (Coordenadas del punto inferior derecho)
135
Práctica 4
1.- Programar la tarjeta de vídeo en el modo 3 (Texto
80x25 16 colores). Obtener un mensaje cualquiera en el
centro de la pantalla. Seleccionar el color del fondo, el del
borde y el de los caracteres que componen el mensaje.
Video
Mensaje
INT 10H función 13H AH = 13H
AL = 3 (La cadena contiene los bytes de atributo)
BH = 0 (Página de vídeo)
CX = Longitud de la cadena (Nº de caracteres)
DH = Fila del primer carácter en pantalla (0-24)
DL = Columna del primer carácter (0-79)
ES:BP dirección de comienzo de la cadena de texto
136
Práctica 4
2.- Programar la tarjeta de vídeo en el modo 0DH
(Gráfico 320x200 16 colores). Obtener una imagen en la
pantalla del monitor en que la mitad superior aparezca en
un color cualquiera y la mitad inferior en otro color
diferente. Deberá utilizar la función 0CH de la
interrupción 10H para trazar todos y cada uno de los
64.000 pixels que forman la imagen completa. Al salir
deberá restaurar el modo 3.
Video
137
Práctica 4 2.- Programar la tarjeta de vídeo en el modo 0DH
(Gráfico 320x200 16 colores). Obtener una imagen en la
pantalla del monitor en que la mitad superior aparezca en
un color cualquiera y la mitad inferior en otro color
diferente. Deberá utilizar la función 0CH de la
interrupción 10H para trazar todos y cada uno de los
64.000 pixels que forman la imagen completa. Al salir
deberá restaurar el modo 3.
Video
Función 0CH. Pintar un pixel en pantalla
AH = 0CH
AL = Color del Pixel (0-15)
BH = 0 (Página)
CX = Coordenada X del Pixel (0-319)
DX = Coordenada Y del Pixel (0 – 199)
138
Práctica 4
3.- Programar la tarjeta de vídeo en el modo 13H (Gráfico
320x200 256 colores). Obtener una imagen en la pantalla
del monitor en que aparezca dividida en tres zonas
horizontales de distintos colores. Deberá utilizar
programación directa de la RAM de vídeo
(A000H:0000HA000H:FFFFH) para trazar los 64.000
pixels que componen la imagen completa.
Video
139
Video Práctica 4
1.- Al pulsar la tecla F1 (Código SCAN 3BH) Deberá obtenerse la hora, el
minuto y el segundo actual en el centro de la pantalla.(La tarjeta estará
programada en el modo .Deberá seleccionar el color del fondo, y el de los
números que componen la hora. La hora se actualizará cada segundo.
2.- Al presionar la tecla F2 deberán aparecerán tres franjas verticales de
diferentes colores y de cualquier anchura. La tarjeta deberá estar
programada en el modo 0DH y la imagen se obtendrá utilizando las funciones
adecuadas de la Interrupción 10H
3.- Al pulsar la tecla F3 aparecerá en pantalla una imagen similar a la del
apartado anterior. La tarjeta deberá estar programada en el modo 13H y la
imagen se obtendrá mediante carga directa de la RAM de vídeo.
4.- Al pulsar F6 se volverá al modo de partida (Modo 3) y se finalizará el
programa devolviendo el control al S.O.
Práctica final
140
Práctica final
140
• RTC (Reloj en tiempo real y CMOS RAM)
Segundo
Segundo Alarma
Minuto
Minuto Alarma
Hora
Hora Alarma
Siglo
.
.
00H 01H 02H
.
.
Puerto 71H
03H 04H 05H
Dia de la Semana
Dia del mes
Mes
Año
Registro A de estado
Registro B de estado
06H 07H 08H 09H 0AH 0BH
Registro C de estado
Registro D de estado
0CH 0DH
32H
Lectura de un registro:
Lectura del registro7
MOV AL,7 ; 7 AL
OUT 70H,AL ; AL P70H
JMP $+2 ; TIEMPO DE
;ESPERA
IN AL,71H
141
Video Práctica 4
Práctica final
141
Acceso a la CMOS RAM a través del BIOS (INT 1AH)
Función 00
Devuelve en cxdx el nº de TICS
Función 1
Carga el contenido de cxdx en memoria
Función 2
Devuelve en CH hora
CL minutos
DH segundos
Función 3
Dual de la anterior
Función 4
Devuelve en CH siglo
CL año
DH mes
DL dia del mes
Función 5
Dual de la anterior