[go: up one dir, main page]

0% encontró este documento útil (0 votos)
139 vistas7 páginas

Parte Reporte Ensamblador

El documento presenta los objetivos de introducir conceptos teóricos y prácticos de lenguaje ensamblador sin complejidad excesiva, comprender el uso de registros y direccionamiento, y analizar las ventajas de lenguaje ensamblador para optimizar programas. También describe la importancia de lenguaje ensamblador para acceder fácilmente a recursos del sistema, comprender el funcionamiento del procesador y memoria, y su transparencia para depuración. Finalmente, explica conceptos como registros, interrupciones, definición de datos y llamadas

Cargado por

paulo balbino
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
139 vistas7 páginas

Parte Reporte Ensamblador

El documento presenta los objetivos de introducir conceptos teóricos y prácticos de lenguaje ensamblador sin complejidad excesiva, comprender el uso de registros y direccionamiento, y analizar las ventajas de lenguaje ensamblador para optimizar programas. También describe la importancia de lenguaje ensamblador para acceder fácilmente a recursos del sistema, comprender el funcionamiento del procesador y memoria, y su transparencia para depuración. Finalmente, explica conceptos como registros, interrupciones, definición de datos y llamadas

Cargado por

paulo balbino
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

Objetivos

• Tener introduccion al tema del lenguaje ensamblador, asi mismo analizando los
conceptos teoricos y practicos sin llegar a tomarlo en plano complejo.

• Comprender el uso de sus diferentes tipos de registros y del mismo procesador,


conocer las llamadas al sistema y las interrupciones.

• Analizar y diferenciar los diferentes tipos de direccionamiento.

• La utilizacion efectiva de lenguaje ensamblador es importante, por la cual nos permita


identificar las ventajas que nos ofrece para realizar un programa adecuado, que otros
lenguaje a un mas alto nivel no pueden solucionar por su tipo de complejidad.

La importancia del lenguaje ensamblador

El lenguaje de ensamblador, es un lenguaje de programación de bajo nivel. El lenguaje


ensamblador tiene una correspondencia muy fuerte con la instrucción de código de máquina
de la arquitectura y es específico solo para esa máquina. Por lo tanto, diferentes máquinas
tienen diferentes lenguajes de ensamblaje. Este tipo de lenguaje hace uso de símbolos para
representar una operación o instrucción. Por lo tanto, también se conoce a menudo como
código de máquina simbólico.

A continuacion se muestran unos puntos por el cual es muy necesario conocer y saber del
lenguaje ensamblador:

Maneja los recursos del sistema fácilmente

El lenguaje ensamblador es el más cercano al procesador de una máquina. También puede


escribir códigos para acceder a los registros e incluso tratar con direcciones de memoria
directamente para recuperar valores y punteros. Por lo tanto, el programador se beneficia
enormemente ya que la eficiencia, el rendimiento y la optimización de velocidad se manejan
fácilmente.

Comprende el procesador y la función de memoria


Un compilador o un controlador de dispositivo, merece una comprensión completa de la
función del procesador es una gran ventaja. Entonces, en este caso, la mejor opción es
escribir un código en lenguaje ensamblador y ver cómo funcionan el procesador y la
memoria. Sin embargo, una cosa a tener en cuenta es que el lenguaje ensamblador es
simbólico, por lo que puede parecer críptico.

El lenguaje ensamblador es transparente

En comparación con los lenguajes de alto nivel, que en su mayoría son tipos de datos
abstractos, el lenguaje ensamblador es simple y transparente. Esto es en gran parte debido a
que tiene un número pequeño de operaciones. Por lo tanto, esto es muy útil para el análisis
de algoritmos, que consta de semántica y flujo de control. También facilita la depuración, ya
que es menos complejo. En general, hay menos gastos generales en comparación con los
idiomas de alto nivel.
El procesador y sus registros internos
Las principales herramientas para escribir programas en el ensamblaje x86 son los registros
del procesador. Los registros son como variables integradas en el procesador. El uso de
registros en lugar de memoria para almacenar valores hace que el proceso sea más rápido y
más limpio. El problema con la serie de procesadores x86 es que hay pocos registros para
usar. Algunas operaciones necesitan absolutamente algún tipo de registros, pero la mayoría
de ellos puede usar cualquiera de los libremente.
Linux system calls in your assembly programs. You need to take the following steps for using
Linux system calls in your program −

Put the system call number in the EAX register.


Store the arguments to the system call in the registers EBX, ECX, etc.
Call the relevant interrupt (80h).
The result is usually returned in the EAX register.

Registros generales
Como dice el título, el registro general es el que usamos la mayor parte del tiempo. La
mayoría de las instrucciones se realizan en estos registros. Todos ellos se pueden dividir en
registros de 16 y 8 bits.

32 bits: EAX EBX ECX EDX


16 bits: AX BX CX DX
8 bits: AH AL BH BL CH CL DH DL

El sufijo "H" y "L" en los registros de 8 bits significa byte alto y byte bajo. Con esto fuera del
camino, veamos su uso principal individual

EAX, AX, AH, AL: se llama registro de Acumulador.


Se usa para acceso de puerto de E / S, aritmética, llamadas de interrupción, etc ...

EBX, BX, BH, BL: llamado el registro Base


Se utiliza como un puntero de base para el acceso a la memoria
Obtiene algunos valores de retorno de interrupción
ECX, CX, CH, CL: llamado el registro de contador
Se usa como un contador de bucle y para turnos
Obtiene algunos valores de interrupción

EDX, DX, DH, DL: llamado el registro de datos


Se utiliza para el acceso al puerto de E / S, aritmética, algunas interrupciones llamadas.

Registros de segmento
Los registros de segmento contienen la dirección del segmento de varios elementos. Solo
están disponibles en 16 valores. Solo pueden establecerse mediante un registro general o
instrucciones especiales. Algunos de ellos son fundamentales para la buena ejecución del
programa y es posible que desee considerar jugar con ellos cuando esté listo para la
programación de múltiples segmentos.

CS: contiene el segmento de código en el que se ejecuta su programa. Cambiar su valor


puede hacer que la computadora se cuelgue.

DS: contiene el segmento de datos al que accede su programa. Cambiar su valor podría dar
datos erróneos.

ES, FS, GS: estos son registros de segmentos adicionales disponibles para direccionamiento
de puntero lejano como memoria de video y tal.

SS: Mantiene el segmento Stack que usa su programa.


A veces tiene el mismo valor que DS.
Cambiar su valor puede dar resultados impredecibles, en su mayoría relacionados con datos.

Concepto de interrupciones

El mecanismo de interrupción es una de las características más importantes de un


microcontrolador. Una interrupción es una señal al procesador emitida por hardware o
software que indica un evento que necesita atención inmediata. A medida que el tamaño del
código aumenta y su aplicación maneja múltiples módulos, la codificación secuencial sería
demasiado larga y compleja. El mecanismo de interrupción ayuda a integrar su software con
el hardware de una manera mucho más simple y eficiente. En este tema, discutiremos cómo
implementar un mecanismo básico de interrupción.

Un mecanismo frecuentemente usado por los Sistemas Operativos para permitir que se les
realicen llamadas al sistema (syscalls) son las interrupciones software (que son instrucciones
programadas, en oposición a las interrupciones hardware o las excepciones). El mecanismo
de interrupción permite el cambio a espacio kernel (en oposición al espacio de usuario). El
uso de la interrupción 80h (su funcionalidad se podría equiparar a la 21h del MSDOS) para
mostrar la cadena de texto y para terminar el programa y salir al SO.
De hecho, la interacción con el sistema operativo se lleva a cabo a través de las llamadas al
sistema (al kernel, realmente) a través de esta interrupción.
Al igual que cuando usábamos la interrupción 21h en MSDOS, ahora debemos indicar
en EAX la función del sistema que queremos usar.

Llamadas a servicios del sistema

Syscalls es la interfaz entre los programas de usuario y el núcleo de Linux. Se utilizan para
permitir que el kernel realice varias tareas del sistema, como el acceso a archivos, la gestión
de procesos y la conexión en red. En el lenguaje de programación C, normalmente se llama
a una función wrapper que ejecuta todos los pasos necesarios o incluso utiliza funciones de
alto nivel como la biblioteca IO estándar.

En Linux, hay varias maneras de hacer una llamada al sistema. Esta página se centrará en
hacer syscalls llamando a una interrupción de software usando int $0x80 o syscall. Este es
un método fácil e intuitivo para hacer llamadas al sistema en programas sólo de
ensamblador.

Para hacer una syscall usando una interrupción, tiene que pasar toda la información
requerida al kernel copiándola en registros de propósito general.

Cada llamada al sistema tiene un número fijo (nota: los números difieren entre int $0x80 y
syscall!). Usted especifica la llamada al sistema escribiendo el número en el registro eax/rax.

La mayoría de las llamadas al sistema toman parámetros para realizar su tarea. Estos
parámetros se pasan escribiéndolos en los registros correspondientes antes de realizar la
llamada. Cada índice de parámetros tiene un registro específico. Vea las tablas en las
subsecciones ya que la asignación difiere entre int $0x80 y syscall. Los parámetros se pasan
en el orden en que aparecen en la firma de función de la función de envoltura C
correspondiente. Puede encontrar funciones syscall y sus firmas en cada documentación de
la API de Linux, como el manual de referencia (tipo man 2 abierto para ver la firma de la
syscall abierta).

Definición de datos
Las directivas básicas para definir datos son las siguientes:
 DB Define Byte, 1 byte
 DW Define Word, 2 bytes
 DD Define Double Word (4 bytes)
 DQ Define Quad Word (8 bytes)
DT Define Ten Bytes (10 bytes; aunque parezca muy raro, cuando veas el coprocesador no
podrás vivir sin ella).
Ejemplos:
db 'Hola mundo' ;es cierto, es una cadena
dw 12,1; 0C00h 0100h (ordenación Intel, no se te olvide)
dt 3.1415926535; representación en coma flotante de 10 bytes PI
Lo de definir números reales se puede hacer con DD (precisión simple, 32 bits), DQ
(precisión doble, 64 bits) y DT (a veces llamado real temporal, una precisión de la leche, 80
bits; uno para el signo, 64 para la mantisa'). Los caracteres ascii van entrecomillados con '';
cuando el ensamblador encuentre un carácter entre comillas simples lo sustituye por el valor
numérico del código ascii correspondiente.
Para reservar zonas amplias de memoria se empsystem calls linux assembly x86lean RESB
y demas, que lo que hacen es dejar hueco para N bytes, palabras (RESW), paSystem calls
are APIs for the interface between the user space and the kernel space. We have already
used the system calls. sys_write and sys_exit, for writing into the screen and exiting from the
program, respectively.

Linux System Calls


You can make use of Linux system calls in your assembly programs. You need to take the
following steps for using Linux system calls in your program −

Put the system call number in the EAX register.


Store the arguments to the system call in the registers EBX, ECX, etc.
Call the relevant interrupt (80h).
The result is usually returned in the EAX register.
There are six registers that store the arguments of the system call used. These are the EBX,
ECX, EDX, ESI, EDI, and EBP. These registers take the consecutive arguments, starting with
the EBX register. If there are more than six arguments, then the memory location of the first
argument is stored in the EBX register.labras dobles (RESD), palabras cuádruples (RESQ) o
bloques de 10 bytes (REST).
resb 10 ;deja un hueco de 10 bytes sin inicializar
resq 4*4 DUP (1) ;espacio para una matriz 4x4 (16 reales de precisión doble)
Una directiva muy peculiar, de uso muy esporádico pero muy interesante, es INCBIN; lo que
hace es incluir dentro del código el contenido binario de un archivo dado. Puede ser útil, por
ejemplo, para incrustar pequeñas imágenes o logotipos dentro del ejecutable:
incbin "datos.dat" ;ensambla introduciendo datos.dat en este punto
incbin "datos.dat",100 ;incluye datos.dat, excepto los primeros 100 bytes
incbin "datos.dat",100,200 ;incluye los 200 bytes siguientes a los 100 primeros de datos.dat

Direccionamiento

Modo de direccionamiento inmediato


El modo inmediato es la forma más simple de direccionamiento. El operando es parte de la instrucción
y, por lo tanto, ninguna referencia de memoria, distinta de la instrucción, es requerida para recuperar el
operando. Este modo es rápido y se puede utilizar para definir constantes o establecer valores de
variables iniciales. Este modo tiene un alcance limitado, ya que es limitado al tamaño del campo de
dirección, que para la mayoría de los conjuntos de instrucciones es pequeño en comparación con la
longitud de palabra.
Modo de direccionamiento directo
En el modo directo, el campo de dirección contiene la dirección del operando. Se requiere una única
referencia de memoria para leer el operando de la localización dada. Sin embargo, sólo proporciona un
espacio de direcciones limitado.

https://stackoverflow.com/questions/17881233/registers-and-interrupts-in-assembly
Modo de direccionamiento indirecto
En el modo indirecto, la celda de memoria a la que apunta el campo de dirección contiene la dirección
del operando (puntero), que a su vez contiene la dirección de longitud completa del operando. Este
modo tiene un espacio de direcciones grande, a diferencia del direccionamiento inmediata y el directo,
pero debido a que se requieren múltiples accesos de memoria para encontrar el operando es más lento.
Modo de direccionamiento de registro
El modo de registro es similar al modo directo. La diferencia clave entre los dos modos es que el
campo de dirección de la instrucción se refiere a un registro en lugar de una posición de memoria. El
direccionamiento de registro no tiene una dirección eficaz. Tres o cuatro bits son utilizados como
campo de dirección para hacer referencia a los registros.
Modo de direccionamiento indirecto de registro
Este modo es similar al direccionamiento indirecto. El operando se encuentra en una celda de memoria
apuntada por contenido de un registro. El registro contiene la dirección efectiva del operando. Este
modo utiliza menos acceso de memoria que el direccionamiento indirecto. Este modo tiene un espacio
de direcciones grande, pero es limitado al ancho de los registros disponibles para almacenar la
dirección efectiva.
Modo de direccionamiento de desplazamiento
El modo de desplazamiento consiste en tres variaciones:
1) Direccionamiento relativo
2) Direccionamiento de registro base
3) Direccionamiento de índice
Este modo puede considerarse una combinación del modo de direccionamiento indirecto y de registro.
La dirección tiene dos valores: el valor base y un registro que contiene un desplazamiento entero que es
sumado o restado de la base para formar la dirección efectiva de la memoria.
Modo de direccionamiento de pila
El modo de pila, también conocido como direccionamiento implícita, consiste en un conjunto lineal de
ubicaciones referidos al último que entra y primero en salir. El operando está en la parte superior de la
pila. El puntero de la pila es un registro que almacena la dirección de la parte superior de la ubicación
de la pila.

 http://galia.fc.uaslp.mx/~cantocar/ARQUI_COM_II/LIBRO%20IBM-PC/05.htm
 https://www.alpertron.com.ar/INST8088.HTML
 https://stackoverflow.com/questions/17881233/registers-and-interrupts-in-
assembly

También podría gustarte