martes, 2 de junio de 2020

Lenguaje Ensamblador Del Microprocesador (Resumen)

La CPU x86 tiene 14 registros internos y básicos. Algunos son realmente de 32 bits pero por ahora se utilizará el modo real que es compatible con el procesador 8086 (igualmente accesibles a la parte alta de éstos registros, inclusive en el modo real). Los registros son los siguientes (estos registros son de 16 bits nombrados de la siguiente manera, a excepción del registro de banderas).

Registros de uso general:

  • AX: Acumulador (AL:AH)
  • BX: Registro base (BL:BH)
  • CX: Registro contador (CL:CH)
  • DX: Registro de datos (DL:DH)


Un registro es un espacio de almacenamiento disponible para el CPU. Una de las principales características de estos, es que pueden ser accedidos más rápido que cualquier otro dispositivo de almacenamiento de una computadora. Los procesadores x86 cuentan con una serie de registros disponibles para utilizar como almacenamiento temporal para variables, valores y demás información que utilizan durante la ejecución de instrucciones como así también punteros a secciones de memoria como la pila. Podemos mencionar 4 categorías diferentes:


  • Registros generales
  • Segmentos de registros
  • Flags (banderas de estado)
  • Instruction Pointer (IP), puntero a la próxima instrucción a ejecutar


Registros Generales

Normalmente, los registros generales almacenan datos o direcciones de memoria y son utilizados de manera intercambiable para lograr que se ejecuten las instrucciones del programa.  Algunos de estos registros generales son utilizados para funciones específicas. Por ejemplo, para realizar multiplicaciones o divisiones se utilizan los registros EAX y EBX.


Flags

El registro que nombramos como EFLAG es un registro de estado. En esta arquitectura, tiene una longitud de 32 bits y cada uno de sus bits es una bandera. Según el valor de 0 o 1 de cada bit serán utilizados para controlar las operaciones de la CPU luego de la ejecución de una instrucción. Entre los registros más importantes para remarcar en relación al análisis de malware podemos enumerar:


  • ZF (Zero Flag): Cero. Esta bandera se activa cuando el resultado de la operación es cero.
  • CF (Carry Flag): cuando ha ocurrido un “llevar” o “pedir préstamo” del resultado (8 o16 bits)
  • SF (Sign Flag): Según si el resultado de una operación es un valor positivo o negativo. Si el valor es positivos se queda en cero y es uno en caso contrario.
  • PF (Paridad): Cuando esta bandera está activa, el resultado de la operación tiene un número par de unos.

Las instrucciones se pueden clasificar en los siguientes grupos:


  • Transferencia de datos (MOV, IN, OUT, PUSH, POP)
  • Control de Bucles (sin fin, conteo, hasta, mientras)
  • Prueba, Comparación y Saltos (JMP)
  • Llamado y Retorno de Subrutinas
  • Aritmeticas (ADD, SUB, MUL, DIV)
  • Logicas (NOT, AND, OR)
  • Desplazamiento y Rotación (ROL,SHL)
  • Pila (PUSH, POP)
  • Control del Microprocesador (NOP, HLT)
  • Interrupción (STI, CLI, INT)
  • Otras instrucciones


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.
Los 2 registros usados para la dirección de la instrucción son el IP y el CS. Se combinan en una forma especial para generar la dirección de 20 bits.


Programacion en el Lenguaje Ensamblador


Los archivos deben terminar con la extensión “ASM”. Las letras minúsculas trabajan igual que las mayúsculas, pero durante el presente trabajo se utilizarán mayúsculas para evitar confusión entre el número 1 y la minúscula l, el 0 (cero) y la letra O.

El ensamblador puede usar archivos fuente que contengan caracteres ASCII estándar. Considere que no todos los procesadores de texto escriben archivos en disco usando solamente los caracteres ASCII estándar. Antes de ensamblar un programa verifique que esté en código ASCII.

No hay comentarios:

Publicar un comentario

13. Cambiar el color de la pantalla

CR EQU 13 LF EQU 10 TECLADO_8 EQU 8 IMPRIMIR_9 EQU 9 FIN_4C00H EQU 4C00H DOS_21H EQU 21H BIOS_10H EQU 10H TAB EQU 09H BELL EQU 07H ...