Sei sulla pagina 1di 24

LENGUAJES DE INTERFAZ

UNIDAD 2 : PROGRAMACION BASICA


Unidad 2
2.1 Ensamblador (y ligador) a utilizar.
Programacin bsica
Lenguajes de programacin
Binario: 10110000 01100001

(Hexadecimal: 0xb061)
MOV al, 061h
CDIGO
Esta instruccin significa;
Mueve el valor hexadecimal 61 (97 decimal)
al registro "al".
Lenguaje ensamblador
*El compilador se encarga de traducir los
mnemnicos a los cdigos de operacin.
*El linker (ligador) genera el programa
ejecutable, una vez compilado el programa
fuente.
*El programa editor crea el archivo de cdigo
fuente
Ligador
Es un programa que enlaza todos los
programas o mdulos obteniendo lo que
denominamos programa ejecutable.

Adems incorporan las denominadas rutinas
de libreras en caso de solicitarlas el propio
programa.


La generacin de un mdulo ejecutable a
partir de una coleccin de procedimientos
traducidos independientemente requiere
un ligador.
2.2 Ciclos numricos.
Los ciclos permiten ejecutar un conjunto de
instrucciones varias veces hasta que se
cumpla una condicin.

El chequeo de la condicin puede estar al
inicio o al final del ciclo, en caso de estar al
final hay que tener en cuenta que la
ejecucin 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 instruccin jnz que salta
solamente si el resultado de una operacin
es diferente de cero y la instruccin jz que
salta si el resultado de la operacin 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 carcter a la
vez en el acumulador
Operacin 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 instruccin
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.
Operacin Equivalente
LODSB
MOV AL, DS:[SI]
INC SI
LODSW
MOV AX, DS:[SI]
ADD SI,2
VARIANTES DE LODSB
STOS: STOre String. Graba un carcter de una
cadena a la vez
Registros implicados: registros que debe inicializar antes de usar la instruccin
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

Operacin 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
instruccin
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.
Operacin Equivalente
SCASB
CMP AL, ES:[DI]
INC DI
SCASW
CMP AX, ES:[DI]
ADD DI,2
VARIANTES DE SCAS
REP SCAS: REPite bsqueda de un dato mientras sea diferente
(REPNE) o igual (REPE) en una cadena. Termina bsqueda si el dato
es igual, diferente (REPE), o el contador CX es cero
Registros implicados: registros que debe inicializar antes de usar la instruccin
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: mximo numero de comparaciones = tamao de la cadena

Operacin 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. Adems, no se
modifica el registro AX.

Registros implicados: registros que debe inicializar antes de usar la
instruccin
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

Operacin 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 instruccin. El
nmero de caracteres a copiar se especifica en el registro
CX
Registros implicados: registros que debe inicializar antes de usar la
instruccin
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: tamao de la cadena

Operacin Equivalente
REP MOVSB
CICLO: MOV ES:[DI], DS:[SI]
INC SI
INC DI
LOOP CICLO
VARIANTES DE REP MOVSB
2.4 Comparacin y Prueba en lenguaje ensamblador

Instrucciones de comparacin 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 instruccin SUB (restar), slo 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 instruccin compara si el valor almacenado en el registro AX es igual
que el valor 1235 en decimal.
Por otro lado, la instruccin TEST realiza la operacin AND de los
operandos especificados sin que el resultado se almacene en algn
registro, modificando nicamente ciertas banderas. Su aplicacin ms
comn es la de probar si algn bit es cero.
Ejemplo:
Test AL,1
Esta instruccin prueba si el bit menos significativo de AL es 1 y
Test AL,128 prueba si el bit ms 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 seccin.
Iteraciones.
Con los saltos condicionales y no condicionales se pueden crear estructuras de
iteracin bastante complejas, aunque existen instrucciones especficas 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
instruccin loop ser ejecutado hasta el registro CX sea igual a 0 cada vez que
se ejecuta la instruccin loop p, el registro CX es decrementado en 1 hasta
llegar a 0. Esta instruccin tiene la limitante de que debe encontrarse en el rango
de +128 a 127 ( mximo nmero de bytes entre ITERA y loop)
Un ciclo, conocido tambin como iteracin, es la
repeticin de un proceso un cierto nmero de veces
hasta que alguna condicin se cumpla. En estos ciclos
se utilizan los brincos "condicionales" basados en el
estado de las banderas. Por ejemplo la
instruccin jnz que salta solamente si el resultado de
una operacin es diferente de cero y la instruccin jz que
salta si el resultado de la operacin es cero.

Las comparaciones con signo van de acuerdo con la interpretacin 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 interpretacin que usted le quiera dar. Si trabaja con
nmeros 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 comparacin y de salto
de
acuerdo con la interpretacin 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 despus saltar de acuerdo
con los valores de las banderas que la comparacin
establece.
El formato condicional para el salto condicional es:

Potrebbero piacerti anche