Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
OBJETIVOS:
FUNDAMENTO TEORICO:
ORGANIZACIÓN DE UN PROGRAMA
Los siguientes pasos son comunes para escribir un programa en lenguaje ensamblador:
2.- Esbozar las ideas en términos generales y planear la lógica general. Por Ejemplo, sin un
problema es examinar las operaciones de movimiento de múltiples bytes, inicie definiendo los
campos que serán movidos. Después planear la estrategia para las instrucciones: rutinas de
inicialización, para uso de salto condicional y para uso de LOOP (ciclos o lazos). Lo siguiente
muestra la lógica principal: codigo que muchos programadores utilizan para planear un programa:
- Regresar al DOS
- Salto 1:
- Si es cero, Regresar
La rutina del ciclo podría ser esbozada de una manera semejante.
3.-Organizar el programa en unidades lógicas tales que rutinas relacionadas se sigan una a otra.
Procedimiento de alrededor de 25 líneas (del tamaño de la pantalla) son más fáciles de depurar que
procedimientos más largos.
5.- Utilizar los comentarios para clarificar lo que se supone hace un procedimiento, que
operaciones aritméticas y de comparación son realizadas y lo que hace un a instrucción raramente
usada (Ej. LOOPNE:¿el ciclo se efectúa mientras no sea igual o hasta que no sea igual?).
6.- Para teclear el programa, utilizar una estructura de programa que pueda copiar en un archivo
con un nuevo nombre.
Procedimiento:
Ensamblar los siguientes programas que vienen escritos en código fuente posteriormente linkearlos
con DEBUG. Presentar el listado (opción LST) y el programa ejecutable.
EJEMPLO 1:
;HOLA ASM
;Programa clásico ejemplo 1.Despliega una leyenda en pantalla.
STACK SEGMENT STACK ;Segmento de pila
DW 64 DUP(?) ;Define espacio de la pila
STACK ENDS
DATA SEGMENT ;Segmento de datos
SALUDO DB “Hola mundo!!”,13,10,”$”;Cadena
DATA ENDS
CODE SEGMENT ;Segmento de código
ASSUME CS: CODE, DS: DATA, SS: STACK
INICIO: ;Punto de entrada al programa
MOV AX, DATA ;Pone dirección en AX
MOV DS, AX ;Pone la dirección en los registros
MOV DX, OFFSET SALUDO ;Obtiene dirección del mensaje
MOV AH, 09H ;Funcion: Visualizar cadena
INT 21H ;Servicio: Funciones alto nivel DOS
MOV AH, 4CH ;Funcion terminar
INT 21H
CODE ENDS
END INICIO ;Marca fin y define INICIO ;HOLA ASM;
Programa clásico ejemplo 1.Despliega una leyenda en pantalla.
STACK SEGMENT STACK ;Segmento de pila
DW 64 DUP(?) ;Define espacio de la pila
STACK ENDS
DATA SEGMENT ;Segmento de datos
SALUDO DB “Hola mundo!!”,13,10,”$”;Cadena
DATA ENDS
CODE SEGMENT ;Segmento de código
ASSUME CS: CODE, DS: DATA, SS: STACK
INICIO: ;Punto de entrada al programa
MOV AX, DATA ;Pone dirección en AX
MOV DS, AX ;Pone la dirección en los registros
MOV DX, OFFSET SALUDO ;Obtiene dirección del mensaje
MOV AH, 09H ;Función: Visualizar cadena
INT 21H ;Servicio: Funciones alto nivel DOS
MOV AH, 4CH ;Funcion terminar
INT 21H
CODE ENDS
END INICIO ;Marca fin y define INICIO
EJEMPLO 2:
a) ocurrió un desbordamiento
3.-¿Cuál es la diferencia entre la codificación de un operando PROC con FAR y con NEAR?
R.- La diferencia entre un operando PROC FAR y un operando PROC NEAR es que el operando
PROC FAR(lejano) hace referencia a datos que se encuentran fuera del segmento, en cambio el
operando PROC NEAR(cercano) hace referencia a todos dentro del mismo segmento.
4.-en un programa, EXE, A20 llama a B20 llama a C20 y C20 a D20.¿como resultadode estas
llamadas, cuantas direcciones contiene la pila?
R.- la pila contiene tres direcciones ya que hace tres llamadas.
5.-Realizar la multiplicación por 10 para el contenido de AX, utilizando tan solo instrucciones
de corrimiento, movimiento y suma
mov ax, 05
mov bl, al
shl bl, 1
mov bh, al
shl bh, 3
add bl, bh
mov al, bl
6.-considerando un valor de 32 bits DX:AX en el que los 16 bits menos significativos esta
en AX y los 16 bits mas significativos están en DX, utilizando instrucciones de desplazamiento
y rotación de palabras dobles, efectúa las siguientes operaciones: a) Multiplicación por 2
b)multiplicación por 4 c)división entre 4 d)investigar que instrucciones multiplican por 2 los
48 bits de DX:AX:BX instrucciones utilizadas a partir del procesador 80386)
a) Multiplicación por 2
mov dx,03
mov ax,04
shl dx,1
shl ax,1
b)multiplicación por 4
mov dx,03
mov ax,04
shl dx,2
shl ax,2
c)división entre 4
mov dx,12
mov ax,12
shr dx,2
shr ax,2
R.-Las instrucciones que multiplican por 2los 48 bits son: SHLD desplaza hacia la izquierda por 2
los 48 bits de forma doble y SHRD desplaza hacia la derecha por 2 los 498 bits de forma doble
7.- Codifique una rutina usando LOOP que calcule la sucesión Fibonacci
1,1,2,3,5,8,13,21….salvo por los dos primeros números en la sucesión cada número es la suma
de los dos números que se precede. Establezca un límite de 12 vueltas. Ensámblela, enlácela y
utilice DEBUG para rastrear la rutina
mov cx,12
mov bx,1
mov ax,1
serie:
mov dx,ax
add ax,bx
mov bx,dx
loop serie
R.-El tamaño máximo del programa .COM es de 64 Kbytes incluyendo el PSP de 256 byte
9.-para un programa fuente que será convertido a formato .COM ¿Qué segmento se puede
definir?
10.-Codefique, ensamble, enlace y utilice DEBUG para probar el siguiente programa: defina
elementos de byte llamados BYTE1 y BYTE2(con cualquier valor) y una palabra
WORD3(con 0)
Data segment
byte1 db 2h
byte2 db 4h
word3 dw 0
;add your data here!
pkey db “press any key…$”
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
;set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov al,byte1
add al,byte2
mov l,37
mov dl, bl
mov bl, al
mov al, dl
mul bl
mov word3,ax
11.- Corrija el programa anterior para formato .COM. Ensámblelo, enlácelo y
ejecútelo con DEBUG.
CONCLUSIONES Y RECOMENDACIONES:
Para programar el formato .EXE. es necesario saber los parámetros o condiciones para crear un
archivo con extensión .EXE sin embargo en el emulador 8086 los registros, parámetros son creados
de forma automática.
Para utilizar el lenguaje ensamblador con el emulador 8086 es necesario saber los comandos que
se va a utilizar ya que si nose los escribe de forma correcta el emulador nos dará un mensaje de
error y no podrá ejecutar el código programado en el emulador
Es importante definir las variables o los valores a utilizar, ya sean estos decimales o hexadecimales,
ya que para poner valores decimales solo se coloca el valor, pero el emulador ejecuta el programa
transformado el valor a hexadecimal, y si el valor a declarar se lo hace en hexadecimal es necesario
colocar una “h” después del valor, para especificar que esto es hexadecimal.