D

Daviavi

Usuario (España)

Primer post: 18 oct 2014Último post: 7 may 2015
2
Posts
20
Puntos totales
0
Comentarios
P
Programación en ensamblador 2
Apuntes Y MonografiasporAnónimo5/7/2015

Conjunto de instrucciones en ensamblador Comenzamos este segundo post explicando el conjunto de instrucciones para nuestro Intel IA32(x86). Las instrucciones más importantes a la hora de operar con los datos en un computador son las instrucciones de movimiento y almacenamiento de datos(almacenar, guardar en un registro, mover), conversión de datos(extensor de bits) , las instrucciones aritméticas(operación con datos) y por último las instrucciones de salto(ejecución de otras lineas de programa). Como nota aclaratoria, informar de que destino y fuente pueden ser tanto registros como direcciones de memoria. Aun así, no se puede operar con dos elementos de memoria, esto es, destino y fuente no pueden estar ambos en memoria. En cambio ,si ambos son registros, sí. Instrucciones de movimiento y almacenamiento de datos mov destino , fuente Mueve lo que haya en fuente en destinolea destino, fuente Guarda la dirección de fuente en destinoxchg destino, fuente Intercambia los datos de fuente y destinocmovcc destino, fuente Mueve fuente a destino de manera condicional Conversión de datos cbw fuente Transforma el contenido de fuente de byte a palabra(16 bits)cwq fuente Extiende el contenido de fuente de palabra a 32 bitscdq fuente Extiende el contenido de fuente de 32 a 64 bit Mixtos(con extensión de signo) mov sx destino, fuente Mueve lo que haya en fuente a destino, con extensión de signomov zx destino, fuente Mueve lo que haya en fuente a destino, sin ext. de signo Aritméticas y lógicas add destino, fuente Realiza la suma de fuente y destino y lo guarda en destinosub destino, fuente Hace la resta de destino-fuente y lo guarda en destinomul fuente Multiplica fuente por lo que haya en el registro eax y guarda el resultado desde edx hasta eax dependiendo del tamañoimul fuente Multiplica la fuente por un inmediato(número entero) almacenado en eax y se almacena desde edx hasta eaximul destino, fuente Multiplica fuente por un inmediato guardado en destino y se almacena el resultado desde edx hasta eax.imul destino, fuente,inmediato Multiplica fuente por inmediato y lo guarda en destinodiv fuente Divide el número contenido entre edx y eax entre fuente, y almacena el resultado en eax y el resto en edxidiv fuente and destino, fuenteor destino, fuentexor destino , fuentemeg fuente

20
0
P
Programación en ensamblador 1
LinuxporAnónimo10/18/2014

Como sabemos, el ensamblador es un lenguaje de programación de computadores de bajo nivel, cercano al lenguaje entendido por la máquina u ordenador(el lenguaje máquina). Con la programación, indicamos al computador que cálculos debe realizar para llevar a cabo una tarea. En este primer post vamos a explicar conceptos de programación en ensamblador sencillos utilizando la arquitectura del conjunto de instrucciones Intel IA32 en máquinas UNIX/Linux. A pesar de que esta arquitectura posee un 32 en el nombre, en ella se trabaja tanto con 32 bits como con 64, lo cual parece bastante divertido. Nuestra IA 32 pues posee tres cosas que nos van a ser de gran utilidad: 1. Registros: Son algo parecido a contenedores de datos. Conforman la memoria que está integrada en el procesador, y que , por supuesto, es la más rápida. Hay un número limitado de ellos, y pueden contener un número limitado de bits. Si el programa que estamos realizando no es muy extenso y no exige muchas variables y constantes, utilizaremos exclusivamente registros para su implementación.En nuestro caso, en principio solo tendremos a nuestra disposición 6 registros de 32 bits. Los registros disponibles son: -EAX: El registro EAX tiene 32 bits y es una extensión del antiguo registro AX de 16 bits. Sirve para almacenar datos. -EBX: Con este registro ocurre lo mismo que para el anterior, y su uso es igual. -ECX: Misma situación que en los dos anteriores e igual uso. -EDX: Semejante a los otros tres. Los antiguos registros AX, BX, CX, DX así sus subdivisiones pueden seguir siendo utilizados, porque la IA32 busca la compatibilidad hacia atrás.Sin embargo, nosotros no los utilizaremos. -ESI: Registro de almacenamiento de datos de 32 bits. Extensión del antiguo registro SI de 16 bits. -EDI: Igual que el anterior (vez de SI, DI). -Registro EFLAG: Utilizado para indicar comportamientos a la máquina y resultados de la ALU(Unidad Aritmético-Lógica). Por último, los registros de puntero de pila, ESP(Extended Stack Pointer) y de base de pila, EBP(Extended Base Pointer), que los escribe el propio ensamblador, y con los que lo único que haremos será usar su valor, nunca almacenar nada en ellos. 2. Memoria: Evidentemente, con los registros no basta a la hora de hacer un programa exigente, ya que no tenemos muchos, por lo que necesitaremos utilizar también la memoria. Esta memoria es de 2^32 bytes (1 byte=8 bits). Aquí es donde entra en juego algo de dificultad con los conceptos de pila y puntero, que explicaremos más adelante. La memoria está segmentada, esto quiere decir que está dividida en trocitos del mismo tamaño, en los que se vamos almacenando los datos de los distintos programa. Mediante ciertos mecanismos se designan trozos de memoria a cada programa. Si en nuestro proceso de creación de un programa intentamos invadir los segmentos de otro programa, estaremos cometiendo una violación del segmento. 3. Conjunto de instrucciones: Son evidentemente todas las instrucciones que se pueden utilizar para escribir nuestros programas. Las instrucciones en nuestra computadora son de distintos tipos, como explicaremos posteriormente. Finalmente, para acabar esta introducción, explicaremos los modos de direccionamiento. Un modo de direccionamiento no es más que la manera de indicar en una instrucción un operando. En IA32 hay 4 modos de direccionamiento: -Inmediato: En este modo se da el operando directamente, codificado en hexadecimal. Por ejemplo: mov eax, 0x14712847 -Registro: En este modo se indica el registro en el que se encuentra el operando a utilizar. P. ej: mov eax, ebx -Directo: Así se indica la dirección de memoria en la que está localizado el dato con el que operar. Por ejemplo: mov eax ,[0x47467647] -Indirecto: Este método se basa en un desplazamiento desde una dirección origen o registro, con el fin de acceder al dato correcto. Este modo se usa en vectores, y para elementos almacenados en la pila. Ejemplo: mov eax, 15 Aquí finaliza este post. Si alguien ve algún error en él, me gustaría mucho que me lo comunicara para corregirlo, ya que yo también estoy aprendiendo En el próximo post veremos el conjunto de instrucciones y la sintaxis. ¡Un saludo programadores!

0
0
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.