lunes, 12 de marzo de 2012

Instrucciones para lenguaje ensamblador


MOV Instrucción de Transferencia de Datos (MOVER DATOS)
1) No se permite transferencias de memoria a memoria
2) Los datos tienen que ser del mismo tamaño
3) El destino no puede ser dato inmediato
4) Después de la transferencia, destino y fuente son iguales
5) No se permite transferencia inmediata a REG. SEG.
Diferentes Opciones

a)   MOV  REG2(8) , REG1(8)
b)   MOV  REG2(16) , REG1(16)
c)   MOV  REG(8) , DATO INM(8)
d)   MOV  REG(16) , DATO INM(16)
e)   MOV  REG(8) , MEM(8)
f)   MOV MEM(8) , REG(8)
g)   MOV  REG(16) , MEM(16)
h)   MOV  MEM(16) , REG(16)
i)   MOV  MEM(8) , DATO INM(8)
j)   MOV  MEM(16) , DATO INM(16)

Para poder identificar el tamaño del dato inmediato que se traslada a memoria tenemos que escribir un prefijo antes de la dirección efectiva, siendo estos:

MOV  BYTE PTR  MEM(8), DI(8)
MOV  WORD PTR  MEM(16), DI(16)


Conceptos de Stack
D.R. = (SS*10) + SP
El  sistema de apilación utiliza la  técnica LIFO(last in first out), el últi-mo en  entrar, primero en salir.
SP   apunta  al  último dato válido en el stack de memoria.
El limite inferior es el valor inicial que se le propone a SP
El stack de memoria es un rango de localidades de memoria que permite al programador apilar datos de byte en byte.
Solo puede manejar datos de 16 bits (palabra) y es un almacenamiento temporal.
PUSH: METERAL STACK DE MEMORIA
POP: EXTRAER DEL STACK DE MEMORIA
PUSHF: METER EL REG. DE BANDERAS
POPF: SACAR  AL REG. DE BANDERAS




Instrucciones para operaciones de Suma
Destino y fuente son los operandos que manejan las instrucciones de suma para realizar la operacion correspondiente. ambos operandos pueden ser de 8 o de 16 bits.
ADD
operando   +   operando  = resultado en
 destino          fuente          destino
ADC
operando   +   operando  +   cf  = resultado en
 destino          fuente                    destino
Tanto los operandos como el resultado son manejados en hexadecimal. no se aplica para registros segmentos.
Destino y fuente son los operandos que manejaran las instrucciones de resta para realizar la operacion correspondiente. ambos operandos pueden ser de 8 o de 16 bits.
SUB
OPERANDO   -   OPERANDO  = RESULTADO EN
 DESTINO          FUENTE          DESTINO
SBB
OPERANDO   -   OPERANDO  -   CF  = RESULTADO EN
 DESTINO          FUENTE                    DESTINO
tanto los operandos como el resultado son manejados en hexadecimal. no se aplica para registros segmentos.
Ajuste Decimal
el ajuste decimal  sirve para poder cambiar el resultado hexadecimal que producen las instrucciones de suma y resta a cantidades decimales (del 0 al 9), por ejemplo:
Si sumamos las cantidades de 7 y 5, la instrucción ADD obtendrá el resultado de “0C“, pero si queremos cambiarlo a decimal, aplicamos una instrucción de ajuste decimal y lo que se obtiene es la cantidad de "12".
es opcional el ajuste decimal, si es que se desea un resultado decimal, ya que son independientes de las instrucciones aritmeticas. por eso se manejan en forma separada y simpre despues de las operacion aritmetica.
Ajuste Decimal
Una clase de ajuste decimal es del tipo EMPAQUETADO que considera a cada byte dividido en dos nibbles y cada nibble representa un valor numérico del 0 a 9.
Solo se aplica este tipo de ajuste para las operaciones de suma  y resta.
Los requerimientos para el ajuste decimal empaquetado son:
Uno de los operándos debe de ser registro “AL”, ya que el ajuste solo se maneja en BYTE, por lo tanto, al realizar la instrucción aritmética el operando destino debe ser “AL”, por ejemplo:
ADD  AL,BL
Otro requisito es que los dos operándos tienen que ser dígitos numéricos (del 0 al 9). No se garantiza el ajuste si se aplican dígitos alfabéticos (del A al F), por ejemplo:
34    01  72  28 à  SI
1F  B8  DD  9E à  NO
Instrucción de Incremento
Esta instrucción toma al operando destino, que en un principio es fuente, posteriormente le suma uno y finalmente el resultado obtenido lo regresa al operando destino.
Instrucción de Decremento
Esta instrucción toma al operando destino, que en un principio es fuente, posteriormente le resta uno y finalmente el resultado obtenido lo regresa al operando destino.

1 comentario: