Вы находитесь на странице: 1из 17

MODOS DE

DIRECCIONAMIENTO
No. 26
8:00 a.m.
Lenguaje Ensamblador
ESQUELETO DE UN PROGRAMA EN
ENSAMBLADOR
Tipo de Modelo de
un programa en
 Model small Ensamblador.
Determina el
tamaño de los
 stack Segmento de
Pila
segmentos
Aquí se
 data Segmento de
declaran:
Variables
 Code Datos Arreglos
Matrices
 mov ax, @data Cadenas
 mov ds, ax Inicialización
 push ds
 …código del programa
 mov ax,4c00h
 int 21h
 end Finalización
Declaración de datos en el
segmento de Datos
 Directivas:
 db = Define byte = 8 bits = 1 carácter
 dw = Define palabra = 16 bits = 2 caracteres
 dd = Define doble palabra = 32 bits = 4 caracteres

 No existen tipos de datos en el Lenguaje Ensamblador a diferencia


de los lenguajes de alto nivel, lo que se realiza es para reservar
espacios de memoria.

 sintaxis para declarar datos, cadenas, arreglos, matrices:

nombre_Dato directiva valor(s)

 Ejemplos:
 1. Se desea declarar una variable contador de tipo byte inicializada
a cero en el segmento de datos.
Ejemplo 1
 . data
 contador db 0

Ejemplo 2
 2. Define una variable “carácter”
inicializada con el carácter ‘z’.
 . data
 caracter db ‘z’

 3. Declara una variable “promedio”


inicializada con tu promedio general.
 . data
 promedio dw 89.12
Evidencia No. 4
 Define los siguientes esqueletos
de programas en ensamblador:

 a. Guardar como p1.asm un


documento creado en block de notas.

 Define las siguientes variables


inicializadas a cero: promedio,
sumatoria, contador_repe,
contador_normal.
 b. Guardar como p2.asm, declarando
las siguientes variables:

 Un arreglo inicializado con 4 valores


de tipo carácter (los que sean).

 Variable índice inicializada en cero.


 Un mensaje con tu nombre.
Modos de
Direccionamiento
1. Direccionamiento Inmediato.
2. Direccionamiento por Registros.
3. Direccionamiento Director.
4. Direccionamiento Indexado Directo.
5. Direccionamiento Relativo a la Base.
6. Direccionamiento Indirecto.
7. Direccionamiento Base Indexada.
Direccionamiento Inmediato
 Se le identifica cuando el operando fuente es
una constante.

Ejemplo:
a) MOV AH, 34H
b) MOV BX, OF989H
c) MOV CH, ‘C’

Inválidos:
d) MOV CL, 9999H
e) MOV DH, ‘AB’
f) MOV ‘A’, BL
Direccionamiento por Registros
 Se le identifica cuando tanto el operando fuente
como el operando destino son registros válidos
del microprocesador.

Ejemplo:
a) MOV AX, BX
b) MOV AH, AL
c) MOV CX, CL

Inválidos:
d) MOV AH, BX
e) MOV DL, BP
f) MOV CL, CX
Direccionamiento Directo
 Se identifica cuando el operando fuente o el operando
destino es una variable declarada en el segmento de datos.

Ejemplo:
a) MOV DX, palabra
b) MOV datos, AX
c) MOV caracter, CH

Inválidos: No es permitido direccionar de variable a variable o de


memoria a memoria.

d) MOV palabra, datos


e) MOV caracter, datos
f) MOV caracter, arreglo[0]
g) MOV palabra, palabra
Direccionamiento Indexado Directo
 Se identifica cuando el operando fuente u
operando destino es una variable declarada
en el segmento de datos indexada por alguno
de los registros índices (SI, DI).

Ejemplo:
a) MOV arreglo[SI], ‘A’
b) MOV CL, vector[DI]
c) MOV vector[SI], 0

Inválidos:
d) MOV vector1[SI], vector2[DI]
Direccionamiento Relativa a la Base
 Se utilizan los registros BX, BP.
0 9
 Ejemplo: 1 8
Considere el siguiente programa:
2 7
.data
MiVector db 9,8,7,6,5,4,3,2,1 3 6
.code
4 5
Inicialización
5 4
mov bp, 0
mov ah, MiVector[bp+1] ;[0+1]=1 6 3
mov cl, MiVector[bp+5] ;[0+5]=5
7 2
Finalización
8 1
Direccionamiento Indirecto
 Este modo de direccionamiento se
identifica porque se hace referencia
directa a una dirección efectiva.

 Instrucción de apoyo:

LEA Op_Destino, Op_Fuente


Obtiene la dirección efectiva ó
desplazamiento.
Ejemplo:
Lea SI, MiVector 9

Lea obtiene la posición en memoria de8


MiVector. 7

6
 Apunta al inicio de MiVector. 5

4
 mov ah, [SI] ;apunta al 9 3
 add SI, 3 2
 mov bh,[SI] ;apunta al 6 1
Direccionamiento Base Indexado
 Este modo de direccionamiento se
identifica porque para direccionar un
elemento en la memoria se hace uso
de los registros base (bx,bp) más
registros índices (si,di), más una
variable definida por el programador.
0 1

Ejemplo r1
1
2
2
3
3 4
 .data
matriz db 1,2,3,4 ;r1 4 5
db 6,5,7,8 ;r2 5 6
db 9,10,11,12 ;r3 r2 7
6
db 13,14,15,16 ;r4 8
7
.code 9
8
1
}Inicialización 9 0
r3
10 1
mov BX, 1 11 1
mov DI, 2 12 1
mov AH, matriz [BX]][DI] ;matriz [1][2]
13 2
mov DL, 2 ;matriz [1+2] r4 1
add DL, matriz [BX][DI] ;matriz [3] 14
3
15
1
4