Ensamblador 2013(1)

141
1 Ensamblador

Transcript of Ensamblador 2013(1)

Page 1: Ensamblador 2013(1)

1

Ensamblador

Page 2: Ensamblador 2013(1)

2

2013

Horario de Laboratorio:

L M M J V

X 12h-14h

X 19,30h-21h

Page 3: Ensamblador 2013(1)

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.

Page 4: Ensamblador 2013(1)

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)

· · ·

Page 5: Ensamblador 2013(1)

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

Page 6: Ensamblador 2013(1)

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

Page 7: Ensamblador 2013(1)

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

Page 8: Ensamblador 2013(1)

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

Page 9: Ensamblador 2013(1)

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

Page 10: Ensamblador 2013(1)

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

Page 11: Ensamblador 2013(1)

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

Page 12: Ensamblador 2013(1)

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

Page 13: Ensamblador 2013(1)

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

Page 14: Ensamblador 2013(1)

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

Page 15: Ensamblador 2013(1)

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

Page 16: Ensamblador 2013(1)

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

Page 17: Ensamblador 2013(1)

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

Page 18: Ensamblador 2013(1)

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

Page 19: Ensamblador 2013(1)

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

Page 20: Ensamblador 2013(1)

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

Page 21: Ensamblador 2013(1)

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

Page 22: Ensamblador 2013(1)

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

Page 23: Ensamblador 2013(1)

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

Page 24: Ensamblador 2013(1)

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

Page 25: Ensamblador 2013(1)

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

Page 26: Ensamblador 2013(1)

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.

Page 27: Ensamblador 2013(1)

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

Page 28: Ensamblador 2013(1)

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

Page 29: Ensamblador 2013(1)

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

Page 30: Ensamblador 2013(1)

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

Page 31: Ensamblador 2013(1)

31

DIRECTIVAS

EQU

Sintaxis:

Etiqueta EQU VALOR

Permite definir etiquetas

Ejemplo:

DATO3 EQU 5C2FH

Page 32: Ensamblador 2013(1)

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,…

Page 33: Ensamblador 2013(1)

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

Page 34: Ensamblador 2013(1)

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

Page 35: Ensamblador 2013(1)

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

Page 36: Ensamblador 2013(1)

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

Page 37: Ensamblador 2013(1)

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

Page 38: Ensamblador 2013(1)

38

Representación de números

Binarios : 101111….1100B

Decimales: 2378D = 2378

Octales: 57O

Hexadecimales: 46H

7FH

0D4H

Page 39: Ensamblador 2013(1)

39

Directivas de definición de procedimientos

• Etqueta PROC

aquí el procedimiento

• Etiqueta ENDP

– Ejemplo:

Calculo PROC

------

------

Calculo ENDP

Page 40: Ensamblador 2013(1)

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.

Page 41: Ensamblador 2013(1)

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

Page 42: Ensamblador 2013(1)

42

.code Define el principio del segmento de

código

El programa finaliza con:

END Etiqueta de inicio

Directivas de definición de segmentos

Page 43: Ensamblador 2013(1)

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

Page 44: Ensamblador 2013(1)

44

DIRECCIONAMIENTOS

Distintas maneras en las que puede

aparecer un dato en una instrucción:

• Direccionamiento inmediato

• Direccionamiento directo

• Direccionamiento indirecto

Page 45: Ensamblador 2013(1)

45

Direccionamiento inmediato:

El dato aparece en la propia instrucción:

MOV AH, 5FH ; 5FH

MOV BX, 789AH; 789AH

AH

BX

DIRECCIONAMIENTOS

Page 46: Ensamblador 2013(1)

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

Page 47: Ensamblador 2013(1)

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

Page 48: Ensamblador 2013(1)

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

Page 49: Ensamblador 2013(1)

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

Page 50: Ensamblador 2013(1)

50

Direccionamiento indirecto:

Por registro de base:

MOV AH,[BX] DS:BX AH

MOV AH,[BP] SS:BP AH

DIRECCIONAMIENTOS

Page 51: Ensamblador 2013(1)

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

Page 52: Ensamblador 2013(1)

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

Page 53: Ensamblador 2013(1)

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

Page 54: Ensamblador 2013(1)

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

Page 55: Ensamblador 2013(1)

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

Page 56: Ensamblador 2013(1)

56

• Instrucciones de carga de registros y

direcciones

– XCHG destino, origen Intercambiar

destino origen

intercambia los contenidos de destino y de origen

INSTRUCCIONES

Page 57: Ensamblador 2013(1)

57

• Instrucciones de carga de registros y

direcciones

– XLAT Traduce

[BX+AL]AL

Es muy útil para tratar con tablas

INSTRUCCIONES

Page 58: Ensamblador 2013(1)

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

Page 59: Ensamblador 2013(1)

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

Page 60: Ensamblador 2013(1)

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

Page 61: Ensamblador 2013(1)

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

Page 62: Ensamblador 2013(1)

62

• Instrucciones de carga de registros y

direcciones

– SAHF Copia AH en los indicadores

S Z A P C AH

INSTRUCCIONES

Page 63: Ensamblador 2013(1)

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

Page 64: Ensamblador 2013(1)

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

Page 65: Ensamblador 2013(1)

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

Page 66: Ensamblador 2013(1)

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

Page 67: Ensamblador 2013(1)

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

Page 68: Ensamblador 2013(1)

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

Page 69: Ensamblador 2013(1)

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

Page 70: Ensamblador 2013(1)

70

• JMP (Salto a “dirección”) Sintaxis: JMP dirección

Salta, simplemente, a la dirección indicada

Instrucciones de transferencia de control

Page 71: Ensamblador 2013(1)

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

Page 72: Ensamblador 2013(1)

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

Page 73: Ensamblador 2013(1)

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

Page 74: Ensamblador 2013(1)

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

Page 75: Ensamblador 2013(1)

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

Page 76: Ensamblador 2013(1)

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

Page 77: Ensamblador 2013(1)

77

a1) A = Above (Mayor)

B = Bellow (Menor)

E = Equal (Igual)

a2) G = Greater

L = Less

Instrucciones de salto condicional

Page 78: Ensamblador 2013(1)

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

Page 79: Ensamblador 2013(1)

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

Page 80: Ensamblador 2013(1)

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

Page 81: Ensamblador 2013(1)

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 “$”

Page 82: Ensamblador 2013(1)

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)

Page 83: Ensamblador 2013(1)

83

IN acumulador,puerto

contenido del puerto acumulador

Ejemplos:

IN AL,43H

MOV DX,43H

IN AL,DX

INSTRUCCIONES DE ENTRADA/SALIDA

Page 84: Ensamblador 2013(1)

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

+

Page 85: Ensamblador 2013(1)

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

Page 86: Ensamblador 2013(1)

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

Page 87: Ensamblador 2013(1)

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

Page 88: Ensamblador 2013(1)

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

Page 89: Ensamblador 2013(1)

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

Page 90: Ensamblador 2013(1)

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

Page 91: Ensamblador 2013(1)

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

Page 92: Ensamblador 2013(1)

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

Page 93: Ensamblador 2013(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

Page 94: Ensamblador 2013(1)

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

Page 95: Ensamblador 2013(1)

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

Page 96: Ensamblador 2013(1)

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

Page 97: Ensamblador 2013(1)

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

Page 98: Ensamblador 2013(1)

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

Page 99: Ensamblador 2013(1)

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

Page 100: Ensamblador 2013(1)

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

Page 101: Ensamblador 2013(1)

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

Page 102: Ensamblador 2013(1)

102

PRACTICAS

Page 103: Ensamblador 2013(1)

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

Page 104: Ensamblador 2013(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

Page 105: Ensamblador 2013(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

Page 106: Ensamblador 2013(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

Page 107: Ensamblador 2013(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

Page 108: Ensamblador 2013(1)

108

Programación en Ensamblador

Programa.EXE Práctica 0

Page 109: Ensamblador 2013(1)

109

Programación en Ensamblador

Programa.EXE

Práctica 0

PSP

Page 110: Ensamblador 2013(1)

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

Page 111: Ensamblador 2013(1)

111

Programación en Ensamblador

Programa.COM Práctica 1

111

Page 112: Ensamblador 2013(1)

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)

Page 113: Ensamblador 2013(1)

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

Page 114: Ensamblador 2013(1)

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

Page 115: Ensamblador 2013(1)

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

Page 116: Ensamblador 2013(1)

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

Page 117: Ensamblador 2013(1)

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

Page 118: Ensamblador 2013(1)

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

Page 119: Ensamblador 2013(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

Page 120: Ensamblador 2013(1)

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á

Page 121: Ensamblador 2013(1)

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

Page 122: Ensamblador 2013(1)

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

Page 123: Ensamblador 2013(1)

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

Page 124: Ensamblador 2013(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

Page 125: Ensamblador 2013(1)

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

Page 126: Ensamblador 2013(1)

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

Page 127: Ensamblador 2013(1)

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

Page 128: Ensamblador 2013(1)

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

Page 129: Ensamblador 2013(1)

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

Page 130: Ensamblador 2013(1)

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

……..

Page 131: Ensamblador 2013(1)

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)

Page 132: Ensamblador 2013(1)

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

Page 133: Ensamblador 2013(1)

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)

Page 134: Ensamblador 2013(1)

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)

Page 135: Ensamblador 2013(1)

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

Page 136: Ensamblador 2013(1)

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

Page 137: Ensamblador 2013(1)

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)

Page 138: Ensamblador 2013(1)

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

Page 139: Ensamblador 2013(1)

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

Page 140: Ensamblador 2013(1)

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

Page 141: Ensamblador 2013(1)

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