MODOS DE DIRECCIONAMIENTO No. 26 8:00 a.m. Lenguaje Ensamblador
ESQUELETO DE UN PROGRAMA EN ENSAMBLADOR Tipo de Modelo de un programa en Ensamblador. Determina el tamaño de los segmentos Model small stack data Code mov ax, @data mov ds, ax push ds …código del programa mov ax,4c00h int 21h end Segmento de Pila Aquí se declaran: Variables Arreglos Matrices Cadenas Segmento de Datos Inicialización Segmento de Pila 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. 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 Direccionamiento Inmediato. Direccionamiento por Registros. Direccionamiento Director. Direccionamiento Indexado Directo. Direccionamiento Relativo a la Base. Direccionamiento Indirecto. Direccionamiento Base Indexada.
Direccionamiento Inmediato Se le identifica cuando el operando fuente es una constante. Ejemplo: MOV AH, 34H MOV BX, OF989H MOV CH, ‘C’ Inválidos: MOV CL, 9999H MOV DH, ‘AB’ 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: MOV AX, BX MOV AH, AL MOV CX, CL Inválidos: MOV AH, BX MOV DL, BP 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: MOV DX, palabra MOV datos, AX MOV caracter, CH Inválidos: No es permitido direccionar de variable a variable o de memoria a memoria. MOV palabra, datos MOV caracter, datos MOV caracter, arreglo[0] 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: MOV arreglo[SI], ‘A’ MOV CL, vector[DI] MOV vector[SI], 0 Inválidos: MOV vector1[SI], vector2[DI]
Direccionamiento Relativa a la Base Se utilizan los registros BX, BP. Ejemplo: Considere el siguiente programa: .data MiVector db 9,8,7,6,5,4,3,2,1 .code Inicialización mov bp, 0 mov ah, MiVector[bp+1] ;[0+1]=1 mov cl, MiVector[bp+5] ;[0+5]=5 Finalización 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8
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 Lea obtiene la posición en memoria de MiVector. Apunta al inicio de MiVector. mov ah, [SI] ;apunta al 9 add SI, 3 mov bh,[SI] ;apunta al 6 9 8 7 6 5 4 3 2 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.
Ejemplo .data matriz db 1,2,3,4 ;r1 db 6,5,7,8 ;r2 db 9,10,11,12 ;r3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 r1 2 .data matriz db 1,2,3,4 ;r1 db 6,5,7,8 ;r2 db 9,10,11,12 ;r3 db 13,14,15,16 ;r4 .code }Inicialización mov BX, 1 mov DI, 2 mov AH, matriz [BX]][DI] ;matriz [1][2] mov DL, 2 ;matriz [1+2] add DL, matriz [BX][DI] ;matriz [3] 3 4 5 r2 6 7 8 9 r3 10 r1 11 12 13 r4 14 15