Escolar Documentos
Profissional Documentos
Cultura Documentos
2 Fundamentos
2 Fundamentos
Objetivos
1. Saber sobre programación secuenciales que involucren transferencia de datos y
operaciones aritméticas con datos enteros
2. Resolver ejercicios de programación que involucren manipulación de bits
3. Comprender la programación que involucren saltos condicionales y repeticiones
Existe algo de verdad al decir que El lenguaje ensamblador es simple. Este lenguaje se
diseñó para ejecutarse en poca memoria y consiste principalmente en operaciones sencillas de
bajo nivel. Entonces ¿por qué tiene la reputación de ser difícil de aprender? Después de todo,
¿qué tan difícil puede ser mover datos de un registro a otro y realizar un cálculo? He aquí un
ejemplo de un programa simple en lenguaje ensamblador que suma dos números y muestra el
resultado:
Ciertas palabras en lenguaje ensamblador están reservadas para sus propósitos propios, y son
usadas solo bajo condiciones especiales. Por categorías, las palabras reservadas incluyen:
Instrucciones, como MOV, ADD, SUM, MULT, etc que son operaciones que la
computadora puede ejecutar.
Directivas como END o SEGMENT, que se emplean para proporcionar comandos al
ensamblador.
Operadores, como FAR y SIZE, que se utilizan en expresiones.
Símbolos predefinidos, como @Data y @Model, que regresan información a su
programa.
El uso de una palabra reservada para un propósito equivocado provoca que el ensamblador
genere un mensaje de error.
1.2.3 Identificadores
Un identificador es un nombre que se aplica a elementos en el programa, variables, constantes,
procedimientos, etc. Un identificador puede usar los siguientes caracteres:
Directiva La directiva en una instrucción de definición de datos puede ser BYTE, WORD,
DWORD,
SBYTE, SWORD, o cualquiera de los tipos listados en la tabla mostrada previamente. Además,
puede ser cualquiera de las directivas de definición de datos heredadas que se muestran en la
tabla siguiente, que también soportan los ensambladores NASM y TASM.
Inicializador En una definición de datos se requiere por lo menos un inicializador, aunque sea
cero. Los inicializadores adicionales (si los hay) van separados por comas. Si se prefiere dejar la
variable sin inicializar, puede usar el símbolo ? como inicializador. Todos los inicializadores, sin
importar su formato, se convierten en datos binarios mediante el ensamblador.
Un inicializador de signo de interrogación (?) deja la variable sin inicializar, indicando que se le
asignará un valor en tiempo de ejecución:
valor6 BYTE ?
El nombre opcional es una etiqueta que marca el desplazamiento de la variable, desde el inicio
de su segmento. Por ejemplo, si valor1 se encuentra en el desplazamiento 0000 dentro del
segmento de datos y consume 1 byte de almacenamiento, valor2 se encuentra de manera
automática en el desplazamiento 0001:
valor1 BYTE 10h
valor2 BYTE 20h
La directiva heredada DB puede definir también una variable de 8 bits, con o sin signo:
Dentro de una definición de datos individual, sus inicializadores pueden utilizar distintos tipos de
datos.
Cada carácter utiliza un byte de almacenamiento. Las cadenas son una excepción a la regla que
establece que los valores de bytes deben separarse por comas.
Una cadena puede distribuirse a través de varias líneas, sin tener que suministrar una etiqueta
para cada línea:
Los códigos hexadecimales 0Dh y 0Ah se llaman también CR/LF (retorno de carro/avance de
línea) o caracteres de fin de línea. Cuando se escriben en la salida estándar, desplazan el cursor
hacia la columna izquierda de la línea que sigue a la línea actual.
2.2.3.3 El operador DUP
Este operador asigna almacenamiento para varios elementos de datos, usando una expresión
constante como contador. Puede utilizarse con datos inicializados o sin inicializar:
Arreglo de palabras Para crear un arreglo de palabras se listan los elementos o se usa el
operador DUP. El siguiente arreglo contiene una lista de valores:
Arreglo de dobles palabras Para crear un arreglo de dobles palabras, se inicializa cada elemento
en forma explícita, o se utiliza el operador DUP. He aquí un arreglo que contiene valores sin
signo específicos:
miLista DWORD 1,2,3,4,5
val1 DT 1000000000123456789Ah
La siguiente tabla describe a cada uno de los tipos reales estándar, en términos de su número
mínimo de dígitos significativos y el rango aproximado:
.data
arregloPequenio DWORD 10 DUP(0) ; 40 bytes
.data?
arregloGrande DWORD 5000 DUP(?) ; 20,000 bytes sin inicializar
Por otro lado, el siguiente código produce un programa compilado que es 20,000 bytes más
grande:
.data
arregloPequenio DWORD 10 DUP(0) ; 40 bytes
arregloGrande DWORD 5000 DUP(?) ; 20,000 bytes
Mezcla de código y datos El ensamblador nos permite cambiar entre el código y los datos en
nuestros
programas. Por ejemplo, tal vez podríamos llegar a necesitar declarar una variable que se utilice
sólo dentro de un área localizada de un programa. El siguiente ejemplo inserta una variable
llamada temp entre dos instrucciones de código:
.code
mov eax,ebx
.data
temp DWORD ?
.code
mov temp,eax
...
Aunque temp parece interrumpir el flujo de las instrucciones ejecutables, MASM coloca a temp
en el segmento de datos, separada del segmento que guarda el código compilado.
Le mostraremos cómo utilizar la directiva de signo de igual (=) para crear símbolos que
representen expresiones enteras. Utilizaremos las directivas EQU y TEXTEQU para crear
símbolos que representen texto arbitrario.
Ejemplos:
Tecla_Esc = 27
CUENTA = 5
En el primer formato, expresión debe ser una expresión entera válida. En el segundo formato,
símbolo es el nombre de un símbolo existente, que ya se ha definido con o EQU. En el tercer
formato, puede aparecer cualquier texto dentro de los signos < y >. Cuando el ensamblador se
encuentra a nombre más adelante en el programa, sustituye el valor entero o el texto por ese
símbolo. EQU puede ser útil cuando se define un valor que no se evalúa como entero. Por
ejemplo, una constante numérica real puede definirse mediante EQU:
PI EQU <3.1416>
Ejemplo El siguiente ejemplo asocia un símbolo con una cadena de caracteres. Después puede
crearse una variable mediante el uso del símbolo:
Versión
Windows
Ejemplo No. 2
Ejemplo No. 3
Ejemplo No. 4
2.2.13.2 Entrada de datos
Ejemplo No. 5
Ejemplo No. 6
Ejemplo No. 7
Ejercicios