Arquitectura de las Computadoras

 

TAREA #8

 

Instrucciones de Ensamblador

de los Procesadores INTEL

 

 

Grupos de instrucciones :

 

Manejo deMemoria:

Instrucción Operandos Función equivalente en "C"
MOV destino, fuente destino = fuente
PUSH fuente [SS:SP] = fuente; SP += sizeof(destino)
POP destino SP -= sizeof(destino) ; destino = [SS:SP]
XCHG op1, op2 temp = op1; op1 = op2; op2 = temp

 

Instricciones Aritmeticas:

Instrucción Operandos Función equivalente en "C" Resultados
ADD op1, op2 op1 = op1 + op2  
SUB op1, op2 op1 = op1 - op2
ADC op1, op2 op1 = op1 + op2 + Carry
SBB op1, op2 op1 = op1 - op2 - Carry  
INC op1 op1 ++;  
DEC op1 op1 --;  
MUL op1 Si op1 es tipo byte: AX = AL * op1
    Si op1 es tipo word: (DX:AX) = AX * op1
DIV op1 Si op1 es tipo byte: AL = AX / op1
      AH = AX % op1
    Si op1 es tipo word: AX = (DX : AX) / op1
      DX = (DX : AX) % op1
NEG op1 op1 = - op1  

 

Manejo de Bits

(rotaciones y desplazamientos):

Instrucción Operandos Función equivalente en "C"
SHL op1, cuenta op1 <<= cuenta
SHR op1, cuenta op1 >>= cuenta
SAR op1, cuenta (no hay equivalente)
ROL op1, cuenta (no hay equivalente)
ROR op1, cuenta (no hay equivalente)

 

Operaciones lógicas (Booleanas):

Instrucción Operandos Función equivalente en "C"
AND op1, op2 op1 = op1 & op2
OR op1, op2 op1 = op1 | op2
XOR op1, op2 op1 = op1 ^ op2
NOT op1 op1 = ~op1
 

 

Evaluación de Condiciones y Saltos:

Instrucción Operandos Función equivalente en "C"
JMP etiqueta   goto
CMP op1, op2   (no hay equivalente)
Comparaciones sin signo
JB/JNAE etiqueta if (op1 < op2) /* con un CMP */ goto
JNB/JAE etiqueta if (op1 >= op2) /* con un CMP */ goto
JBE/JNA etiqueta if (op1 <= op2) /* con un CMP */ goto
JNBE/JA etiqueta if (op1 > op2) /* con un CMP */ goto
JE/JZ etiqueta if (op1 == op2) /* con un CMP */ goto
JNE/JNZ etiqueta if (op1 != op2) /* con un CMP */ goto
Comparaciones con signo
JL/JNGE etiqueta if (op1 < op2) /* con un CMP */ goto
JNL/JGE etiqueta if (op1 >= op2) /* con un CMP */ goto
JLE/JNG etiqueta if (op1 <= op2) /* con un CMP */ goto
JNLE/JG etiqueta if (op1 > op2) /* con un CMP */ goto
JP/JPE etiqueta if (PF) /* Parity flag */ goto
JNP/JPO etiqueta if (! PF) goto
JS etiqueta if (SF) /* Sign flag */ goto
JNS etiqueta if (! SF) goto
JC etiqueta if (CF) /* Carry flag */ goto
JNC etiqueta if (! CF) goto
JO etiqueta if (OF) /* Overflow flag */ goto
JNO etiqueta if (! OF) goto

 

Uso de Procedimientos/Subrutinas:

Instrucción Operandos Función equivalente en "C"
CALL etiqueta Llamada a función
    PUSH IP
    PUSH CS ; Sólo si es llamada larga (CALL FAR)
    JMP etiqueta
RET (ninguno) return
    POP IP-temp
    POP CS-temp ; Sólo si es llamada larga (RETF)
    JMP CS-temp:IP-temp

 

CONCLUSIONES:

Aunque estas sean solo algunas de las instrucciones que se puden manejar en Ensablador, me he podido dar cuenta, por lo visto en clase y lo investigado, de lo poderoso que es este lenguaje, ya que se pueden hacer programas sencillos hasta virus dañinos. Ademas que este lenguaje en una interfaz entre el lenguaje maquina y los lenguajes que usamos mas comunmente como C++ o Pascal y esto es de gran ayuda ya que es bastante complicado el lenguaje maquina.

 

REFERENCIAS:

http://www.sinergia-web.com.mx/clases/asm9708/Temas/clase07.htm

http://lafaq.espaweb.com/manuales/programacion.htm

http://www.intel.com

 

Pagina Principal Inicio