compilación de GCC parte de la información incrustada

  
 

en el ensamblador en línea, la expresión del lenguaje C se puede especificar como un operando instrucciones de ensamblador, pero no para gestionar cómo el valor del registro que se lee en las expresiones del lenguaje C, y la forma de escribir de nuevo el resultado del cálculo variable de C, que acaba de indicar al programa que la expresión del lenguaje C relación entre el número de instrucciones de uso y montaje correspondiente, GCC insertará automáticamente el código para completar la operación necesaria. Alias; __asm__ __volatile __ (" hlt "); " __ asm __ y " indica que el siguiente conjunto de código en línea, y " asm y " IS " __ asm __ y ":

1, una forma de realización simple ensamblado en línea. Y " __ __ volátil y " no representa un compilador de optimización de código de instrucciones posteriores a la izquierda como, " volátil y " es un alias. Los paréntesis son las instrucciones de montaje. En el ensamblador en línea, la expresión del lenguaje C se puede especificar como un operando instrucciones de montaje, y cómo no gestionar que registran los valores se leen en las expresiones del lenguaje C, y la forma de escribir los resultados de nuevo a la variable C, sólo dicen a una relación de correspondencia entre la expresión operando de la instrucción programa de lenguaje C y montaje, código de GCC se inserta automáticamente para completar la operación necesaria. Alias; __asm__ __volatile __ (" hlt "); " __ asm __ y " indica que el siguiente conjunto de código en línea, y " asm y " IS " __ asm __ y ":

1, una forma de realización simple ensamblado en línea. Y " __ __ volátil y " no representa un compilador de optimización de código de instrucciones posteriores a la izquierda como, " volátil y " es un alias. Los paréntesis son las instrucciones de montaje.

2, por ejemplo, utilizando el montaje ensamblado en línea en línea, primero escrito en plantilla de instrucciones de ensamblador y el número de operaciones asociadas con la expresión de instrucción de lenguaje C, y decirle a GCC que tienen restricciones en estas operaciones. Por ejemplo, en la declaración siguiente conjunto: __asm__ __violate__ (" movl% 1,% 0 ": " = r " (resultado): " m " (entrada));

" movl% 1, % 0 " es una plantilla de instrucción; "% 0 " y y "% 1 y " instrucciones de operandos que representa, a que se refiere como un marcador de posición, ensamblado en línea por el que la expresión del lenguaje C y el operando de la instrucción, respectivamente. plantilla de instrucciones subsiguiente entre paréntesis es la expresión del lenguaje C, la presente realización sólo dos: " resultar y " y y " entrada y ", su orden de ocurrencia, respectivamente, y el operando de la instrucción y "% 0 ", " % 1 y " se corresponde; tenga en cuenta el orden siguiente: primero una expresión C correspondiente a la y " segunda expresión% 0 "; correspondiente a la y "% 1 y ", y así sucesivamente, los operandos a lo sumo 10, respectivamente y "% 0 y ", "% 1 y " …. y "% 9 y " la fig. Hay una cadena entre comillas se usa delante de cada operando, el contenido de la cadena es limitar el número de operaciones o requisitos. Y " resultado y " antecede cadena limitación y " = r y ", en el que y " = " representa y " resultado y " es operando de salida, y " I " expresado la necesidad de y " resultar y " asociado con un registro de propósito general , el valor leído del número de primeras operaciones en un registro, y luego usar el registro correspondiente en la instrucción, pero no en " resultar y " sí, por supuesto, realizado después de que el valor del comando tiene que registrarse en la variable " resultar y ", la superficie parece ser el mando directo de la y " el resultado y " para operar, de hecho, GCC hizo un acuerdo implícito con, por lo que podemos escribir menos de instrucciones. Y " entrada y " anterior y " I " expresión representa la necesidad de poner un registro, entonces el registro para participar en la instrucción de cálculo. C expresión o la relación entre las variables y los registros son manejados automáticamente por el CCG, simplemente usamos orientación GCC restricciones cadena en la forma de tratar. carácter limitativo debe coincidir con instrucción requiere operandos, o código ensamblador generado será incorrecto, el lector puede estar en el ejemplo anterior dos y " I ", se sustituyen por y " M " (m representa el número de operar una descarga en la memoria, en lugar del registro), los resultados obtenidos se compilan: MOVL de entrada, resultado esto es claramente una instrucción ilegal, limitando así las cuerdas deben coincidir con los requisitos de los operandos de instrucciones. Por ejemplo, la instrucción permite movl registro para registrarse, el registro de conteo de inmediato por el estilo, pero no permite la operación de memoria a la memoria, dos operandos y por lo tanto no se puede utilizar y " M " se define como un personaje. sintaxis Inline ensamblador de la siguiente manera: el __ __asm ​​(plantilla declaración montaje: sección de salida: una sección de entrada: Descripción de la destrucción sección) cuatro partes: plantilla declaración ensamblador, una sección de salida, la sección de entrada, descripción daño parte, cada parte utilizando ": y " cuadrícula , compilación plantilla esencial abierta de los estados, otras tres partes opcional, si una parte de la espalda, mientras que la sección frontal está vacío, también es necesario para utilizar y ": y " rejilla abierta, la parte correspondiente del contenido está vacía. Por ejemplo: __asm__ __volatile __ (" CLI " ::: " memoria ")

1, el conjunto de plantilla de la plantilla declaración secuencia ensamblador declaración ensamblador de los estados, entre la declaración usando el y "; y ", " \\ N " o y " \\ n \\ t " separado. operandos de las instrucciones se pueden utilizar en referencia al lenguaje C marcador de posición variable, el operando de marcador de posición hasta 10, los nombres son los siguientes:% 0,% 1, y hellip;,% 9. Marcador de posición representa las instrucciones de operandos, el total se considera tipo largo (4 bytes), pero su funcionamiento se puede aplicar de acuerdo con un byte de instrucción o una palabra, cuando la palabra o byte operando utiliza como por defecto cuando el byte bajo o bajo palabra. operaciones con bytes se pueden especificar de forma explícita por los octetos o bytes bajos tiempos. % Está interpuesto entre el número de serie y una carta, y " b " representa un byte inferior, y " h " alto representante byte de, por ejemplo:% h1.

2, la parte de salida de la sección de salida describe los operandos de salida, diferente de rejilla abierta descriptor operando coma, cada descriptor de operandos está definido por la cadena de lenguaje C y variables. Definiendo para cada cadena operando de salida debe contener y " = " que representa un operando es la salida. Ejemplo: __asm__ __volatile __ (" pushfl; CLI ": "; = G "% 0 popl (x)) cadena de descriptores representa una restricción que variable, por lo GCC puede determinarse de acuerdo a estas condiciones cómo asignar los registros, cómo generar el enlace necesario entre el código de procesamiento operando de la instrucción variables de C o expresiones C y.

3, la parte de entrada de la sección de entrada describe los operandos de entrada, utilizando una coma entre diferentes operandos descriptores de células abiertas, cada descriptor de operandos está definido por las cadenas de lenguaje C y expresión del lenguaje, o composición variable C . Ejemplo 1: __asm__ __volatile__ (" lidt% 0 " :: " m " (real_mode_idt)); Ejemplo Dos (bitops.h): Estático __inline__ void __set_bit (int nr, volátil void * addr) {__ __asm ​​(" btsl % 1,% 0 ": " = m " (aDDR): " Ir " (nr));}

después de la función realización es (* addr) de bit nr se establece en 1. En primer marcador de posición% 0 ADDR correspondiente a las variables de lenguaje C, el segundo marcador de posición% 1 variable de nr correspondiente al idioma C. Por lo tanto la siguiente declaración conjunto el código de pseudo-código equivalente: nr btsl, ADDR, dos operandos de la instrucción no son todos variable de memoria, y por lo tanto la cadena de caracteres especificada como nr y " definida; " IR &; y el inmediatamente nr o el número de registros asociado, de modo que sólo dos operandos a ADDR variable de memoria.

Copyright © Conocimiento de Windows All Rights Reserved