GAS ha soportado ambas sintaxis desde la versión .10 a través de la directiva “.intel_sintax”.
Este modo de direccionamiento se utiliza para aprovechar las características del procesador.
Faltaban por tanto 4 bits para poder aprovechar al máximo las capacidades de direccionamiento del procesador.
Ejemplo: Si DS contiene 0x000A y DX contiene 0x5F0A, apuntarían a la dirección de memoria: 0x000A * 0x10 + 0x5F0A = 0x5FAA Para referirse a una dirección con un segmento y un desplazamiento, se utiliza la notación segmento:desplazamiento .
Los modos en los que el código x86 puede ser ejecutado son: En general, las características del repertorio de instrucciones x86 son: La pila es un segmento que es de suma utilidad en estos microprocesadores.
Una función no es más que una subrutina, o un fragmento de código al que se le llama generalmente varias veces desde el programa principal, o desde una función jerárquicamente superior.
Cuando arranca el programa, SP apunta al final del segmento de pila.
Para almacenar información en la pila se decrementa SP para que apunte un poco más arriba y se copia a esa posición de memoria, SS:SP.
Para sacarlo, copiamos lo que haya en SS:SP a nuestro destino, e incrementamos el puntero.
Como con todo lo que se hace con frecuencia, hay dispuestas instrucciones propias para el manejo de la pila.
El ensamblador x86 tiene las operaciones matemáticas estándar, como add, sub, mul, y idiv; los operadores lógicos and, or, xor, neg; desplazamientos, sal/sar, shl/shr; rotación con/sin acarreo, rcl/rcr, rol/ror, un complemento de instrucciones aritméticas BCD, aaa, aad, daa y otras.
El ensamblador x86 incluye instrucciones para pila basada en unidades en coma flotante.
Varias tecnologías de instrucciones soportan diferentes operaciones sobre distintos repertorios de registros, pero todos (desde MMX hasta SSE4,2) incluyen cálculo general sobre aritmética entera o en coma flotante (suma, resta, multiplicación, desplazamiento, minimización, maximización, comparación, división o raíz cuadrada).
En general, los procesadores x86 pueden cargar y usar memoria ajustada al tamaño del cualquier registro sobre el que está operando.
La pila está implementada con un puntero que disminuye (push) y aumenta (pop) implícitamente.
Las comparaciones en coma flotante se realizan mediante las instrucciones FCOM o FICOM.
Un salto sort usa un operando con signo de 8bits, que se corresponde con el desplazamiento relativo a la instrucción actual.
El salto near es similar al corto pero usa un operando de 16 o 32 bits con signo.
Un salto far utiliza el segmento entero base:desplazamiento como una dirección total.
La dirección de este vector se calcula multiplicando por 4 el operando, que es un valor entre 0 y 255.
Las interrupciones ligeras descritas anteriormente son usadas por algunos sistemas operativos para las llamadas del sistema, y pueden también ser usadas para depurar los manejadores de interrupciones fuertes.
Estas son provocadas por eventos hardware externos, y deben mantener los valores de todos los registros ya que el estado del programa en ejecución se desconoce.
En el Modo Protegido, las interrupciones pueden ser activadas por el Sistema Operativo para realizar un cambio de tarea, almacenando automáticamente todos los registros de la tarea en ejecución.