AT bajo Linux &sintaxis T (es decir GNU como sintaxis de ensamblador) de arranque

  

trabajo durante tanto tiempo, ha estado estudiando y trabajando duro en el lenguaje C de este nivel, con el tiempo, una gran cantidad de dudas sobre la década de C en los libros y materiales son difíciles Encuentra la respuesta. Un programador es una población que persigue la perfección, e incluso un pequeño agujero negro en su cabeza lo pondrá inquieto. No hace mucho, en el foro de itput, se leyó por la noche el libro clásico "Computer Systems A Programmer's Perspective" (en lo sucesivo, CS.APP) para resolver el rompecabezas. Aunque el libro no respondió positivamente a algunas de mis dudas, me indicó un camino a "no confesión": esta es la puerta para abrir la asamblea.

El lenguaje ensamblador es un lenguaje muy cercano al lenguaje de máquina, y la correspondencia entre las declaraciones y las instrucciones de la máquina es más simple y clara. Al abrir la puerta del ensamblaje no solo se alivian las dudas que le brindan los idiomas de alto nivel, sino que también le permite comprender mejor el sistema operativo de las computadoras modernas y, lo que es más importante, le brinda una sensación de confianza. , reduciendo su miedo a desmoronarse en las alturas, respondiendo a la llamada de Hou Jie "No construir una plataforma en las arenas flotantes". El propósito de aprender a ensamblar ahora es muy diferente que antes. Como se indica en CS.APP, la necesidad de que los programadores aprendan el ensamblaje ha cambiado con el tiempo, comenzando con los programadores que pueden escribir programas directamente en ensamblaje, y ahora requiere la lectura y comprensión de los compiladores de optimización. Código generado y ". Ser capaz de leer y entender, esto es precisamente mis necesidades y objetivos.

contactos en la universidad sido compilados, principalmente Microsoft MASM macro ensamblador, pero cuando se combina con una alta actitud de comprensión suficiente no es correcta, hemos perdido una buena oportunidad para aprender. La mayoría de las veces, uso GCC para trabajar en la plataforma de la serie Unix. La elección del lenguaje ensamblador es, por supuesto, el ensamblado GNU, al igual que la sintaxis del ensamblado GNU se utiliza en CS.APP. Dado que el objetivo principal de la compilación de aprendizaje es la "deconstrucción", el formulario es principalmente una comparación de código C y código de ensamblaje.

1, una compilación que podrás ver más con la mejora del nivel de lenguaje que utiliza, el ordenador será cada vez más borrosa los ojos, que se centran cada vez más lejos de la propia lengua y cerca de el otro extremo y " ", tales dominio del problema de Java, se ven más de su máquina virtual, y ver el ordenador real; por C, se puede ver que es sólo una capa de memoria, con el lenguaje ensamblador, Puedes profundizar en la capa de registro y jugar libremente. en lenguaje ensamblador programadores ojos " paisaje único y " que comprende: a) y " contador de programa (% EIP) y " - la dirección de un registro especial, en la siguiente instrucción siempre se almacena en un solo ser ejecutado; b) registro entero - 8, respectivamente que es% eax,% ebx,% ecx,% edx,% esi,% EBI,% esp y% ebp, se pueden almacenar datos enteros, direcciones de memoria, y similares también pueden registrar el estado. En los primeros días, cada registro tenía su propósito especial. Ahora, debido a que plataformas como Linux utilizan el "direccionamiento de plano" [1], la particularidad de los registros no es tan obvia. c) Registro de indicador de condición: guarda la información de estado de la instrucción aritmética ejecutada más recientemente para implementar cambios de condición en el flujo de control. d) Los registros de punto flotante - como su nombre lo indica, se utilizan para almacenar números de punto flotante. Aunque el grado de especialidad de los registros se ha debilitado, de hecho, cada compilador sigue ciertas reglas al usar estos registros y se analizará más adelante.

2, el primer vistazo de la compilación Aquí es una simple función de C: Maniquí void () {int a = 1,234; int b = a;} más que utilizar la opción -S gcc convierte en código ensamblador ( parte omitida): MOVL $ 1234, -4 (% ebp) movl -4 (% ebp),% eax eaxmovl%, -8 (% ebp) miraron unos a otros, o no entienden, acaba de encontrar algo contenido familiar Porque lo mencionado anteriormente como% ebp,% eax, etc. Esto es solo una introducción, háganos saber la sensibilidad de la compilación "cara" y ". Echémosle un vistazo. A primera vista, el código de ensamblaje es muy similar. Sí, el código de ensamblaje es una colección de declaraciones de "orden + operando". Las instrucciones de ensamblaje son fijas, cada instrucción tiene su propio propósito fijo y las representaciones de los operandos son de muchos tipos.

1) Los operandos indican que la mayoría de las instrucciones de ensamblaje tienen uno o más operandos, incluidos el origen y el destino de la operación de instrucción. Un formato de instrucción estándar es aproximadamente así: "instrucción + operando de origen + operando de destino", donde el operando de origen puede ser un inmediato, un número leído de un registro o un número leído de la memoria; El operando de destino puede ser un registro o una memoria. Por tal clasificación, el número de operación procede básicamente tres: a) la notación inmediata - como y " MOVL $ 1234, -4 (% ebp) y " de " $ 1234 y ", es un valor inmediato como un operando, De acuerdo con la sintaxis de ensamblaje de GNU, el valor inmediato se expresa como " $ + integer ". Los datos inmediatos se usan a menudo para representar algunas constantes en el código, como en el ejemplo anterior, " $ 1234 ". Tenga en cuenta que el valor inmediato no se puede utilizar como operando de destino. b) Notación de registro: esto es relativamente simple, es el contenido del registro. Como arriba y " movl -4 (% ebp),% eax y " en% eax es utilizar registro representa como una operación de proceso de fuente, y y " movl% eax, -8 (% ebp) y " en% eax entonces La notación de registro se utiliza como el operando de destino. c) Notación de referencia de memoria: el valor calculado de este operando representa la dirección de memoria correspondiente. La instrucción de montaje accede a la ubicación de memoria correspondiente en función de esta dirección de memoria. Como en el ejemplo y " movl -4 (% ebp),% eax y " de " -4 (% ebp) y ", que representa el valor de la dirección de memoria (el contenido del registro% ebp-4) obtenido.

2) Instrucciones de transferencia de datos La instrucción más comúnmente utilizada en lenguaje ensamblador: la instrucción de transferencia de datos, es el primer tipo de instrucción de ensamblaje al que estamos expuestos. El formato de la instrucción es: " operando de origen mov, operando de destino ". La serie mov admite el acceso y la transferencia de un mínimo de un byte a una palabra doble máxima. Cuando movb se usa para transmitir un byte de información, movw se usa para transferir dos bytes, es decir, una palabra de información, y movl se usa para transmitir información de palabra doble. Estos no se mencionan en detalle. Además serie mov con dos extensiones de bits proporciona más instrucciones y movsbl movzbl

=========================== ===================================

como un lenguaje ensamblador eficiente y El lenguaje de programación estrechamente integrado con la plataforma de hardware desempeña un papel importante en el campo del sistema operativo
, el desarrollo integrado, etc. Debido a que el ensamblaje se basa en la arquitectura de hardware (código de instrucciones de la CPU), el lenguaje ensamblador en diferentes arquitecturas es bastante diferente. Este artículo presenta brevemente la sintaxis AT &T en Linux (es decir, GNU como sintaxis de ensamblaje) y los métodos básicos de ensamblaje en Linux.

AT &sintaxis T originaron en AT &T Bell Labs, son en el momento de la sintaxis de código de operación procesador para implementar el sistema Unix se forma, AT &sintaxis T y sintaxis Intel principales diferencias son las siguientes: aT &T utilizando $ denota inmediata, Intel no tanto decimal al 2, aT &T es un $ 2, e Intel es 2AT &T más% antes de registros, tales como el registro EAX se expresa como% eaxAT &T el número de secuencia de la operación de procesamiento Intel y el contraste, por ejemplo, movl% eax,% ebx se transmiten a la eax en EBX, y Intel es una ebx mov, eaxAT &T después de la mnemónica además de un solo carácter indica la longitud de datos en la operación Por ejemplo, movl $ foo,% eax es equivalente a mov eax de word, word ptr foo

Copyright © Conocimiento de Windows All Rights Reserved