Generación de Código Objeto
La generación de código objeto es una fase esencial en el proceso de compilación de programas, representando la traducción del código fuente de alto nivel a un formato que la máquina puede entender y ejecutar. El código objeto se define como el código intermedio, legible por máquina, que el compilador genera tras las etapas de análisis sintáctico, análisis semántico y optimización.1 Su propósito fundamental es servir como un puente entre el código fuente escrito por el programador y el código ejecutable final, facilitando la compilación modular y el enlazado de diferentes partes de un programa.1 Un archivo de código objeto típicamente contiene varios componentes clave, incluyendo una cabecera que describe las diferentes partes del archivo, un segmento de texto que alberga las instrucciones del programa, un segmento de datos que contiene la información utilizada por el programa, una tabla de símbolos con los nombres de variables y funciones, información de reubicación para permitir el enlazado con otros módulos, e información de depuración para facilitar la identificación de errores.1 La estructura del archivo de código objeto refleja la creciente complejidad del desarrollo de software y la necesidad de herramientas que vayan más allá de la simple ejecución de instrucciones.
El código objeto se presenta generalmente en un formato binario, específico para la arquitectura del procesador y el sistema operativo de destino.1 Aunque es principalmente legible por la máquina, puede ser desensamblado para obtener una representación en lenguaje ensamblador.1 El uso del código objeto ofrece varios beneficios, como la eficiencia en la ejecución, la portabilidad dentro de la misma plataforma, una depuración más sencilla, la protección del código fuente y una mayor seguridad al no ser directamente legible por humanos.1 Sin embargo, también presenta limitaciones, siendo específico para una plataforma, implicando una sobrecarga de mantenimiento y ofreciendo un control limitado a los desarrolladores sobre el código final generado.1
La fase de generación de código es la etapa final de la compilación, tomando como entrada una representación intermedia del programa.2 El diseño de un generador de código eficaz implica abordar varios desafíos, como la correcta gestión de la entrada, la selección adecuada de instrucciones de máquina, la eficiente asignación de registros, y la determinación del orden de ejecución de las instrucciones.2 Los objetivos primordiales de un generador de código son la corrección, la mantenibilidad, la facilidad de prueba y la eficiencia del código generado.2 La calidad de la representación intermedia influye directamente en la eficiencia y complejidad de la generación del código objeto; una representación bien estructurada simplifica la selección de instrucciones y la asignación de registros.2
El generador de código recibe como entrada la representación intermedia del código fuente, que puede adoptar diversas formas, como notación postfija, representaciones de tres direcciones (cuádruplos), representaciones de máquinas virtuales (código de pila) o representaciones gráficas (árboles sintácticos y grafos acíclicos dirigidos).3 Junto con esta representación, se utiliza la información de la tabla de símbolos para determinar las direcciones en tiempo de ejecución de los objetos de datos.3 La salida del generador de código es el programa objeto, que puede presentarse en diferentes formatos: código máquina absoluto, que puede cargarse en una ubicación fija de memoria y ejecutarse inmediatamente; código máquina reubicable, que permite la compilación separada de subprogramas y requiere un enlazador para combinar los módulos; o lenguaje ensamblador, que facilita la generación de código al utilizar instrucciones simbólicas y macros del ensamblador.3 La elección del formato del programa objeto impacta las etapas posteriores de enlazado y ejecución; el código absoluto es directamente ejecutable, mientras que el código reubicable necesita ser enlazado.3
Durante la generación de código, se deben considerar varios aspectos clave, incluyendo la gestión de memoria, la selección de instrucciones, la asignación de registros y el orden de evaluación de las instrucciones.2 La gestión de memoria implica mapear los nombres de las variables a sus correspondientes direcciones en la memoria en tiempo de ejecución, utilizando la tabla de símbolos.2 Un desafío importante es asegurar que el generador de código utilice la memoria de manera eficiente, evitando conflictos y gestionando correctamente la asignación de memoria dinámica.2 La selección de instrucciones es el proceso de elegir las instrucciones de máquina más adecuadas para traducir el código intermedio a código ejecutable, buscando optimizar el código generado en términos de eficiencia y adecuación a la máquina de destino.2 La asignación de registros se refiere a la decisión de qué valores mantener en los registros del procesador, que son unidades de almacenamiento rápidas pero limitadas.2 Finalmente, el orden de evaluación de las instrucciones puede afectar la eficiencia del código objeto y el uso de registros.2
Registros en la Generación de Código Objeto
Los registros son ubicaciones de almacenamiento rápidas, temporales y direccionables dentro de la CPU.9 Desempeñan un papel crucial en la generación de código objeto al almacenar datos y direcciones que se utilizan con frecuencia, lo que permite un acceso más rápido a la información en comparación con la memoria principal.4 La cantidad limitada de registros disponibles en la CPU hace que su asignación y gestión eficientes sean tareas fundamentales durante la generación de código.5 El objetivo principal de la asignación de registros es minimizar los accesos a la memoria, que son operaciones más lentas, y así mejorar la velocidad de ejecución del programa.5
La asignación de registros se divide generalmente en dos subproblemas: la asignación, que determina qué variables residirán en los registros en diferentes puntos del programa, y la asignación específica, que elige qué registro físico se utilizará para cada una de esas variables.4 El compilador debe decidir qué valores mantener en los registros y cuáles deben residir en la memoria, considerando factores como el alcance, la vida útil y las oportunidades de optimización.4
Existen varios tipos de registros en la arquitectura de computadoras, cada uno con una función específica. Los registros de propósito general (GPRs) se utilizan para almacenar operandos, resultados intermedios y datos manipulados por las instrucciones.14 El acumulador (AC) se utiliza para almacenar el resultado de operaciones aritméticas y lógicas.14 Los registros de datos (DR) almacenan datos que se escriben en la memoria o se leen de ella.14 Los registros de direcciones (AR) o registros de direcciones de memoria (MAR) contienen las direcciones de memoria de los datos a los que la CPU desea acceder.14 El contador de programa (PC) o puntero de instrucción (IP) almacena la dirección de memoria de la siguiente instrucción que se va a ejecutar.14 El registro de instrucciones (IR) contiene la instrucción que se está ejecutando actualmente.19 El puntero de pila (SP) realiza un seguimiento de la parte superior de la pila en la memoria.14 El puntero base (BP) se utiliza principalmente para hacer referencia a las variables de parámetro pasadas a una subrutina.20 Los registros de índice (SI, DI) se utilizan para el direccionamiento indexado y las operaciones con cadenas.18 El registro de datos de memoria (MDR) o registro de búfer de memoria (MBR) se utiliza para el almacenamiento temporal de datos durante la transferencia entre la CPU y la memoria.14 El registro de banderas o registro de estado almacena códigos de condición o banderas de estado que proporcionan información sobre los resultados de las operaciones.18 Los registros de segmento (CS, DS, SS, ES, FS, GS) almacenan las direcciones de inicio de los segmentos de memoria.18 Los registros desempeñan un papel vital en el almacenamiento de operandos, resultados intermedios, direcciones de memoria e información de control.14
Para gestionar el uso de los registros durante la generación de código, el compilador puede utilizar estructuras de datos como los descriptores de registros y los descriptores de direcciones.4 Un descriptor de registros realiza un seguimiento de los valores almacenados en cada registro y su disponibilidad.4 Un descriptor de direcciones realiza un seguimiento de las ubicaciones de memoria donde se almacenan los valores de los identificadores.4 El generador de código puede emplear funciones como getReg para determinar el estado de los registros disponibles y la ubicación de los valores de los nombres.4
La asignación de registros puede ser local (dentro de un bloque básico) o global (a través de múltiples bloques básicos).5 Se utilizan diversas técnicas para la asignación de registros, como el conteo de uso, la asignación por grafos de intervalos y la coloración de grafos.5 En algunos casos, el generador de código debe manejar registros fijos, que están preasignados para usos específicos debido a limitaciones del conjunto de instrucciones o convenciones de llamada.30 También debe gestionar los registros que pueden ser modificados por las llamadas a funciones (registros clobberados por llamadas).30 Cuando no hay suficientes registros disponibles, el compilador puede recurrir al "registro de derrames" (register spilling), que implica almacenar temporalmente los valores de los registros en la memoria.11
Lenguaje Ensamblador
El lenguaje ensamblador es un lenguaje de programación de bajo nivel que utiliza códigos mnemónicos para representar las instrucciones de máquina.8 Sirve como una representación legible por humanos del código máquina, facilitando la comprensión y manipulación de las instrucciones a un nivel cercano al hardware.31 Cada instrucción en lenguaje ensamblador generalmente se corresponde con una única instrucción en código máquina.31
El lenguaje ensamblador utiliza mnemónicos, que son abreviaturas auto descriptivas que indican al procesador qué operación realizar, como "ADD" para la adición o "MOV" para el movimiento de datos.31 Un programa llamado ensamblador es el encargado de traducir el código ensamblador a código máquina (código objeto).32 El lenguaje ensamblador es específico para una arquitectura de procesador particular, lo que significa que el código escrito para un tipo de procesador no se puede ejecutar directamente en otro.32 Se utiliza en áreas donde el rendimiento es crítico, como sistemas operativos, controladores de dispositivos, sistemas embebidos y videojuegos.32
La sintaxis y estructura del lenguaje ensamblador varían según el ensamblador y la arquitectura, pero generalmente incluyen secciones como la sección de datos (para datos inicializados), la sección bss (para variables no inicializadas) y la sección de texto (para el código ejecutable).20 Las líneas de código ensamblador suelen contener etiquetas (para marcar ubicaciones en el código), mnemónicos (para las instrucciones), operandos (los datos o direcciones sobre los que opera la instrucción) y comentarios.20 El lenguaje ensamblador se relaciona directamente con el código objeto, ya que este último es el resultado de la traducción del código ensamblador por el ensamblador.1 El código objeto puede incluso ser desensamblado para obtener una representación en lenguaje ensamblador.1 En el proceso de compilación, el código fuente puede ser primero traducido a lenguaje ensamblador por el compilador, y luego este lenguaje ensamblador es convertido a código objeto por el ensamblador.1
Lenguaje Máquina
El lenguaje máquina es el nivel más bajo de lenguaje de programación, directamente comprendido y ejecutado por la Unidad Central de Procesamiento (CPU) de una computadora.50 Consiste en una secuencia de bits binarios (0s y 1s) que representan instrucciones y datos.50 Cada instrucción en lenguaje máquina tiene una estructura que incluye un código de operación (opcode) que especifica la acción a realizar, y uno o más operandos que indican los datos o las ubicaciones de memoria sobre los que operar.68
El lenguaje máquina es específico para una arquitectura de CPU particular, lo que significa que el código escrito para un tipo de procesador no se puede ejecutar en otro sin modificaciones.67 Debido a su naturaleza binaria, el lenguaje máquina es extremadamente difícil de leer y escribir directamente por humanos.50 A menudo se le conoce también como código máquina o código objeto (en un sentido amplio).68 El lenguaje ensamblador proporciona una representación más legible por humanos del lenguaje máquina, utilizando mnemónicos para las instrucciones y nombres simbólicos para las direcciones de memoria.70 El ensamblador es el programa que traduce el lenguaje ensamblador a su equivalente en lenguaje máquina.44 Esta traducción suele ser directa, con una correspondencia de uno a uno entre las instrucciones del ensamblador y las del lenguaje máquina.44 El ensamblador analiza el código ensamblador, identifica los códigos de operación y los operandos, y genera la secuencia binaria correspondiente del lenguaje máquina.51
Administración de Memoria
La administración de memoria es un aspecto crítico durante la generación de código objeto.2 Implica la asignación de espacio en la memoria para las variables y estructuras de datos utilizadas por el programa, así como la gestión de la vida útil de esa memoria.2 El compilador desempeña un papel fundamental en la decisión de dónde se asignará la memoria, considerando diferentes estrategias como la asignación estática y dinámica, y utilizando la pila (stack) y el montón (heap) para diferentes propósitos.2
La asignación estática de memoria se realiza en tiempo de compilación para las variables globales y estáticas.2 El compilador reserva un espacio fijo en la memoria para estas variables antes de que el programa comience a ejecutarse, y estas direcciones de memoria permanecen constantes durante toda la ejecución del programa.2 La asignación de memoria dinámica, por otro lado, ocurre en tiempo de ejecución, permitiendo que la memoria se asigne según sea necesario desde el montón (heap) para estructuras de datos cuyo tamaño puede variar durante la ejecución del programa.2 En C/C++, funciones como malloc, calloc, free y realloc se utilizan para la administración de memoria dinámica.81
La pila (stack) se utiliza típicamente para la asignación de memoria de variables locales dentro de las funciones y para la gestión de las llamadas a funciones, siguiendo un esquema de Último en Entrar, Primero en Salir (LIFO).2 El montón (heap) se utiliza para la asignación dinámica de memoria para estructuras de datos que pueden crecer o disminuir durante la ejecución.2 El compilador decide dónde asignar la memoria para las variables y estructuras de datos basándose en su alcance, vida útil y requisitos de tamaño.2 Para las estructuras de datos como arrays y structs, el compilador asigna bloques contiguos de memoria para almacenar sus miembros.2
Ejemplos de Operaciones Básicas en Ensamblador y Lenguaje Máquina
A continuación, se presentan ejemplos de cómo se representan las operaciones básicas en lenguaje ensamblador (para arquitecturas x86 y ARM) y su correspondiente traducción conceptual a lenguaje máquina, basados en la información de los fragmentos proporcionados:
Es importante notar que los códigos de máquina exactos pueden variar dependiendo de la arquitectura específica del procesador, el ensamblador utilizado y el modo de direccionamiento. La tabla proporciona ejemplos conceptuales basados en la información disponible en los fragmentos. Por ejemplo, en x86, la instrucción add eax, ebx podría traducirse a un código de máquina que incluye un prefijo (si es necesario), un código de operación específico para la adición de registros y los identificadores de los registros eax y ebx. En ARM, la instrucción add r0, r1, r2 también tendría un formato de código de máquina que especifica la operación de adición y los registros involucrados.
Conclusiones
La generación de código objeto es un proceso complejo y multifacético que constituye la etapa final crucial en la traducción de código fuente de alto nivel a un formato ejecutable por la máquina. Este proceso implica una interacción intrincada entre la gestión de la memoria, la asignación eficiente de los registros del procesador y la traducción precisa a lenguaje ensamblador y, finalmente, a lenguaje máquina. La elección de la representación intermedia, las características de la arquitectura de destino y los objetivos de optimización influyen significativamente en el diseño y la eficacia del generador de código.
Los registros, como unidades de almacenamiento de alta velocidad dentro de la CPU, desempeñan un papel fundamental en la optimización del rendimiento del código objeto. Su gestión eficiente, a través de técnicas de asignación y el uso de descriptores, es esencial para minimizar los accesos más lentos a la memoria principal. El lenguaje ensamblador sirve como un puente legible por humanos entre el código de alto nivel y el lenguaje máquina binario, facilitando la comprensión y la depuración a un nivel más cercano al hardware. La traducción de ensamblador a lenguaje máquina, realizada por el ensamblador, es un proceso generalmente directo con una correspondencia de uno a uno entre las instrucciones.
La administración de memoria durante la generación de código objeto aborda la asignación de espacio para variables y estructuras de datos, utilizando estrategias estáticas (en tiempo de compilación) y dinámicas (en tiempo de ejecución), y empleando la pila y el montón para diferentes necesidades de almacenamiento. El compilador es responsable de tomar decisiones informadas sobre la ubicación de la memoria para garantizar la eficiencia y la corrección. Finalmente, los ejemplos de operaciones básicas en lenguaje ensamblador y su representación en lenguaje máquina ilustran la naturaleza fundamental de las instrucciones que la CPU ejecuta. La comprensión de estos conceptos es esencial para el diseño y la implementación de compiladores eficientes y para la optimización del rendimiento del software a un nivel bajo.
Obras citadas
Introduction of Object Code in Compiler Design | GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/introduction-of-object-code-in-compiler-design/
Issues in the design of a code generator | GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/issues-in-the-design-of-a-code-generator
UNIT – V - Compiler Design – SCS1303 - Sathyabama, fecha de acceso: abril 29, 2025, https://www.sathyabama.ac.in/sites/default/files/course-material/2020-11/Unit-5.pdf
Compiler Design Code Generation - Tutorialspoint, fecha de acceso: abril 29, 2025, https://www.tutorialspoint.com/compiler_design/compiler_design_code_generation.htm
UNIT-VIII, fecha de acceso: abril 29, 2025, https://jkmaterials.yolasite.com/resources/materials/CompilerDesign/UNIT-VIII.pdf
The final phase in our compiler model is the code generator. It takes as i - WordPress.com, fecha de acceso: abril 29, 2025, https://notestoconnect.files.wordpress.com/2020/08/compiler-design_u5.pdf
Introduction to Code Generation in Compiler | E-Learning-Modules4Engg, fecha de acceso: abril 29, 2025, http://elearningmodules4engg.blogspot.com/2017/12/introduction-to-code-generation-in.html
MACHINE DEPENDENT CODE GENERATION||OBJECT CODE FORMS||ABSOLUTE CODE| RELOCATABLE CODE|ASSEMBLER CODE - YouTube, fecha de acceso: abril 29, 2025, https://www.youtube.com/watch?v=19sd19vO8rI
Lesson 8: Code Generation | BTU, fecha de acceso: abril 29, 2025, https://btu.edu.ge/wp-content/uploads/2023/08/Lesson-8_-Code-Generation.pdf
Compilers and computer architecture Code-generation (2): register-machines, fecha de acceso: abril 29, 2025, https://users.sussex.ac.uk/~mfb21/compilers/slides/8.pdf
Register Allocations in Code Generation | GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/register-allocations-in-code-generation/
CG.3 Code Generation from Abstract Syntax Trees, fecha de acceso: abril 29, 2025, https://web.cs.wpi.edu/~kal/courses/compilers/module6/mycg.html
How do modern compilers choose which variables to put in registers?, fecha de acceso: abril 29, 2025, https://langdev.stackexchange.com/questions/4325/how-do-modern-compilers-choose-which-variables-to-put-in-registers
What is a Register in a CPU and How Does it Work? - Total Phase, fecha de acceso: abril 29, 2025, https://www.totalphase.com/blog/2023/05/what-is-register-in-cpu-how-does-it-work/
Computer Register - YoungWonks, fecha de acceso: abril 29, 2025, https://www.youngwonks.com/blog/computer-register
What is Register Memory? | GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/what-is-register-memory/?ref=oin_asr3
registers in computer - Dr. Balvinder Taneja, fecha de acceso: abril 29, 2025, https://drbtaneja.com/registers-in-computer/
Registers in Computing: Types, Functions, and Roles Demystified - DEV Community, fecha de acceso: abril 29, 2025, https://dev.to/bitcraft_/registers-in-computing-types-functions-and-roles-demystified-15g0
Foundations of Computer Architecture: Registers, Instruction Set Design, Memory Addressing Modes, and CISC/RISC Principles. - Nobbie's Space, fecha de acceso: abril 29, 2025, https://nobbiesspace.hashnode.dev/foundations-of-computer-architecture-registers-instruction-set-design-memory-addressing-modes-and-ciscrisc-principles
Assembly Registers - Tutorialspoint, fecha de acceso: abril 29, 2025, https://www.tutorialspoint.com/assembly_programming/assembly_registers.htm
Types of Registers in Computer Architecture - VCMOS, fecha de acceso: abril 29, 2025, https://vcmos.com/registers-in-computer-architecture-types/
Different Classes of CPU Registers | GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/different-classes-of-cpu-registers/
General Purpose Registers | GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/general-purpose-registers/
Processor register - Wikipedia, fecha de acceso: abril 29, 2025, https://en.wikipedia.org/wiki/Processor_register
Computer Organization and Architecture REGISTERS AND THEIR TYPES, fecha de acceso: abril 29, 2025, https://www.gpkotabagh.org.in/lms/CSE%20-IV%20COAUnit1and2.pdf
Registers in Computer Architecture - PrepBytes, fecha de acceso: abril 29, 2025, https://www.prepbytes.com/blog/digital-electronics/registers-in-computer-architecture/
What are Computer Registers in Computer Architecture - Tutorialspoint, fecha de acceso: abril 29, 2025, https://www.tutorialspoint.com/what-are-computer-registers-in-computer-architecture
CPU Registers and Types of Registers | General purpose registers and special purpose registers - YouTube, fecha de acceso: abril 29, 2025, https://www.youtube.com/watch?v=f8E528N4tKU
Introduction to Register Descriptor | GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/introduction-to-register-descriptor/
The LLVM Target-Independent Code Generator, fecha de acceso: abril 29, 2025, https://llvm.org/docs/CodeGenerator.html
Compilers: Code Generation - YouTube, fecha de acceso: abril 29, 2025, https://www.youtube.com/watch?v=-ti07Z0xKKg
What are some Popular Assembly Languages? | Lenovo US, fecha de acceso: abril 29, 2025, https://www.lenovo.com/us/en/glossary/assembly-language/
What Are Assembly Languages? - Investopedia, fecha de acceso: abril 29, 2025, https://www.investopedia.com/terms/a/assembly-language.asp
What Is Assembly Language? | Glossary of Hardware Terms - Mad Devs, fecha de acceso: abril 29, 2025, https://maddevs.io/glossary/assembly-language/
Assembly Language: A Comprehensive Overview - DEV Community, fecha de acceso: abril 29, 2025, https://dev.to/nitindahiyadev/assembly-language-a-comprehensive-overview-3on0
Assembly language - Wikipedia, fecha de acceso: abril 29, 2025, https://en.wikipedia.org/wiki/Assembly_language
Assembly language | Definition & Facts - Britannica, fecha de acceso: abril 29, 2025, https://www.britannica.com/technology/assembly-language
What is Assembly Language? - GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/what-is-assembly-language/
What exactly is assembly language? : r/learnprogramming - Reddit, fecha de acceso: abril 29, 2025, https://www.reddit.com/r/learnprogramming/comments/125brgd/what_exactly_is_assembly_language/
The Assembler language on z/OS - IBM, fecha de acceso: abril 29, 2025, https://www.ibm.com/docs/en/zos-basic-skills?topic=zos-assembler-language
Assembly Basics: The Language Behind the Hardware - YouTube, fecha de acceso: abril 29, 2025, https://www.youtube.com/watch?v=LdWU8JEfPhg&pp=0gcJCdgAo7VqN5tD
Getting Started with Arm Assembly Language, fecha de acceso: abril 29, 2025, https://developer.arm.com/documentation/107829/latest/What-is-assembly-language-
How do assembly language and machine code relate? - TutorChase, fecha de acceso: abril 29, 2025, https://www.tutorchase.com/answers/a-level/computer-science/how-do-assembly-language-and-machine-code-relate
Assembly Languages & Machine Code - Washington, fecha de acceso: abril 29, 2025, https://courses.cs.washington.edu/courses/cse390b/22sp/readings/r7_Assembly%20Languages%20&%20Machine%20Code.html
7.4. Assembly Languages — CS160 Reader - Chemeketa CS, fecha de acceso: abril 29, 2025, https://computerscience.chemeketa.edu/cs160Reader/ProgrammingLanguages/Assembly.html
Assembly/Machine Code - CTF Handbook, fecha de acceso: abril 29, 2025, https://ctf101.org/reverse-engineering/what-is-assembly-machine-code/
How was machine code turned into assembly language? : r/AskTechnology - Reddit, fecha de acceso: abril 29, 2025, https://www.reddit.com/r/AskTechnology/comments/hlf4j9/how_was_machine_code_turned_into_assembly_language/
Isn't assembly and machine code just a text? - Super User, fecha de acceso: abril 29, 2025, https://superuser.com/questions/1789041/isnt-assembly-and-machine-code-just-a-text
What's machine readable code's language? [closed] - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/37183555/whats-machine-readable-codes-language
Difference Between Machine Language and Assembly Language - Shiksha Online, fecha de acceso: abril 29, 2025, https://www.shiksha.com/online-courses/articles/difference-between-machine-language-and-assembly-language/
How does text assembly get translated to machine code? : r/learnprogramming - Reddit, fecha de acceso: abril 29, 2025, https://www.reddit.com/r/learnprogramming/comments/8783ik/how_does_text_assembly_get_translated_to_machine/
How do we go from asm to machine code : r/Compilers - Reddit, fecha de acceso: abril 29, 2025, https://www.reddit.com/r/Compilers/comments/1imdnd4/how_do_we_go_from_asm_to_machine_code/
4: Translating Assembly Language into Machine Code - Engineering LibreTexts, fecha de acceso: abril 29, 2025, https://eng.libretexts.org/Bookshelves/Computer_Science/Programming_Languages/Introduction_To_MIPS_Assembly_Language_Programming_(Kann)/04%3A_Translating_Assembly_Language_into_Machine_Code
Now that we are familiar with the Watson Virtual Machine language ..., fecha de acceso: abril 29, 2025, http://watson.latech.edu/book/assembly/assemblyMachine2.html
Assembler basic question : translation to machine code - Electronics Stack Exchange, fecha de acceso: abril 29, 2025, https://electronics.stackexchange.com/questions/332443/assembler-basic-question-translation-to-machine-code
How do we go from assembly to machine code(code generation), fecha de acceso: abril 29, 2025, https://softwareengineering.stackexchange.com/questions/227983/how-do-we-go-from-assembly-to-machine-codecode-generation
cseweb.ucsd.edu, fecha de acceso: abril 29, 2025, https://cseweb.ucsd.edu/~ricko/CSE30/ARM_Translation_Guide.pdf
watson.latech.edu, fecha de acceso: abril 29, 2025, http://watson.latech.edu/book/assembly/assemblyMachine2.html#:~:text=BLOCK%20commands%2C%20every%20assembly%20language,language%20are%20called%20%E2%80%9Cassemblers%E2%80%9D.
Assembly Basic Syntax - Tutorialspoint, fecha de acceso: abril 29, 2025, https://www.tutorialspoint.com/assembly_programming/assembly_basic_syntax.htm
Assembly code vs Machine code vs Object code? - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/466790/assembly-code-vs-machine-code-vs-object-code
Object code - Wikipedia, fecha de acceso: abril 29, 2025, https://en.wikipedia.org/wiki/Object_code
Assembly Language as Object Code - Department of Computer Science, fecha de acceso: abril 29, 2025, https://www.cs.tufts.edu/~nr/cs257/archive/douglas-jones/asm-as-object-code.pdf
I have a confusion when differentiating between Source code, Object code, Assembly code, and Machine code - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/49031020/i-have-a-confusion-when-differentiating-between-source-code-object-code-assemb
Assembly Code vs. Machine Code vs. Object Code vs. Executable Code - The Security Buddy, fecha de acceso: abril 29, 2025, https://www.thesecuritybuddy.com/reverse-engineering/assembly-code-vs-machine-code-vs-object-code-vs-executable-code/
What is Machine Language? Assembler Explained & How to Write a Program - Lenovo, fecha de acceso: abril 29, 2025, https://www.lenovo.com/us/en/glossary/machine-language/
Computer programming language | Types & Examples - Britannica, fecha de acceso: abril 29, 2025, https://www.britannica.com/technology/computer-programming-language
What is Machine Language? Applications of Machine Language - Tokyo Tech Lab, fecha de acceso: abril 29, 2025, https://tokyotechlab.com/blogs/ngon-ngu-may
What is Machine Language? - GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/what-is-machine-language/
General | Machine Code - Codecademy, fecha de acceso: abril 29, 2025, https://www.codecademy.com/resources/docs/general/machine-code
Machine code - Wikipedia, fecha de acceso: abril 29, 2025, https://en.wikipedia.org/wiki/Machine_code
Machine Code: The Binary Language of Computers Explained - YouTube, fecha de acceso: abril 29, 2025, https://www.youtube.com/watch?v=Xru58_oksaM
Is machine language always binary? [duplicate] - Software Engineering Stack Exchange, fecha de acceso: abril 29, 2025, https://softwareengineering.stackexchange.com/questions/236415/is-machine-language-always-binary
Binary code - Wikipedia, fecha de acceso: abril 29, 2025, https://en.wikipedia.org/wiki/Binary_code
Is Machine Code binary or hex? : r/learnprogramming - Reddit, fecha de acceso: abril 29, 2025, https://www.reddit.com/r/learnprogramming/comments/im5g5t/is_machine_code_binary_or_hex/
How does a computer "understand" what code/binary means? : r/computerscience - Reddit, fecha de acceso: abril 29, 2025, https://www.reddit.com/r/computerscience/comments/p7nprt/how_does_a_computer_understand_what_codebinary/
Chapter 2. Binary and Number Representation - Computer Science from the Bottom Up, fecha de acceso: abril 29, 2025, https://www.bottomupcs.com/ch02.html
Machine Instructions | GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/machine-instructions/
What converts Assembly language to machine code - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/24948125/what-converts-assembly-language-to-machine-code
Storage Allocation Strategies in Compiler Design | GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/storage-allocation-strategies-in-compiler-design/
Difference between Static and Dynamic Memory Allocation in C ..., fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/difference-between-static-and-dynamic-memory-allocation-in-c/
Static and Dynamic Memory Allocation in C | GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/static-and-dynamic-memory-allocation-in-c/
Static vs. Dynamic Memory Allocation - Kalamazoo College, fecha de acceso: abril 29, 2025, https://www.cs.kzoo.edu/cs230/Resources/C/StaticVsDynMemAlloc.html
Compiler Memory Allocation - All About Circuits Forum, fecha de acceso: abril 29, 2025, https://forum.allaboutcircuits.com/threads/compiler-memory-allocation.196322/
What does "Memory allocated at compile time" really mean? - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/21350478/what-does-memory-allocated-at-compile-time-really-mean
How does compile time memory allocation work? : r/computerscience - Reddit, fecha de acceso: abril 29, 2025, https://www.reddit.com/r/computerscience/comments/19c96oa/how_does_compile_time_memory_allocation_work/
When is static memory allocated in C/C++? At compile time or at the very beginning of when a program is run? - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/64613413/when-is-static-memory-allocated-in-c-c-at-compile-time-or-at-the-very-beginni
Is space for variables allocated at runtime or compilation time? - Reddit, fecha de acceso: abril 29, 2025, https://www.reddit.com/r/learnprogramming/comments/wbe2x3/is_space_for_variables_allocated_at_runtime_or/
forum.allaboutcircuits.com, fecha de acceso: abril 29, 2025, https://forum.allaboutcircuits.com/threads/compiler-memory-allocation.196322/#:~:text=The%20compiler%20%E2%80%9Callocates%E2%80%9D%20static%20and,a%20section%20number%20and%20offset.
Memory Allocation in C: Compile Time vs. Run Time - EEVblog, fecha de acceso: abril 29, 2025, https://www.eevblog.com/forum/programming/memory-allocation-in-c-compile-time-vs-run-time/
Dynamic Memory Allocation, fecha de acceso: abril 29, 2025, https://www.cs.fsu.edu/~myers/cgs4406/notes/dma.html
Dynamic Memory Allocation, fecha de acceso: abril 29, 2025, https://www.cs.fsu.edu/~myers/c++/notes/dma.html
Memory allocation at compile time - C Board, fecha de acceso: abril 29, 2025, https://cboard.cprogramming.com/c-programming/181788-memory-allocation-compile-time.html
Dynamic Memory Allocation in C using malloc(), calloc(), free() and ..., fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c-using-malloc-calloc-free-and-realloc/
C++20 Dynamic Allocations at Compile-time - Andreas Fertig's Blog, fecha de acceso: abril 29, 2025, https://andreasfertig.com/blog/2021/08/cpp20-dynamic-allocations-at-compile-time/
How do I store the compile-time dynamically allocated memory so that it can be used in run-time? - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/72415239/how-do-i-store-the-compile-time-dynamically-allocated-memory-so-that-it-can-be-u
Memory allocation from Compiler? : r/Cplusplus - Reddit, fecha de acceso: abril 29, 2025, https://www.reddit.com/r/Cplusplus/comments/miw63w/memory_allocation_from_compiler/
www.avabodh.com, fecha de acceso: abril 29, 2025, https://www.avabodh.com/cin/structure.html#:~:text=If%20we%20create%20an%20object,created%20between%20two%20data%20members.
Memory Allocation for Structure - Avabodh, fecha de acceso: abril 29, 2025, https://www.avabodh.com/cin/structure.html
C Dynamic Data Structures - Texas Computer Science, fecha de acceso: abril 29, 2025, https://www.cs.utexas.edu/~fussell/courses/cs310h/lectures/Lecture_18-310h.pdf
How memory allocation of variables or data in a program are done by compiler and OS, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/71006320/how-memory-allocation-of-variables-or-data-in-a-program-are-done-by-compiler-and
What is Dynamic Memory Allocation? - GeeksforGeeks, fecha de acceso: abril 29, 2025, https://www.geeksforgeeks.org/what-is-dynamic-memory-allocation/
Do I have to worry about memory management in writing a compiler if the language I'm using has a garbage collector? : r/learnprogramming - Reddit, fecha de acceso: abril 29, 2025, https://www.reddit.com/r/learnprogramming/comments/1c12amn/do_i_have_to_worry_about_memory_management_in/
how does compiler allocate memory to a program? - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/32559240/how-does-compiler-allocate-memory-to-a-program
Basics Today: Machine Programming I: Basics Intel x86 Processors Intel x86 Evolution: Milestones, fecha de acceso: abril 29, 2025, https://www.cs.cmu.edu/afs/cs/academic/class/15213-s13/www/lectures/05-machine-basics.pdf
ARMv4 ISA - Machine Code Data Processing Formats - Milwaukee School of Engineering, fecha de acceso: abril 29, 2025, https://faculty-web.msoe.edu/meier/ce1921/slidesets/isaarm-machine-code.pdf
Assembly Arithmetic Instructions - Tutorialspoint, fecha de acceso: abril 29, 2025, https://www.tutorialspoint.com/assembly_programming/assembly_arithmetic_instructions.htm
x86 Assembly Language Programming, fecha de acceso: abril 29, 2025, https://cs.lmu.edu/~ray/notes/x86assembly/
x86 Assembly/Arithmetic - Wikibooks, open books for an open world, fecha de acceso: abril 29, 2025, https://en.wikibooks.org/wiki/X86_Assembly/Arithmetic
Assembly language basics - Arm Developer, fecha de acceso: abril 29, 2025, https://developer.arm.com/documentation/107829/latest/Assembly-language-basics
How to do math operations with multiple digits in ASM - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/44095049/how-to-do-math-operations-with-multiple-digits-in-asm
Writing assembly program to do simple arithmetic operations. - NASM Forum, fecha de acceso: abril 29, 2025, https://forum.nasm.us/index.php?topic=2238.0
Assembly Language Programming with ARM – Full Tutorial for Beginners - YouTube, fecha de acceso: abril 29, 2025, https://www.youtube.com/watch?v=gfmRrPjnEw4
Getting Started with Arm Assembly Language, fecha de acceso: abril 29, 2025, https://documentation-service.arm.com/static/64f9cc76bc48b0381ce07a47?token=
Machine Programming Basics, fecha de acceso: abril 29, 2025, https://csit.kutztown.edu/~schwesin/fall20/csc235/lectures/Machine_Programming_Basics.html
Arithmetic Instruction in Intel x86 assembly - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/60707908/arithmetic-instruction-in-intel-x86-assembly
www.davespace.co.uk, fecha de acceso: abril 29, 2025, https://www.davespace.co.uk/arm/introduction-to-arm/arithmetic.html
ARM's arithmetic instructions - Emory Computer Science, fecha de acceso: abril 29, 2025, http://www.cs.emory.edu/~cheung/Courses/255/Syllabus/7-ARM/arithm.html
Lecture 7: ARM Arithmetic and Bitwise Instructions - Computer Science, fecha de acceso: abril 29, 2025, https://cseweb.ucsd.edu/classes/fa15/cse30/lectures/lec7_detailed.pdf
Basic arithmetic operations - Getting Started with Arm Assembly Language, fecha de acceso: abril 29, 2025, https://developer.arm.com/documentation/107829/latest/Assembly-language-basics/Basic-arithmetic-operations
Creating simple addition and subtraction program in ARM Assembly - Stack Overflow, fecha de acceso: abril 29, 2025, https://stackoverflow.com/questions/67206558/creating-simple-addition-and-subtraction-program-in-arm-assembly
ARM Arithmetic Instructions - YouTube, fecha de acceso: abril 29, 2025, https://www.youtube.com/watch?v=8buj3oMsluI
Comentarios
Publicar un comentario