Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MÉXICO
Instituto tecnológico de Lázaro Cardenas
UNIDAD II
Programación básica
Integrantes
Javier Garcia Diaz
Jesus Adrian Trejo Perez
2.1 Ensamblador (y ligador) a utilizar
Aunque todos los ensambladores realizan básicamente las mismas tareas, podemos
clasificarlos de acuerdo a características.
Ensambladores Residentes.
Son aquellos que permanecen en la memoria
principal de la computadora y cargan, para su
ejecución, al programa objeto producido. Este tipo
de ensamblador tiene la ventaja de que se puede
comprobar inmediatamente el programa sin
necesidad de transportarlo de un lugar a otro, como
se hacía en cross-assembler, y sin necesidad de
programas simuladores.
Macroensambladores
Microensambladores
mov cx,25 : Número de veces que se repetirá el ciclo, en este caso 25.
int 21h: Instrucción contenida dentro del ciclo (puede contener más de una
instrucción).
loop: Ciclo loop que transferirá el control a la línea de la etiqueta ciclo en caso
de que CX no sea cero.
LOOPE
Esta función decrementa el valor del registro contador CX, si el valor contenido en
CX es cero y ZF es diferente de uno ejecuta la siguiente instrucción, en caso
contrario transfiere el control a la ubicación definida por la etiqueta utilizada al
momento de declarar el ciclo.
Ejemplo:
•int 21h: Instrucción contenida dentro del ciclo (puede contener más de una
instrucción).
•loope: Ciclo loope que transferirá el control a la línea de la etiqueta ciclo en caso
de que CX no sea cero y ZF sea igual a uno.
LOOPNE
Esta función decrementa el valor del registro contador CX, si el valor contenido en
CX es cero y ZF es diferente de cero ejecuta la siguiente instrucción, en caso
contrario transfiere el control a la ubicación definida por la etiqueta utilizada al
momento de declarar el ciclo, esta es la operación contraria a loope.
Ejemplo:
•int 21h: Instrucción contenida dentro del ciclo (puede contener más de una
instrucción).
•loopne: Ciclo loopne que transferirá el control a la línea de la etiqueta ciclo en caso
de que CX no sea cero y ZF sea igual a cero.
LOOPZ
Esta función decrementa el valor del registro contador CX, si el valor contenido en CX
es cero y ZF es diferente de uno ejecuta la siguiente instrucción, en caso contrario
transfiere el control a la ubicación definida por la etiqueta utilizada al momento de
declarar el ciclo.
Ejemplo:
•int 21h: Instrucción contenida dentro del ciclo (puede contener más de una
instrucción).
•loopz: Ciclo loopz que transferirá el control a la línea de la etiqueta ciclo en caso de
que CX no sea cero y ZF sea igual a uno.
LOOPNZ
Esta función decrementa el valor del registro contador CX, si el valor contenido en CX es
cero y ZF es diferente de cero ejecuta la siguiente instrucción, en caso contrario transfiere
el control a la ubicación definida por la etiqueta utilizada al momento de declarar el ciclo,
esta es la operación contraria a loopz.
Ejemplo:
loopnz: Ciclo loopnz que transferirá el control a la línea de la etiqueta ciclo en caso
de que CX no sea cero y ZF sea igual a cero.
Ejemplo Video
2.3 Captura básica de cadenas
Dentro del lenguaje ensamblador no existe el tipo de dato cadena (string en otros
lenguajes), por lo que para utilizarla es necesario tratar a las cadenas como un conjunto
de caracteres reservados bajo el nombre de una sola variable.
El lenguaje ensamblador cuenta con instrucciones que por su naturaleza sirven para el
manejo de cadenas, estas son:
MOVSB:
Mueve un byte desde una localidad de memoria hasta otra.
MOVSW:
Mueve una palabra desde una localidad de memoria hasta otra.
LODSB:
Carga en la parte baja del registro acumulador (AL) el valor de la localidad de memoria
determinada por DS:SI.
LODSW:
Carga en el registro acumulador (AX) el valor de la localidad de memoria determinada
por DS:SI.
Ejemplo video
2.4 Comparación y prueba
La instrucción CMP pro lo común es utilizada para comparar dos campos de
datos, uno de los cuales están contenidos en un registro.
El formato general para CMP es:
Pero observe que CMPS proporciona una comparación alfanumérica, esto es,
una comparación de acuerdo a con los valores ASCII. Considere la comparación
de dos cadenas que contienen JEAN y JOAN
IN WORD PTR
Incrementa la palabra situada en CS.
Instrucción DEC
DEC Ax
Decremento AX, le resta uno.
Operación Auxiliar: CLD (Auto-incrementa SI y/o DI), STD (Auto-decrementa SI y/o DI)
AL/AX/EAX: Dato consultado. LODSB usa AL, LODSW usa AX, LODSW usa
EAX
AL/AX/EAX: Dato consultado. STOSB usa AL, STOSW usa AX, STOSW usa EAX
AL/AX/EAX: Dato a comparar. SCASB usa AL, SCASW usa AX, SCASW usa EAX
REP SCAS: REPite búsqueda de un dato mientras sea diferente (REPNE) o igual (REPE) en una
cadena. Termina búsqueda si el dato es igual (REPNE), diferente (REPE) o el contador CX es cero
Registros Implicados: Registros que debe inicializar antes de usar la instrucción
Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI
AL/AX/EAX: Dato a comparar. SCASB usa AL, SCASW usa AX, SCASW usa EAX
ES:DI: Indice para la cadena donde se buscará el dato
CX: Máximo no. comparaciones = Tamaño de la cadena
MOVS
MOVe String. Transfiere una cadena de [SI] a [DI]. Nota: Existe MOVSB, MOVSW y MOVSD. Además, no
se modifica el registro AX
REP MOVS: Copia una cadena en una sóla instrucción. El número de caracteres a copiar se
especifica en el registro CX.
Registros Implicados: Registros que debe inicializar antes de usar la instrucción
Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de SI/DI
DS:SI: Indice para la cadena origen
ES:DI: Indice para la cadena origen
CX: Tamaño de la cadena
2.13 Desplazamiento y rotación
Las instrucciones de corrimiento, que son parte de la capacidad lógica de la
computadora, pueden realizar las siguientes acciones:
3. Recorre hasta 8 bits en un byte, 16 bits en una palabra y 32 bits en una palabra
doble.
0010 = 2; 1011 = 11
Pero como no podemos representar este número hexadecimal como 211
porqué sería un error, tenemos que sustituir todos los valores mayores a 9 por
su respectiva representación en hexadecimal, con lo que obtenemos:
2.5 https://www.youtube.com/watch?v=Ng4YEb2Jtcg
2.6 https://www.youtube.com/watch?v=0hl5HPRF-ng
2.7 https://www.youtube.com/watch?v=9D8uz32uxIk
2.8 https://www.youtube.com/watch?v=uY3_zHAnmTk
2.13
2.14
2.15
2.16