Skip to content

Instantly share code, notes, and snippets.

@RedToor
Created January 19, 2022 03:41
Show Gist options
  • Save RedToor/bb9a96fb93b154cbe39cf92f9f35cf21 to your computer and use it in GitHub Desktop.
Save RedToor/bb9a96fb93b154cbe39cf92f9f35cf21 to your computer and use it in GitHub Desktop.
# Lenguaje Ensamblador
## Apuntes del libro "Lenguaje Ensamblador Para Computadoras Basadas en Intel 5ed"
## Epilogo
En los primeros años de los programadores se usaba el assembler para programar las aplicaciones, esto por que se limitaba a
el hardware de aquellos dias, al momento que los procesadores fueron mas rapidos y con mayor capacidad en paralelo fue permitiendole
a el programador dejar la optmizacion por la funcionalidad del software se introdujeron lenguajes como FORTRAN, COBOL, C hasta llegar
a lenguajes de alto nivel como C++, Java, C#, GO.
Lenguaje ensamblador para la Familia IA-32, la cual su Primer procesador Intel 80386, existen 3 compiladores los cuales son
MASM(Macro Assambler) de Microsoft, NASM(NetWide Assambler), TASM(Turbo Assambler).
## Hardware & Software
Ensamblador: programa que convierte codigo fuente en ensamblador a codigo maquina(op-codes).
Enlazador : programa que combina los archivos generados por el ensamblador en un solo archivo ejecutable(PE-format, LFE-format).
Depurador : programa en el cual se puede analizar el compartamiento de un binario ejecutable.
Lenguaje ensamblador tiene relacion de uno a uno, una instruccion en lenguaje ensamblador corresponde a una en "lenguaje maquina"
Y la relacion de lenguajes de alto nivel como (C++, C#, JAVA) son de una a varias instrucciones en lenguaje ensamblador dependiendo la
configuracion con la que se ha ensamblado como puede ser optimizaciones, seguridad, obfuscacion, etc.
| |:::::::::::::::::::::C++
| ^ |int y;
| N | |int x = (y + 4) * 3;
| I | |:::::::::::::::::::::ASM
| V | |MOV EAX, y
| E | |ADD EAX, 4
| L | |MOV EBX, 3
| | |MUL EBX
| | |MOV X , AEX
| |:::::::::::::::::::::MICROINSTRUCCIONES(ALU)
Los lenguajes de alto nivel son portables por que son soportadas en muchos sistemas computacionales como
pueder ser un , en cambio el lenguaje ensamblador esta basado en ciertos procesadores(familia) el cual no se
interpreta de la misma manera.
el lenguaje ensamblador tiene acceso completo a el host, mientras que JAVA no se puede apuntar a la memoria pero evita los errorres
de los programadores cuando programan grandes trozos de codigo.
pero si se quiera usar una aplicacion que interatue con hardware el ensamblador es perfecto, ya que posee la propiedad de acceder
a la CPU sin problemas a diferencia de un lenguaje de alto nivel.
la Maquina virtual
|_____
VM0 | --> L0 el lenguaje nativo ejecuta una pequeño grupo de circuitos
| interpretacion: programa en L0 traduce y ejecuta cada instruccion de L1 a L0 mientras se ejecuta
| traduccion : programa que convierte el pograma en L1 A L0 y despues se ejecuta como L0
VM0 | --> L1 Lenguaje mas funcional (Ensamblador)
|
| 5 Niveles
| 0 - Logico Digital, Circuitos integrados.
| 1 - Microarquitectura, Buses del microprocesador
| 2 - Arquitectura de conjunto de Instrucciones, Instrucciones en los procesadores MOV,ADD,XOR, ETC
| 3 - Sistema Operativo, Funciones de el sistema operativo como listar a archivos.
| 4 - Lenguaje ensamblador, programas hechos con nemonicos que se relacionan facilmente con el nivel 2.
| 5 - Lenguajes de alto nivel, programas hecho en C++,JAVA,Etc. los cuales se traducen a el nivel 4
la computadora almacena instrucciones y datos en la memoria en forma de cargas eletricas, para representa el conjunto de cargas eletricas
de manera numerica se basan en sistemas encendido y apagado el cual se llamo sistema binario con base 2 representados en bits, el cual se establece que el bit mas significativo sera el de la izquierda
Reloj, es el que emite pulso electricos para sincronizar todos los componentes de la computadora, al ejecutarce una instruccion puede
generar muchos o pocos ciclos dependiendo la instruccion si se quiesiera obtener un valor de la memoria se necesitaria mas ciclos ya que
se requiere mas pasos.
Ciclos de ejecucion de instrucciones
|
|1) Busqueda, Busca la instruccion e incrementa el registro apuntador(IP)
|2) Decodificacion, decodifica la instruccion y la envia a la ALU
|3) Busqueda de operandos, Obtiene operando de la memoria si se necesitan
|4) Ejecucion, la ALU realiza las operacion y actualiza los registros y banderas.
|5) Almacenamiendo, Se actualizan los datos en la memoria si se necesita
el cache de codigo se usa para realizar operaciones rutinarias a mayor velocidad, ya que se encuenta en la CPU su nivel de acceso es mas
rapido.
Ejecucion de programas, la secuencia de ejecucion de un programa desde una linea de comandos seria la siguiente
|1) Sistema operativo busca el archivo especificado en la ruta puesta o y en las trayectorias(Variables de entorno de sistema)
|2) Obtiene informacion basica de archivo, ubicacion fisica en el disco y tamaño del mismo.
|3) el OS determina la siguiente ubicacion disponible en memoria y lo carga, y genera informacion en la tabla de descriptores la cual contiene apuntadores y direcciones de datos
|4) el OS ejecuta las instrucciones y se vuelve proceso se le asigna un ID, el cual sirve como identificador del proceso
|5) el proceso se ejecuta y envia peticiones a memoria o perifiericos
|6) cuando finaliza el proceso se libera la memoria que se uso para que sea usada de nuevo por otro proceso
## Multarea
Los hilos comparten el mismo espacio de memoria que el del proceso original, esto funciona a travez de un planificador de tarea, el cual asgina un cierto tiempo de ejecucion entre los
hilos, esto se aplica tambien a los procesos pero en sus propios espacios de memoria.
HILO 2---|------- HILO 4
HILO 1 ------+ PLANIFICADOR-----> 100ms a HILO 1 -> 100ms a HILO 2, etc
HILO 3---|------- HILO 5
se puede establecer una proriedad alos procesos, esto hace que el planificador usa mas tiempo en el proceso deseado.
Canalizacion, segun el procesador se varian el numero de etapas en la ejecucion de intrucciones, aca se modela un canalizacion de 6 etapas, en las cuales son
|1) Unidad de interdace de BIU, accede a la memoria y proporciona operacciones de entrada y salida
|2) Unidad de busqueda anticipada de codigo, recibe las instruciones de la BIU y las almacena en la cola de instrucciones
|3) Unidad de decodificacion de instrucciones, recibe las instrucciones de la cola de instrucciones y las traduce a microcodigo
|4) Unidad de ejecucion, Ejecuta las instrucciones despues de decodificarlas
|5) Unidad de segmentacion, Traduce las direccione logicas en direcciones lineales, y realiza compraciones de proteccion
|6) Unidad de paginacion, Traduce las direcciones lineales a direcciones fisicas
la canalizacion permite procesar varias tareas en un mismo ciclo de reloj, por ejemplo en la ejecucion de un proceso.
___________________ -> NO CANALIZADA ___________________ -> CANALIZADA ___________________ -> ATASCO
|S1|S2|S3|S4|S5|S6| |S1|S2|S3|S4|S5|S6| |S1|S2|S3|S4|S5|S6|
|-----------------| |-----------------| |-----------------|
C1|1 |__|__|__|__|__| Accede a la memoria C1|1_|__|__|__|__|__| 1-2 Accede a la memoria C1|1_|__|__|__|__|__|
I2|__|1_|__|__|__|__| Pone la Instruccion en la cola de instrucciones I2|2_|1_|__|__|__|__| 1-2 ... I2|2_|1_|__|__|__|__|
C3|__|__|1_|__|__|__| Decodifica la instruccion a micro-codigo C3|__|2_|1_|__|__|__| 1-2 ... C3|3_|2_|1_|__|__|__|
L4|__|__|__|1_|__|__| Ejecuta el micro-codigo L4|__|__|2_|1_|__|__| 1-2 ... L4|__|3_|2_|1_|__|__|
O5|__|__|__|__|1_|__| ??? O5|__|__|__|2_|1_|__| 1-2 ... O5|__|__|3_|1_|__|__| S5 -> Requiere 2 Ciclos de reloj
S6|__|__|__|__|__|1_| ??? S6|__|__|__|__|2_|1_| 1-2 ... S6|__|__|__|2_|1_|__|
7|__|__|__|__|__|2_| 1-2 ... 7|__|__|__|2_|__|1_| <---> Congestion
8|__|__|__|3_|2_|__| <---> Congestion
9|__|__|__|3_|__|2_| <---> Congestion
10|__|__|__|__|3_|__| <---> Congestion
11|__|__|__|__|__|3_| <---> Congestion
## Perifiericos
_______________
| |
| PUENTE |-R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R-R
| SUR |-R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R-R
| (CHIP) | BUS R| |R
|_____________| R| |R
R| |R ------
R| |R | |Tarjetas
R| |R | |*PCI(Interconexión de Componentes Perifericos) Puerto paralelo: impresoras
R| |R BUS |I |*IDE/MOUSE a velovidad de 1MB por segundo
____ R| |R |O |*SATA/TECLADO _____________ bits en parelo.
Tarjetas| | R| |R | |*USB --R--R--R--R--R--R--R--R--R--R---R---R---|CONCENTRADOR| Puerto serie:RS-232 bit en secuencia
*VIDEO | | ___R|____|R____ BUS DEL SISTEMA |__|*ETHERNET/BLUETOOTH |____USB_____| mas distancia.
*PCI | | | | *BIOS | IDE: dispositivo electronico
Express |I |-R--R--R| PUENTE |-R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R- |2.0(480)Megabiys/s Inteligente.
(2Vias) |O |-R--R--R| NORTE |-R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R--R- Dispositivo
| | | (CHIP) | R| R| R|
| | |_____________| R| R| R| BUS
## |CPU| UNIDAD CENTRAL DE PROCESAMIENTO
__________________________________________
| | |Registros__|
| R | ALU |AX|BX|CX|DX| (AX/2)Acumulador, (BX/2)Base, (CX/2)Contador-Automatico, (DX/2)Datos.
| O | Operaciones |__|__|__|__| (SI) y (DI) indican el índice fuente y destino respectivamente.
| M | Logicas(+-*) |SI|DI|BP|SP| (BP) y (SP) indican el puntero base y el puntero de la pila respectivamenete.
|____________|_______________|__|__|__|__| (CS) registro segmento de código. Establece al área donde se halla el programa en ejecución.
| | | | | | | Registros de Segmento
| | |CS|DS|SS|ES| (DS) registro segmento de datos. Especifica la zona donde el programa lee y escribe.
| FPU | CU |__|__|__|__| (SS) registro segmento de pila. Especifica el área donde se encuentra la pila del sistema.
| | Unidad |IP| | (ES) registro segmento extra.
| | Control |__|________| (IP) Puntero de instruccion, Direccion de la siguiente instruccion.
|____________|_______________|Flags______| (CF)(Carry) Resultado de operaccion aritmetica sin signo es demaciado grande.
| CISC set |OF|DF|IF|TF| (OF)(Overflow) Resultado de operaccion aritmetica con signo es demaciado grande o pequeña.
| RISC intrucciones |SF|ZF|AF|PF| (SF)(Signed) Resultado negativo.
| EPIC |CF| | (CISC) Cojunto de Intruciones Complejas(Decodifica y Codifica).
| VLIW ----------------------|--|--------| (RISC) Conjunto de Instruciones reducido(Decodifica y ejecuta).
RELOJ
Cache de Codigo
BUS
(20^2bits) R| |R
Unidireccional R| |R |--> ALU 83 C0 01
| R| |R | Instruciones = MOV
| R| (|R) <- BUS DE DATOS(16/32/64^2 bits) | P1 Registros -> EAX = EAX = 0000 0000 0000 0001(EAX = 16 bits) <- 01
| R| |R <- Socks tipo SIMM(Viejo)/DIMM(Moderno-Doble cara de los pines) | P2 Valor -> 01 = 01
| R| |R (dual/single) in-line memory module |
| R| |R |
| MEMORIA(RAM) EJECUCION DE UN PROGRAMA (CICLOS DE EJECUCION DE INSTRUCCION) |
|-------------------------------------------------------------------| |
| TABLA DE DESCRIPTORES LOCALES(LDT) | |
|-------------------------------------------------------------------| |
| BASE |LIMITE |ACCESOS | | |
| 00026000 |0010 |26000+10| Espacio de segmento | |
| 00008000 |000A | 8000+A | ... | |
--------------------------------------------------------------------- |
|->00000 |SEG0---|FFFFF |Valor | (En caso de bus de datos de 8 bits) |
| |64kbytes D 76543210 -> Posicion de bits |
| | | E | .... | |
|1MB | | S 00000100 -> Estado de Bits (condensador) |
|20^2bit | | P |+ |- -> Valor de estado(valor significativo) |
|FFFFF | C | L |+/-? | -> Signo? (1 = - | -127 a 127) (0 = + | 0 a 255) |
| | O | A | | -> BIN -> DEC |
| | D | Z | | (2^0 = 1)(2^2 = 4)(2^4 = 16) // Notacion posicional ponderada |
| | E | A | | (2^1 = 2)(2^3 = 8) |
| | | M | | -> 00010401 = 21(DECIMAL) |
| | (CS) | I | | 6 |
| | | E | | DEC -- BIN |
| | | N | | 21 -> 21/2 = 1^ = 00010101 |
| | | T | | -> 10/2 = 0| |
| | | O | | -> 5/2 = 1| |
| | | | | -> 2/2 = 0| |
| | | | | -> 1/2 = 1| |
| | | | | |
| | | | | 16bits |
| |0001 | 0001|83C002| MOV EAX, 01 -> 00010001 --> Direccion de Seg + Desplazamiento |
| | | | | 83 C0 01 -> OP CODE de la instruccion = mov eax, 01 -->--->--->-|
| | | | | 1 1 1 = 0001 + 3 = 0004 siguiente direccion
| |0001 | 0004|??????| ??? ??? ?? -> 00010004 --> Direccion de Seg + Desplazamiento + Expansion consumida del opcode anterior.
| | | | |
| | | | |
| | | | | -> (Es de tamaño fijo y de solo lectura. En esta parte se almacenan todas y cada una de las instrucciones)
| | | | |
| | | | |
| | | | |
| | | | | |-> 0001 0020 ----
| |0001 | 0004|89C039| JMP Suma |
| |0001 | 0008|30A012| MOV EAX, 12 |
| | | | | |
| | | | | |
| | | | | |
| |0001 | 0020|??????| Suma <----------------+> Marco de pila del procedimiento "Suma"
| | | |??????|
| | | |??????|
| | | |796056| RET (JMP EBP Guardado en SS) CS:0001 0008
| | | | |
| |SEG1---|000000| |
| | | 00010000 -> Suma
| | | | | -> 00100101
| | | | | <- Acarreo(Carry
| | | | |
| | | 10000010 -> Notacion de complemento a dos, Inverso aditivo (7 bit = 1) Byte con Signo establecido
| | | | | 01111101 -> Inverso
| | | | | 00000001 -> aditivo
| | | | | 01111110 -> resultado -127 (DECIMAL
| | D | | |
| | A | | |
| | T | | |
| | A | | |
| | | | |
| | (DS) | | | -> (Aquí se almacenan las variables globales inicializadas del programa. De tamaño fijo y
| | | | | permite la escritura, se puede escribir en él
| | | | |
| | | 00011111 -> BIN -> Hexadecimal
| | | 1HX|2HX---> 1 Valor en HEX = 4 bits = Nibble
| | | | | 0000 = 0 1001 = 8
| | | | | 0001 = 1 1010 = 9
| | | | | 0010 = 2 1011 = (10)A
| | | | | 0011 = 3 1100 = (11)B
| | | | | 0100 = 4 1101 = (12)C
| | | | | 0101 = 5 1110 = (13)D
| | | | | 0111 = 6 1110 = (14)E
| | | | | 1000 = 7 1111 = (15)F
| | | | | -> 00018421 = 1F(HEXADECIMAL
| | | | | 6 = F+8+4+2+1 = 31(DECIMAL
| | | | |
| | | | |
| |SEG2---| | |
| | | | |
| | S | | |
| | T | | |
| | A | | |
| | C | | |
| | K | | |
| | | | |
| | (SS) | | | -> (en forma temporal, direcciones de retorno, argumentos de procedimientos, datos de memoria, banderas o registros) (LIFO)
| | | | |
| | | | | | -----------------------ESP - TOP STACK
| | | | | | | Marco Previo |
| | | | | | |----------------------
| | | | | | | Argumentos |
| | | | | | |---------------------|
| | | | | | | Direccion de Retorno|
| | | | | | |---------------------|
| | | | | | | Direccion de Marco |
| | | | | | | Anterior EBP |
| | | | | | |---------------------|
| | | | | | | Variables locales |
| | | | | V |---------------------|EBP - BASE STACK
| | | | |
| |SEG3---| | |
| | | | |
| | (BSS) | | | -> (Aquí se almacenan las variables globales sin inicializar. De tamaño fijo y permite la escritura, se puede escribir en él.)
| | | | |
| |SEG4---| | |
| | | | |
| | HEAP | | | -> (Segmento de memoria reservado para la memoria dinámica del programa.)
| | | | |
| | | | |
| | | | |
| | | | | ASCII por ANSI
| | | 01000001 = 65 = A (Caracter)
|->FFFFF |-------|------|------|
| | | |-> Valor en memoria
| | |--------> Desplazamiento en el segmento.
| |---------------> Memoria segmentada.
|------------------------> Posibles Direcciones de memoria.
|-------|-------+-----| -> Direccion Lineal (Direccion de segmento + Direccion de desplazamiento)
CS-DS
ES-SS
| 08F1 + 0100 | ->Conversion a direccion lineal(Segmento * 16(10h) + Desplazamiento)
08F1 * 10h = 08F10 -> Valor se segmento ajustado
08F1 + 0100 = 09010 -> Direccion lineal
## Portabilidad-Resndimiento
(Portabilidad)^ _________________________
|--------|PROGRAMA DE APLICACION | -------> C, C++, JAVA Funcion
| -3-----------------------
| |
| -------------------------
|--------| Funcion del OS | -------> APIS(Archivos, Usuarios, ETC)
| -2-----------------------
______ | |
|ASM_|----------|---------------------------------
| | Funcion BIOS | -------> Subrutina
| -1-----------------------
| |
| -------------------------
|--------| HARDWARE |-------> Periferico(Video, Audio, Camara)
V -0-----------------------
(Rendimiento) NIVEL
## Espacios
Kilobyte (2^10) 1024 bytes(mil)
Gigabyte (2^30) 1,073,741,824 bytes(mil-millones)
Petabyte, Exabyte, Zettabyte, Yottabyte
ROM(Se quema y no se puede borrar)
EPROM(Se quema y se puede borar y requemar)
DRAM(Se tiene que actualizar en un lapso de 1milisegunto)
SRAM(Mantiene los datos y es veloz pero es costosa, la usa la CPU)
VRAM(video RAM)
RAM DE CMOS(Contiene la informaccion de la tarjeta madre, esta conectada a una bateria)
## Modos de Operacion
Modo de proteccion: en el procesador esta disponible todas las intrucciones y los procesos estan en segmentos separados, y se restringe el acceso a otros segmentos(4GB de memoria por proceso)
Modo direccionamiento real: caracteristicas adiccionales como la capadidad de cambiar a otros modos, y acceder a el hardware
Modo de administracion del sistema: Configuracion de energia y ajustes del sistema.
Registro del sistema, son registros especiales que se usan para acceder a el hardware y se requieren un nivel de privilegio de nivel 0 (nucleo).
IDTR(Registro de tabla de descritopres de interrupcuibes) : proporciona medias para manejar rutunas dirseñadas para responder eventos como el del teclado y mouse.
paginacion, los programas usan el disco duro para guardar tareas cuando la memoria esta en su total uso, pero el disco duro trabaja mas lento que la memoria esto hace que el proceso sea mucho menor si se esta en la memoria(RAM)
## CONSTANTES ENTERAS
[] opcionales
{} requerido
| opciones
|------------------> h = Hexadecimal r = Real codificado
| q/o = Octal t = Decimal Alternativo
[{+|-}] digitos[raiz] d = Decimal y = Binario Alternativo
| b = Binario
|---> Signo (Positivo/negativo)
EXPRESIONES ENTERAS(expresiones matematicas que poseen valores enteros y operandos)
----------------------------------
la precedencia se refiere al orden |Operador|Nombre |precedencia|
implicito de las operaciones en una ----------------------------------
expresion entera tiene 2 o mas | () |Parentesis | 1 | 8 + (7+1) = (7+1) + 8
operadores. | + , - |Unarios | 2 | -1 + 3 = -1 + 3
| * , / |Mul, Div | 3 | 3 + 3 * 3 = 3 * (3+3)
| MOD |Modulo | 4 | 12 - 1 mod 5 = mod 5 12-1
| + , - |Suma, Resta| 5 | 2 + 2 = 2 + 2
----------------------------------
CONSTANTES DE TIPO CARACTER
son caracteres que se guardan en memoria en ASCII binario se representan con comillas dobles("") o comillas simples('')
CONSTANTES DE TIPO CADENA
igual que el anterior pero en una cadena de caracteres
cadena BYTE "HOLA, MUNDO",0
cadena BYTE "HOLA, MUNDO" \
"HOLA, MUNDO",0
cadena BYTE "HOLA, MUNDO"
BYTE "HOLA, MUNDO",0dh,0ah ; 0dh = \CR\LF\ retorno de carro\avance de linea
BYTE "HOLA, MUNDO",0dh,0ah,0
_Identificadores
son los que se usan para identifacar una variable constante, un procedimienyo o una etiqueta de codigo,
* 1 - 247 de longitud
* No son sensibles a mayusculas (Cuando especificas -Cp en el compilador sera sensible a mayuculas)
var1 $primero
_main __12345
_Directivas
son comandos que se incrustan en el codigo fuente, que el ensamblador reconoce y actua en base a el, esta no se llevan a cabo en tiempo
de ejecucion.
miVar DWORD 26 ; directiva
|----------->
.data .code .stack
_Instrucciones
una instruccion es un enunciado que se vuelve ejecutable cuando se ensamble el programa
INCION : MOV AEX, 10 ; SUMA
[etiqueta:] nemonico operando(s) [;comentario]
_Etiquetas de datos
una etiqueta de datos identifica la ubicacion de una variable:
ARREGLO DWORD 1024, 2048
DWORD 4096, 9822
_Comentario
;
COMMENT {simbolo}
...
...
{simbolo}
CONSTANTES NUMERICAS REALES
numeros reales que se representan como reales decimales o reales codificados.
[{+|-}]entero.[entero][E[{+|-}]entero] -44.2E+05
INICIALIZADOR
inicializa las variables con un valor random ?
VALOR BYTE ?
DUP
asigna a todos los elementos de datos un valor
BYTE 20 DUP(0) ; 20bytes, todos son 0
BYTE 20 DUP(?) ; 20bytes, sin "inicializar"
BYTE 5 DUP("PILA") ; 20bytes: "PILAPILAPILAPILAPILA"
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
TITLE PROGRAMA EN ENSAMBLADOR -----> Titulo
.data
val0 dword 10000h -----> int val0 = 10000h;
val1 dword 20000h
val2 dword 30000h
.code -----> Inicio del segmento de codigo
main PROC -----> Main(){
mov eax, 5 -----> int a = 5; //Mueve 5 a EAX (Nemonico)
add eax, 6 -----> a += 6; //Agrega 6 a EAX (Nemonico)
mov eax, 0 -----> a = 0; //Reset EAX
add eax, val0 -----> A += 10000h;//Agrega 100000h a EAX
.data
valtemp byte ? -----> Variable "dentro" del segmento de codigo
.code
exit -----> exit(); //Termina la ejecucion (Nemonico)
main ENDP -----> }
END main
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
##CICLOS DE ENSAMBLADO-ENLAZADO-EJECUCION
_______________ ________________ ______________
| ARCHIVO DE | Ensamblado |ARCHIVO DE | Enlazador |ARCHIVO | CARGADOR DEL OS
| CODIGO |------------> |CODIGO OBJETO |------------> | EJECUTABLE | ---------------> | RESULTADOS
|-------------| | |______________| | |____________|
| ________________ | ______________
|----> |ARCHIVO DE | |--->|ARCHIVO DE |
|LISTADO | | MAPA |
|--------------| |-------------|
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment