of 35
8/9/2019 Instrucciones Del Programa
1/35
Instrucciones Del Programa
Equipo 7Equipo 7
Villanueva Martnez Yesenia NallelyVillanueva Martnez Yesenia Nallely
Olvera Hernndez MaribelOlvera Hernndez MaribelAcevedo Chvez Jos ErnestoAcevedo Chvez Jos Ernestovila Puente Tomas Eduardovila Puente Tomas Eduardo
Ortiz Alvarado Francisco JavierOrtiz Alvarado Francisco Javier
Romero lvarez AntonioRomero lvarez Antonio
8/9/2019 Instrucciones Del Programa
2/35
Instrucciones de transferencia Son utilizadas paramover los contenidos de los operandos. Cadainstruccin se puede usar con diferentes modos dedireccionamiento.
MOVMOVS (MOVSB) (MOVSW) Instrucciones de carga Son instrucciones especficas de
los registros. Son usadas para cargar en algo en registrobytes o cadenas de bytes.
LODS (LODSB) (LODSW)LAHFLDSLEALES
Instrucciones de la pila Estas instrucciones permiten eluso de la pila para almacenar y extraer datos.POPPOPFPUSHPUSHF
8/9/2019 Instrucciones Del Programa
3/35
Instruccin MOV
Propsito: Transferencia de datos entre celdas de memoria, registrosy acumulador.
Sintaxis:MOV Destino,Fuente
Donde Destino es el lugar a donde se movern los datos y fuente esel lugar donde se encuentran dichos datos.
Los diferentes movimientos de datos permitidos para estainstruccin son:
Destino: memoria. Fuente: acumulador Destino: acumulador. Fuente: memoria Destino: registro de segmento. Fuente: memoria/registro Destino: memoria/registro. Fuente: registro de segmento Destino: registro. Fuente: registro Destino: registro. Fuente: memoria Destino: memoria. Fuente: registro Destino: registro. Fuente: dato inmediato Destino: memoria. Fuente: dato inmediato
8/9/2019 Instrucciones Del Programa
4/35
Ejemplo:
MOV AX,0006hMOV BX,AXMOV AX,4C00hINT 21H
Este pequeo programa mueve el valor 0006Hal registro AX, luego mueve el contenido deAX (0006h) al registro BX, por ltimo mueve
el valor 4C00h al registro AX para terminar laejecucin con la opcin 4C de la interrupcin21h.
8/9/2019 Instrucciones Del Programa
5/35
Instruccin MOVS (MOVSB) (MOVSW)
Propsito: Mover cadenas de bytes o palabras desde la fuente,direccionada por SI, hasta el destino direccionado por DI.
Sintaxis:MOVS
Este comando no necesita parametros ya que toma como direccinfuente el contenido del registro SI y como destino el contenido
de DI. La secuencia de instrucciones siguiente ilustran esto:
MOV SI, OFFSET VAR1MOV DI, OFFSET VAR2MOVS
Primero inicializamos los valores de SI y DI con las direcciones delas variables VAR1 y VAR2 respectivamente, despues al ejecutarMOVS se copia el contenido de VAR1 a VAR2.
Los comandos MOVSB y MOVSW se utilizan de la misma forma queMOVS, el primero mueve un byte y el segundo una palabra.
8/9/2019 Instrucciones Del Programa
6/35
Instruccin LODS (LODSB) (LODSW)
Propsito: Cargar cadenas de un byte o palabra al acumulador.
Sintaxis:LODS
Esta instruccin toma la cadena que se encuentre en la direccinespecificada por SI, la carga al registro AL (o AX) y suma o resta
1 (segn el estado de DF) a SI si la transferencia es de bytes o 2si la transferencia es de palabras.
MOV SI, OFFSET VAR1LODS
La primer linea carga la direccin de VAR1 en SI y la segunda lnealleva el contenido de esa localidad al registro AL.
Los comandos LODSB y LODSW se utilizan de la misma forma, elprimero carga un byte y el segundo una palabra (utiliza elregistro completo AX).
8/9/2019 Instrucciones Del Programa
7/35
Instruccin LAHF
Propsito: Transfiere al registro AH el contenido de las
banderasSintaxis:LAHF
Esta instruccin es til para verificar el estado de lasbanderas durante la ejecucin de nuestro programa.
Las banderas quedan en el siguiente orden dentro delregistro:
SF ZF ? AF ? PF ? CF
El smbolo "?" significa que en esos bits habr. un valorindefinido.
8/9/2019 Instrucciones Del Programa
8/35
Instruccin LDS
Propsito: Cargar el registro del segmento de datos
Sintaxis:LDS destino, fuente
El operando fuente debe ser una palabra doble enmemoria. La palabra asociada con la direccinmas grande es transferida a DS, o sea que setoma como la direccin del segmento. La palabra
asociada con la direccin menor es la direccindel desplazamiento y se deposita en el registrosealado como destino.
8/9/2019 Instrucciones Del Programa
9/35
Instruccin LEA
Propsito: Carga la direccin del operando fuente.
Sintaxis:LEA destino, fuente
El operando fuente debe estar ubicado en memoria, y se colocasu desplazamiento en el registro ndice o apuntador
especificado en destino.
Para ilustrar una de las facilidades que tenemos con estecomando pongamos una equivalencia:
MOV SI, OFFSET VAR1
Equivale a:LEA SI, VAR1
Es muy probable que para el programador sea mas sencillo crearprogramas extensos utilizando este ltimo formato.
8/9/2019 Instrucciones Del Programa
10/35
Instruccin LES
Propsito: Carga el registro del segmento extraSintaxis:LES destino, fuente
El operando fuente debe ser un operando enmemoria de palabra doble. El contenido de lapalabra con la direccin mayor se interpretacomo la direccin del segmento y se coloca en
ES. La palabra con la direccin menor es ladireccin del desplazamiento y se coloca en elregistro especificado en el parmetro destino
8/9/2019 Instrucciones Del Programa
11/35
Instruccin POP
Propsito: Recupera un dato de la pila
Sintaxis:POP destino
Esta instruccin transfiere el ltimo valor almacenado
en la pila al operando destino, despus incrementaen dos el registro SP.
Este incremento se debe a que la pila va creciendodesde la direccin mas alta de memoria delsegmento hacia la mas baja, y la pila solo trabajacon palabras (2 bytes), entonces al incrementar endos el registro SP realmente se le esta restando dosal tamao real de la pila.
8/9/2019 Instrucciones Del Programa
12/35
Instruccin POPF
Propsito: Extrae las banderas almacenadas en la pila.
Sintaxis:POPF
Este comando transfiere bits de la palabra almacenada en la parte superiorde la pila hacia el registro de banderas.
La forma de transferencia es la siguiente:BIT BANDERA
0 CF2 PF4 AF6 ZF7 SF8 TF
9 IF10 DF11 OF
Estas localizaciones son las mismas para el comando PUSHFUna vez hecha la transferencia se incrementa en 2 el registro SP
disminuyendo as el tamao de la pila.
8/9/2019 Instrucciones Del Programa
13/35
Instruccin PUSH
Propsito: Coloca una palabra en la pila.
Sintaxis:PUSH fuente
La instruccin PUSH decrementa en dos el valor de SP yluego transfiere el contenido del operando fuente a lanueva direccin resultante en el registro recinmodificado.
El decremento en la direccin se debe a que al agregarvalores a la pila sta crece de la direccin mayor a ladireccin menor del segmento, por lo tanto al restarle 2al valor del registro SP lo que hacemos es aumentar eltamao de la pila en dos bytes, que es la nica cantidadde informacin que puede manejar la pila en cadaentrada y salida de datos.
8/9/2019 Instrucciones Del Programa
14/35
Instruccin PUSHF
Propsito: Coloca el valor de las banderas en la pila
Sintaxis:PUSHF
Este comando decrementa en 2 el valor del registro SP yluego se transfiere el contenido del registro de banderasa la pila, en la direccin indicada por SP.
Las banderas quedan almacenadas en memoria en losmismos bits indicados en el comando POPF
8/9/2019 Instrucciones Del Programa
15/35
Instrucciones lgicas. Son utilizadas para realizar operacioneslgicas sobre los operandos.
AND
NEGNOTOR
TESTXORInstrucciones aritmticas. Se usan para realizar operaciones
aritmticas sobre los operandos.ADCADDDIVIDIV
MULIMULSBBSUB
8/9/2019 Instrucciones Del Programa
16/35
Instruccin AND
Propsito: Realiza la conjuncin de los operandos bit porbit.
Sintaxis:AND destino, fuente
Con esta instruccin se lleva a cabo la operacin "y" lgica
de los dos operandos:Fuente Destino | Destino
--------------------------1 1 | 11 0 | 0
0 1 | 00 0 | 0
El resultado de la operacin se almacena en el operandodestino.
8/9/2019 Instrucciones Del Programa
17/35
Instruccin NEGPropsito: Genera el complemento a 2
Sintaxis:NEG destino
Esta instruccin genera el complemento a 2 del operandodestino y lo almacena en este mismo operando. Porejemplo, si AX guarda el valor de 1234H, entonces:
NEG AXNos dejara almacenado en el registro AX el valor EDCCH.
Instruccin NOTPropsito: Lleva a cabo la negacin bit por bit del operando
destino.
Sintaxis:NOT destino
El resultado se guarda en el mismo operando destino.
8/9/2019 Instrucciones Del Programa
18/35
Instruccin ORPropsito: OR inclusivo lgicoSintaxis: OR destino, fuente
La instruccin OR lleva a cabo, bit por bit, la disyuncin inclusiva lgicade los dos operandos:Fuente Destino | Destino
--------------------------1 1 | 11 0 | 1
0 1 | 10 0 | 0
Instruccin TESTPropsito: Comparar lgicamente los operandosSintaxis: TEST destino, fuente
Realiza una conjuncin, bit por bit, de los operandos, pero a diferenciade AND esta instruccin no coloca el resultado en el operandodestino, solo tiene efecto sobre el estado de las banderas.
8/9/2019 Instrucciones Del Programa
19/35
Instruccin XORPropsito: OR exclusivoSintaxis: XOR destino, fuente
Su funcin es efectuar bit por bit la disyuncin exclusiva lgica de losdos operandos.Fuente Destino | Destino
--------------------------1 1 | 00 0 | 10 1 | 10 0 | 0
Instruccin ADCPropsito: Adicin con acarreo.Sintaxis: ADC destino, fuente
Lleva a cabo la suma de dos operandos y suma uno al resultado en casode que la bandera CF est activada, esto es, en caso de que existaacarreo. El resultado se guarda en el operando destino.
8/9/2019 Instrucciones Del Programa
20/35
Instruccin ADDPropsito: Adicin de los operandos.Sintaxis: ADD destino, fuente
Suma los dos operandos y guarda el resultado en el operando destino.
Instruccin DIVPropsito: Divisin sin signoSintaxis: DIV fuenteEl divisor puede ser un byte o palabra y es el operando que se le da a la
instruccin.
Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits AX y si eldivisor es de 16 bits se tomara como dividendo el registro par DX:AX, tomandocomo palabra alta DX y como baja AX.
Si el divisor fue un byte el cociente se almacena en el registro AL y el residuo enAH, si fue una palabra el cociente se guarda en AX y el residuo en DX.
8/9/2019 Instrucciones Del Programa
21/35
Instruccin IDIVPropsito: Divisin con signoSintaxis: IDIV fuente
Consiste bsicamente en lo mismo que la instruccin DIV, solo que esta ltimarealiza la operacin con signo. Para sus resultados utiliza los mismos registrosque la instruccin DIV.
Instruccin MULPropsito: Multiplicacin sin signoSintaxis:MUL fuente
El ensamblador asume que el multiplicando ser del mismo tamao que el delmultiplicador, por lo tanto multiplica el valor almacenado en el registro que sele da como operando por el que se encuentre contenido en AH si elmultiplicador es de 8 bits o por AX si el multiplicador es de 16 bits.
Cuando se realiza una multiplicacin con valores de 8 bits el resultado sealmacena en el registro AX y cuando la multiplicacin es con valores de 16 bits
el resultado se almacena en el registro par DX:AX.
8/9/2019 Instrucciones Del Programa
22/35
Instruccin IMULPropsito: Multiplicacin de dos enteros con signo.Sintaxis: IMUL fuente
Este comando hace lo mismo que el anterior, solo que si toma en cuenta los signosde las cantidades que se multiplican.
Los resultados se guardan en los mismos registros que en la instruccin MUL.
Instruccin SBBPropsito: Substraccin con acarreoSintaxis: SBB destino, fuente
Esta instruccin resta los operandos y resta uno al resultado si CF est activada. Eloperando fuente siempre se resta del destino.
Este tipo de substraccin se utiliza cuando se trabaja con cantidades de 32 bits.
Instruccin SUBPropsito: SubstraccinSintaxis: SUB destino, fuente
Resta el operando fuente del destino.
8/9/2019 Instrucciones Del Programa
23/35
Instrucciones de salto Son utilizadas para transferir el flujo delproceso al operando indicado.
JMPJA (JNBE)
JAE (JNBE)JB (JNAE)JBE (JNA)JE (JZ)JNE (JNZ)JG (JNLE)JGE (JNL)
JL (JNGE)JLE (JNG)JCJNCJNOJNP (JPO)
JNSJOJP (JPE)JS
8/9/2019 Instrucciones Del Programa
24/35
Instrucciones para ciclos: LOOP Transfieren el flujo del proceso, condicional oincondicionalmente, a un destino repitindose esta accin hasta que el contador seacero.
LOOPLOOPELOOPNE
Instrucciones de conteo Se utilizan para decrementar o incrementar el contenido de loscontadores.
DECINC
Instrucciones de comparacin Son usadas para comparar operandos, afectan alcontenido de las banderas.
CMPCMPS (CMPSB) (CMPSW)
Instrucciones de banderas Afectan directamente al contenido de las banderas.CLCCLDCLICMC
STCSTDSTI
8/9/2019 Instrucciones Del Programa
25/35
Instruccin JMPPropsito: Salto incondicionalSintaxis:JMP destinoEsta instruccin se utiliza para desviar el flujo de un programa sin tomar
en cuenta las condiciones actuales de las banderas ni de los datos.
Instruccin JA (JNBE)Propsito: Brinco condicionalSintaxis:JA EtiquetaDespus de una comparacin este comando salta si est arriba o salta si
no est abajo o si no es igual.
Esto significa que el salto se realiza solo si la bandera CF estadesactivada o si la bandera ZF esta desactivada (que alguna de lasdos sea igual a cero).
Instruccin JAE (JNB)Propsito: salto condicionalSintaxis:JAE etiquetaSalta si est arriba o si es igual o salta si no est abajo.El salto se efecta si CF esta desactivada.
8/9/2019 Instrucciones Del Programa
26/35
Instruccin JB (JNAE)Propsito: salto condicionalSintaxis:JB etiquetaSalta si est abajo o salta si no est arriba o si no es igual.
Se efecta el salto si CF esta activada.
Instruccin JBE (JNA)Propsito: salto condicionalSintaxis:JBE etiquetaSalta si est abajo o si es igual o salta si no est arriba.
El salto se efecta si CF est activado o si ZF est activado (quecualquiera sea igual a 1).
Instruccin JE (JZ)Propsito: salto condicionalSintaxis:JE etiquetaSalta si es igual o salta si es cero.
El salto se realiza si ZF est activada.
8/9/2019 Instrucciones Del Programa
27/35
Instruccin JNE (JNZ)Propsito: salto condicionalSintaxis:JNE etiquetaSalta si no es igual o salta si no es cero.
El salto se efecta si ZF est desactivada.
Instruccin JG (JNLE)Propsito: salto condicional, se toma en cuenta el signo.Sintaxis:JG etiquetaSalta si es ms grande o salta si no es menor o igual.El salto ocurre si ZF = 0 u OF = SF.
Instruccin JGE (JNL)Propsito: salto condicional, se toma en cuenta el signo.Sintaxis:JGE etiqueta
Salta si es ms grande o igual o salta si no es menor que.El salto se realiza si SF = OF
8/9/2019 Instrucciones Del Programa
28/35
Instruccin JL (JNGE)Propsito: salto condicional, se toma en cuenta el signo.Sintaxis:JL etiquetaSalta si es menor que o salta si no es mayor o igual.El salto se efecta si SF es diferente a OF.
Instruccin JLE (JNG)Propsito: salto condicional, se toma en cuenta el signo.Sintaxis:JLE etiquetaSalta si es menor o igual o salta si no es ms grande.
El salto se realiza si ZF = 1 o si SF es diferente a OF
Instruccin JCPropsito: salto condicional, se toman en cuenta las banderas.Sintaxis:JC etiquetaSalta si hay acarreo.
El salto se realiza si CF = 1
8/9/2019 Instrucciones Del Programa
29/35
Instruccin JNCPropsito: salto condicional, se toma en cuenta el estado de las banderas.Sintaxis:JNC etiquetaSalta si no hay acarreo.El salto se efecta si CF = 0.
Instruccin JNOPropsito: salto condicional, se toma en cuenta el estado de las banderas.Sintaxis:JNO etiquetaSalta si no hay desbordamiento.El salto se efectua si OF = 0.
Instruccin JNP (JPO)Propsito: salto condicional, toma en cuenta el estado de las banderas.Sintaxis:JNP etiquetaSalta si no hay paridad o salta si la paridad es non.El salto ocurre si PF = 0.
8/9/2019 Instrucciones Del Programa
30/35
Instruccin JNSPropsito: salto condicional, toma en cuenta el estado de las banderas.Sintaxis:JNP etiquetaSalta si el signo esta desactivado.El salto se efecta si SF = 0.
Instruccin JOPropsito: salto condicional, toma en cuenta el estado de las banderas.Sintaxis:JO etiquetaSalta si hay desbordamiento (overflow).El salto se realiza si OF = 1.
Instruccin JP (JPE)Propsito: salto condicional, toma en cuenta el estado de las banderas.Sintaxis:JP etiquetaSalta si hay paridad o salta si la paridad es par.El salto se efecta si PF = 1.
8/9/2019 Instrucciones Del Programa
31/35
Instruccin JSPropsito: salto condicional, toma en cuenta el estado de las banderas.Sintaxis:JS etiquetaSalta si el signo est prendido.El salto se efecta si SF = 1.
Instruccin LOOPPropsito: Generar un ciclo en el programa.Sintaxis: LOOP etiquetaLa instruccin loop decrementa CX en 1, y transfiere el flujo del programa a la
etiqueta dada como operando si CX es diferente a 1.
Instruccin LOOPEPropsito: Generar un ciclo en el programa considerando el estado de ZFSintaxis: LOOPE etiquetaEsta instruccin decrementa CX en 1. Si CX es diferente a cero y ZF es igual a 1,
entonces el flujo del programa se transfiere a la etiqueta indicada comooperando.
8/9/2019 Instrucciones Del Programa
32/35
Instruccin LOOPNEPropsito: Generar un ciclo en el programa, considerando el
estado de ZFSintaxis: LOOPNE etiquetaEsta instruccin decrementa en uno a CX y transfiere el flujo del
programa solo si ZF es diferente a 0.
Instruccin DECPropsito: Decrementar el operando
Sintaxis: DEC destinoEsta operacin resta 1 al operando destino y almacena el nuevovalor en el mismo operando.
Instruccin INCPropsito: Incrementar el operando.
Sintaxis: INC destinoLa instruccin suma 1 al operando destino y guarda el resultadoen el mismo operando destino.
8/9/2019 Instrucciones Del Programa
33/35
Instruccin CMPPropsito: Comparar los operandos.Sintaxis: CMP destino, fuente
Esta instruccin resta el operando fuente al operando destino pero sin que ste
almacene el resultado de la operacin, solo se afecta el estado de lasbanderas.
Instruccin CMPS (CMPSB) (CMPSW)Propsito: Comparar cadenas de un byte o palabra.Sintaxis: CMP destino, fuenteCon esta instruccin la cadena de caracteres fuente se resta de la cadena destino.
Se utilizan DI como indice para el segmento extra de la cadena fuente y SI comoindice de la cadena destino.
Solo se afecta el contenido de las banderas y tanto DI como SI se incrementan.
Instruccin CLCPropsito: Limpiar bandera de acarreo.
Sintaxis: CLCEsta instruccin apaga el bit correspondiente a la bandera de acarreo, o sea, lopone en cero.
I i CLD
8/9/2019 Instrucciones Del Programa
34/35
Instruccin CLDPropsito: Limpiar bandera de direccinSintaxis: CLD
La instruccin CLD pone en cero el bit correspondiente a la bandera de direccin.
Instruccin CLIPropsito: Limpiar bandera de interrupcinSintaxis: CLI
CLI pone en cero la bandera de interrupciones, desabilitando as aquellasinterrupciones enmascarables.
Una interrupcin enmascarable es aquella cuyas funciones son desactivadas
cuando IF = 0.Instruccin CMC
Propsito: Complementar la bandera de acarreo.Sintaxis: CMC
Esta instruccin complementa el estado de la bandera CF, si CF = 0 la instruccinla iguala a 1, y si es 1 la instruccin la iguala a 0.
Podemos decir que unicamente "invierte" el valor de la bandera.
8/9/2019 Instrucciones Del Programa
35/35
Instruccin STCPropsito: Activar la bandera de acarreo.Sintaxis: STC
Esta instruccin pone la bandera CF en 1.
Instruccin STDPropsito: Activar la bandera de direccin.Sintaxis: STD
La instruccin STD pone la bandera DF en 1.
Instruccin STIPropsito: Acticar la bandera de interrupcin.Sintaxis: STI
La instruccin activa la bandera IF, esto habilita las interrupcionesexternas enmascarables (las que funcionan unicamente cuando IF =1 ).