LENGUAJES DE INTERFAZ

UNIDAD 2 : PROGRAMACION BASICA
Unidad 2
• 2.1 Ensamblador (y ligador) a utilizar.
Programación básica
Lenguajes de programación
Binario: 10110000 01100001

(Hexadecimal: 0xb061)
MOV al, 061h
CÓDIGO
Esta instrucción significa;
Mueve el valor hexadecimal 61 (97 decimal)
al registro "al".
Lenguaje ensamblador
*El compilador se encarga de traducir los
mnemónicos a los códigos de operación.
*El linker (ligador) genera el programa
ejecutable, una vez compilado el programa
fuente.
*El programa editor crea el archivo de código
fuente
Ligador
Es un programa que enlaza todos los
programas o módulos obteniendo lo que
denominamos programa ejecutable.

Además incorporan las denominadas rutinas
de librerías en caso de solicitarlas el propio
programa.


La generación de un módulo ejecutable a
partir de una colección de procedimientos
traducidos independientemente requiere
un ligador.
2.2 Ciclos numéricos.
• Los ciclos permiten ejecutar un conjunto de
instrucciones varias veces hasta que se
cumpla una condición.

• El chequeo de la condición puede estar al
inicio o al final del ciclo, en caso de estar al
final hay que tener en cuenta que la
ejecución se va a efectuar al menos una vez.
En estos ciclos se utilizan los brincos
"condicionales" basados en el estado de las
banderas.
Por ejemplo la instrucción “jnz” que salta
solamente si el resultado de una operación
es diferente de cero y la instrucción “jz” que
salta si el resultado de la operación es cero.


2.3CAPTURA BASICA DE CADENAS



Instrucciones para cadenas

Operaciones para cadenas: LODS,
STOS, MOVS, CMPS, SCAS, INS, OUTS.
LODS: : LOaD String lee un carácter a la
vez en el acumulador
• Operación auxiliar: CLD (auto-incrementa SI y/o DI) STD (auto-
decrementa SI y/o DI)

Registros implicados: registros que debe inicializar antes de usar la instrucción
Bit-D: Auto-decremento (STD) o Auto-incremento (CLD) de SI
AL/AX/EAX: Dato consultado LODSB usa AL, LODSW usa AX, LODSW usa EAX
DS:SI: Apunta al elemento actual de la cadena consultada.
Operación Equivalente
LODSB
MOV AL, DS:[SI]
INC SI
LODSW
MOV AX, DS:[SI]
ADD SI,2
VARIANTES DE LODSB
STOS: STOre String. Graba un carácter de una
cadena a la vez
• 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 consultado. STOSB usa AL, STOSW usa AX, STOSW usa EAX
• ES:DI: Apunta al elemento actual del bloque de memoria a grabar

Operación Equivalente
STOSB
MOV ES:[DI], AL
INC DI
STOSW
MOV ES:[DI], AX
ADD DI,2
VARIANTES DE STOSB
SCAS: SCAn String. Busca valor del acumulador en
la cadena

• 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: índice para la cadena donde se busca el dato.
Operación Equivalente
SCASB
CMP AL, ES:[DI]
INC DI
SCASW
CMP AX, ES:[DI]
ADD DI,2
VARIANTES DE SCAS
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, 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 índice para la cadena que buscara el dato
• CX: máximo numero de comparaciones = tamaño de la cadena

Operación Equivalente
REPE SCASB
CYCLE: CMP AL, ES:[DI]
JE END
INC DI
LOOP CYCLE
REPNE SCASB
CYCLE: CMP AL, ES:[DI]
JNE END

INC DI
LOOP CYCLE
VARIANTES DE REP SCAS
MOVS: MOVe String. Transfiere una cadena de (SI) a (DI).
Nota: existe MOVBS, MOVSW y MOVSD. Además, no se
modifica el registro AX.

• 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 índice para la cadena origen
• ES: DI índice para la cadena origen

Operación Equivalente
MOVSB
MOV ES:[DI], DS:[SI]
INC SI
INC DI
MOVSW
MOV ES:[DI], DS:[SI]
ADD SI,2
ADD DI,2
VARIANTES DE MOVSB
REP MOVS: copia una cadena en una sola 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: índice para la cadena origen
• ES: DI: índice para la cadena origen
• CX: tamaño de la cadena

Operación Equivalente
REP MOVSB
CICLO: MOV ES:[DI], DS:[SI]
INC SI
INC DI
LOOP CICLO
VARIANTES DE REP MOVSB
2.4 Comparación y Prueba en lenguaje ensamblador

Instrucciones de comparación y prueba
Existen dos instrucciones especiales en el microprocesador 8086: CMP y
TEST. CMP (Comparar) compara si dos valores son iguales o diferentes. Su
funcionamiento es similar al de la instrucción SUB (restar), sólo que no
modifica el operando de destino, solamente modifica las banderas de signo
(SF), de cero (ZF) y de acarreo (CF).
Por ejemplo:
CMP AX,1235
Esta instrucción compara si el valor almacenado en el registro AX es igual
que el valor 1235 en decimal.
Por otro lado, la instrucción TEST realiza la operación AND de los
operandos especificados sin que el resultado se almacene en algún
registro, modificando únicamente ciertas banderas. Su aplicación más
común es la de probar si algún bit es cero.
Ejemplo:
Test AL,1
Esta instrucción prueba si el bit menos significativo de AL es 1 y
Test AL,128 prueba si el bit más significativo de AL es 1.
Por lo general estas instrucciones van seguidas de alguna de las
instrucciones de salto, las cuales se estudian en otra sección.
Iteraciones.
Con los saltos condicionales y no condicionales se pueden crear estructuras de
iteración bastante complejas, aunque existen instrucciones específicas para ello
tal como loop.

CUENTA: DW, 100
.
..
MOV CX, CUENTA
ITERA:
.
.
LOOP ITERA

El bloque de instrucciones que se encuentra entre la etiqueta ITERA y la
instrucción loop será ejecutado hasta el registro CX sea igual a 0 cada vez que
se ejecuta la instrucción loop p, el registro CX es decrementado en 1 hasta
llegar a 0. Esta instrucción tiene la limitante de que debe encontrarse en el rango
de +128 a –127 ( máximo número de bytes entre ITERA y loop)
Un ciclo, conocido también como iteración, es la
repetición de un proceso un cierto número de veces
hasta que alguna condición se cumpla. En estos ciclos
se utilizan los brincos "condicionales" basados en el
estado de las banderas. Por ejemplo la
instrucción jnz que salta solamente si el resultado de
una operación es diferente de cero y la instrucción jz que
salta si el resultado de la operación es cero.

Las comparaciones con signo van de acuerdo con la interpretación que
usted le
quiera dar a los bytes o palabras de su programa. Por ejemplo, suponga que
tiene un byte cuyo valor es 11111111 en binario y que desea compararlo con
otro cuyo valor es 00000000. ¿Es 11111111 mayor que 00000000? SÍ y NO
eso depende de la interpretación que usted le quiera dar. Si trabaja con
números enteros sin signo SÍ LO SERÁ, pues 255 es mayor que 0. Por el
contrario, si tiene signo entonces SERÁ MENOR puesto que –1 es siempre
menor que 0.
Lo anterior lleva a seleccionar las instrucciones de comparación y de salto
de
acuerdo con la interpretación que se les dé a los bytes o palabras; reflexione
sobre este punto


El ensamblador permite usar una variedad de instrucciones
de salto que transfieren el control dependiendo de las
configuraciones en el registro de banderas. Por ejemplo
puede comprobar dos campos y después saltar de acuerdo
con los valores de las banderas que la comparación
establece.
El formato condicional para el salto condicional es: