Estructura de un programa NASM | linux x86_64 (Intel 64 bits)

Posted by Labels: at


Modo extendido de 64 bits

El modo extendido de 64 bits es utilizado por los sistemas operativos de 64 bits. Dentro de este modo general, se dispone de un modo de operación de 64 bits y de un modo de compatibilidad con los modos de operación de las arquitecturas de 16 y 32 bits.


En un sistema operativo de 64 bits, los programas de 64 bits se ejecutan en modo de 64 bits y las aplicaciones de 16 y 32 bits se ejecutan en modo de compatibilidad. Los programas de 16 y 32 bits que se tengan que ejecutar en modo real o virtual x86 no se podrán ejecutar en modo extendido si no son emulados.

Modos de operación de la arquitectura x86-64
Modos de operación de la arquitectura x86-64
Características de los dos modos principales de operación en la arquitectura x86-64

Modo de operación

Sistema operativo

Las aplicaciones
necesitan
recompilación

Por defecto

Tamaño de los registros de propósito general

Tamaño (en bits) de las direcciones

Tamaño (en bits) de los operandos

Modo
extendido

Modo de 64 bits

Sistema operativo de 64 bits

64

32

64

Modo compatibilidad

no

32

32

16

16

16

Modo
heredado

Modo protegido

Sistema operativo de 32 bits

no

32

32

32

16

16

Modo
virtual-8086

16

16

16

Modo

real

Sistema operativo de 16 bits

Los elementos que desde el punto de vista del programador son visibles en este modo de operación son los siguientes:
1) Espacio de memoria: un programa en ejecución en este modo puede acceder a un espacio de direcciones lineal de 264 bytes. El espacio físico que realmente puede dirigir el procesador es inferior y depende de la implementación concreta de la arquitectura.
2) Registros: hay 16 registros de propósito general de 64 bits, que soportan operaciones de byte (8 bits), word (16 bits), double word (32 bits) y quad word (64 bits).
  • El registro contador de programa (RIP, instruction pointer register) es de 64 bits.

  • El registro de bits de estado también es de 64 bits (RFLAGS). Los 32 bits de la parte alta están reservados; los 32 bits de la parte baja son accesibles y corresponden a los mismos bits de la arquitectura IA-32 (registro EFLAGS).

  • Los registros de segmento en general no se utilizan en el modo de 64 bits.



Registros
Los procesadores de la arquitectura x86-64 disponen de un banco de registros formado por registros de propósito general y registros de propósito específico.
Registros de propósito general hay 16 de 64 bits y de propósito específico hay 6 registros de segmento de 16 bits, también hay un registro de estado de 64 bits (RFLAGS) y un registro contador de programa también de 64 bits (RIP).
Registros de propósito general
Son 16 registros de datos de 64 bits (8 bytes): RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP y R8-R15.
Los 8 primeros registros se denominan de manera parecida a los 8 registros de propósito general de 32 bits disponibles en la arquitectura IA-32 (EAX, EBX, ECX, EDX, ESI, EDI, EBP y ESP).
Los registros son accesibles de cuatro maneras diferentes:
1) Como registros completos de 64 bits (quad word).
2) Como registros de 32 bits (double word), accediendo a los 32 bits de menos peso.
3) Como registros de 16 bits (word), accediendo a los 16 bits de menos peso.
4) Como registros de 8 bits (byte), permitiendo acceder individualmente a uno o dos de los bytes de menos peso según el registro.
Los registros de propósito general se dividen en partes (y se da un nombre a cada parte), lo que facilita trabajar con diferentes tipos de datos.
75573_m6_005z.gif
75573_m6_006z.gif
75573_m6_007z.gif














































Estructura de un programa NASM

La mayoria de los programas constan de directivas seguidas de una o más secciones. La lineas de código pueden tener una etiqueta opcional. La mayoria de las líneas tienen una instrucción seguida de 0 o más operandos.

Por lo que como en la mayoria de los ensambladores, cada linea de codigo fuente de NASM contiene ( a menos que sea una macro, una directiva de preprocesador o una directiva de ensamblador) alguna combinación de los cuatro campos

label:    instruction     operands        ; comment

Generalmente se escribe el código en la sección llamada .text y tus constantes como las cadenas
de string en la sección .data

Directivas

Las directivas son pseudooperaciones que solo son reconocidas por el ensamblador. No se deben confundir con las instrucciones, a pesar de que en algunos casos pueden añadir código a nuestro programa. Su función principal es declarar ciertos elementos de nuestro programa para que puedan ser identificados más fácilmente por el programador y también para facilitar la tarea de ensamblaje.







References
Cordoba Cabeza, M. L., Garcia Clemente, M. I., & Mendez Cavanillas, R. (2000). Estructura de computadores. Alfaomega Grupo Editor.
Llamadas al sistema - Wiki de Sistemas Operativos. (n.d.). Lsi.us.es. Retrieved July 30, 2022, from https://1984.lsi.us.es/wiki-ssoo/index.php/Llamadas_al_sistema
NASM - The Netwide Assembler. (n.d.). Nasm.Us. Retrieved July 30, 2022, from https://www.nasm.us/doc/nasmdoc3.html
nasmtutorial. (n.d.). Lmu.edu. Retrieved July 30, 2022, from https://cs.lmu.edu/~ray/notes/nasmtutorial/
syscalls. (n.d.). Lmu.edu. Retrieved July 30, 2022, from https://cs.lmu.edu/~ray/notes/syscalls/
Back to Top