Created
January 19, 2022 03:41
-
-
Save RedToor/bb9a96fb93b154cbe39cf92f9f35cf21 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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