SlideShare ist ein Scribd-Unternehmen logo
1 von 3
Downloaden Sie, um offline zu lesen
SISTEMAS OPERATIVOS, ABRIL 2013 1
programacion en lenguaje ensamblador usando
NASM
Alexander Pinchao
Facultad de Ingenier´ıa en Sistemas
Escuela Polit´ecnica Nacional
alexander.pinchao@gmail.com
Resumen—
Creaci´on de un programa en lenguaje ensamblador usando el ensamblador de Linux (nasm), que defina
una variable, asigne el valor de 100 a dicha variable, posteriormente sume 9 a la variable e imprima. La
importancia de este trabajo radica en la posibilidad de manipular un valor en memoria para experimentar la
forma de trabajo de la upc con la memoria, y usar las interrupciones para realizar la impresi´on ya que este
es un m´etodo m´as f´acil de realizar la presentaci´on de los valores generados
Index Terms— nasm, ensamblador, interrupcion.
!
1. INTRODUCCI ´ON
CAda variante de procesador posee su pro-
pio lenguaje m´aquina, el cual invarian-
temente reconoce las instrucciones en forma
de n´umeros y los almacena en la memoria,
cada operaci´on posee su propio c´odigo llamado
upcode. Las instrucciones pueden variar de ta-
ma˜no, el upcode se encuentra invariantemente
al inicio de cada instrucci´on, adem´as del up-
code las instrucciones mayoritariamente suelen
llevar adem´as datos (direcciones, constantes o
variables), que van a ser usados por la instruc-
ci´on. Hay que tener en cuenta que programar
en lenguaje de maquina es muy complicado
para realizarse directamente ya que las instruc-
ciones se encuentran codificadas num´ericamen-
te y esto resulta sumamente tedioso y compli-
cado de interpretar para los humanos , para
saltar esta limitaci´on se desarroll´o el lenguaje
ensamblador el cual permite facilitar el traba-
jo al desarrollador de software, un programa
escrito en lenguaje ensamblador esta escrito y
almacenado en forma textual al igual que los
lenguajes de alto nivel, el cual se maneja con
instrucciones de forma muy sencilla como por
ejemplo: sum eax,ebx Es decir una instrucci´on
representara una operaci´on que realizara la ma-
quina en este caso sumar ebx a eax. A simple
vista se puede ver que esto es m´as f´acil de
entender y ser´ıa mucho m´as f´acil de encontrar
para una depuraci´on que 03 C3 la cual es la
forma de la instrucci´on en lenguaje puramente
m´aquina.
2. METODOLOG´IA
El lenguaje ensamblador en su estructura
m´as b´asica se puede representar en forma de
c´odigos nem´onicos, los m´as usados son: sum,
sub, mul, div, int ya que como se sabe la
computadora solo sabe sumar, restar, multipli-
car y dividir, estas instrucciones son le´ıdas por
el programa ensamblador y las transforma a
lenguaje de m´aquina, es decir como un com-
pilador en lenguaje de alto nivel, pero mucho
mas sencillo ya que en ensamblador una ins-
trucci´on es una instrucci´on en lenguaje maqui-
na con seguridad, mientras que en lenguaje
de alto nivel una instrucci´on puede necesitar
muchas instrucciones en lenguajes maquina,
adem´as de que los lenguajes de alto nivel son
iguales sin importar que tipo de maquina se
use, mientras que los lenguajes de ensamblador
SISTEMAS OPERATIVOS, ABRIL 2013 2
var´ıan con la arquitectura del procesador exis-
tiendo tres variables NASM(Netwide Assem-
bler) de Linux, MASM(Microsoft Assembler)
de Microsoft y TASM (Turbo Assembler) de
Borland. En lenguaje ensamblador la estructura
de las instrucciones es: c´odigo,operando. Los
operando puede ser de distintos tipos:
1. Registros.- Se refieren directamente a los
registros de la UCP
2. Memoria.- Son los datos almacenados en
memoria, teniendo en cuenta que la di-
recci´on de los datos puede estar descrita
en una instrucci´on o calculada usando
los valores de registros, ya que estas son
simples desplazamientos relativos al co-
mienzo de un segmento
3. Inmediato.- Son valores fijos que est´an
dentro del mismo segmento de c´odigo,
es decir se valores que est´an en ”section
.text”no en ”section .data”
4. Impl´ıcito.- Es decir aquellos que no apa-
recen de forma visible pero interact´uan
con los registros o la memoria como es
el caso de los decrementos, el cual resta
una al valor de un registro o a un valor
en memoria.
Dejando de lado por un momento de los opera-
dores, podemos decir que la instrucci´on esen-
cial en el lenguaje ensamblador es: mov, ya que
esta traslada los valores de un operando a otro
es decir realiza las funciones de un operador de
asignaci´on visto desde el punto de vista de los
lenguajes de alto nivel, la estructura base para
realizar esta operaci´on es por ejemplo: mov
eax,ebx en este fragmento de programa se a
asignado a eax el valor que esta dentro de ebx.
Pero este operando presenta la restricci´on que
los dos operandos no deben de ser operandos
de memoria, adem´as de que los operando de-
ben tener tama˜nos iguales. Lo cual nos plantea
la duda que esta bien y que esta mal, esto
se resuelve con el uso de las directivas del
programa ensamblador, las directivas son pro-
pias del lenguaje ensamblador no del lenguaje
m´aquina, y estas se usan para comunicarle al
ensamblador que realice alguna acci´on, estas se
traducen luego a c´odigo maquina, sus usos mas
comunes son:
1. Definir constantes
2. Definir la memoria para almacenar datos
en ella.
3. Agrupar la memoria en segmentos.
4. Incluir codigo fuente condicionalmente
5. Incluir otros archivos
Las directivas existentes son:
Directiva equ.- esta directiva se usa para
definir un s´ımbolo. Los s´ımbolos son cons-
tantes que poseen un nombre que puede
ser usado dentro de la estructura del pro-
grama ensamblador
Directiva %define.- es similar al define en
C, ya que genera un macro con el cual
trabajar
Algunas veces el flujo ordinario de un pro-
grama debe ser interrumpido para procesar
eventos que requieren una respuesta r´apida. El
hardware de un computador provee un me-
canismo llamado interrupci´on para manipular
estos eventos. Por ejemplo cuando se mueve el
rat´on la interrupci´on de hardware del rat´on es
el programa actual para manejar el movimiento
del rat´on (para mover el cursor del mouse,
etc) Las interrupciones hacen que el control se
pase a un manipulador de interrupciones. Los
manipuladores de interrupciones son rutinas
que procesan la interrupci´on. A cada tipo de
interrupci´on se le asigna un n´umero entero.
En el comienzo de la memoria f´ısica una tabla
de vectores de interrupci´on que contiene la di-
recci´on del segmento de los manipuladores de
la interrupci´on. El n´umero de la interrupci´on
es esencialmente un ´ındice en esta tabla. Las
interrupciones externas son levantadas desde
el exterior de la CPU (el rat´on es un ejemplo
de este tipo de interrupci´on). Muchos disposi-
tivos de E/S levantan interrupciones (teclado,
temporizador, disco duro CD ROM y tarjetas
de sonido) Las interrupciones internas son le-
vantadas desde la CPU, por una instrucci´on
de error o por una instrucci´on de interrupci´on.
Las instrucciones de error tambi´en se llaman
trampas. Las interrupciones generadas desde
la instrucci´on de interrupci´on son llamadas
interrupciones de software. DOS usa estas inte-
rrupciones para implementar su API (Interfaz
de programas de Aplicaci´on). Sistemas opera-
tivos m´as modernos (como Windows y Linux)
usan una interfaz basada en C. Muchos mani-
SISTEMAS OPERATIVOS, ABRIL 2013 3
puladores de interrupci´on devuelven el control
al programa interrumpido cuando ella culmina.
Ella restaura todos los registros con los mis-
mos valores que ten´ıan antes que ocurriera la
interrupci´on. As´ı el programa interrumpido se
ejecuta como si nada hubiese pasado (excepto
que se perdieron algunos ciclos de CPU) Las
trampas generalmente no retornan. A menudo
ellas acaban el programa.
2.1. Resultados obtenidos
Luego de haber revisado los lineamientos
de la programaci´on en lenguaje ensamblador
nos permiti´o realizar el programa solicitado del
cual paso a colocar el c´odigo fuente
section .data
m: db ”La x= ”;mensaje a mostrar
lm: equ $-m ;tama˜no del mensaje
x: db ”100”;se define el valor de la variable
xl: equ $-x ;se define el tama˜no de la variable
de: db ”9”;se define el valor de la variable 2
del: equ $-de;se define el tama˜no
se: db 10,0,0; generamos un salto de linea
sel: equ $-se; generamos el espacio
section .bss
result resw 2 ; creamos la variable resultado
section .text
global start: ;Punto de entrada para Linker
start:
mov eax,4;Especifica la llamada al sys write
mov ebx,1;Standar de Output
mov ecx,m;se pasa la direcion del mensaje
mov edx,lm;Se pasa la longitud del mensaje
int 80h;invoca la interrupcion 80h
mov eax,4;Especifica la llamada al sys write
mov ebx,1;Standar de Output
mov ecx,x;se pasa la direcion del mensaje
mov edx,xl;Se pasa la longitud del mensaje
int 80h;invoca la interrupcion 80h
mov eax,4;Especifica la llamada al sys write
mov ebx,1;Standar de Output
mov ecx,se;se pasa la direcion del mensaje
mov edx,sel;Se pasa la longitud del mensaje
int 80h;invoca la interrupcion 80h
mov eax,[m];pasamos m a un registro
mov ebx,[x];pasamos x a un registro
sub eax,’0’;transforma m de String a Entero
sub ebx,’0’;transforma x de String a Entero
add eax,ebx;Sumamos los dos valores
add eax,’0’;transforma de entero a string
mov [result],eax;almacenamos en result
mov eax,4;Especifica la llamada al sys write
mov ebx,1;Standar de Output
mov ecx,result;Se imprime resultado
mov edx,1;Standar de Output
int 80h;invoca la interrupcion 80h
mov eax,4;Especifica la llamada al sys write
mov ebx,1;Standar de Output
mov ecx,se;se pasa la direcion del mensaje
mov edx,sel;Se pasa la longitud del mensaje
int 80h;invoca la interrupcion 80h
mov eax,1;Standar de Output
mov ebx,0; se especifica el codigo de salida
int 80h;invoca la interrupcion 80h
2.2. Conclusiones
El c´odigo fuente puede ser en algunos
casos de menor tama˜no y complejidad que
el lenguaje de alto nivel
El lenguaje ensamblador nos permite in-
teractuar de manera directa a las carac-
ter´ısticas del sistema lo que puede ser
complicado de lograr con los lenguaje s
de alto nivel
La programaci´on en ensamblador nos per-
mite entender de mejor manera la forma
en la que trabaja el procesador
La programaci´on en ensamblador nos per-
mite entender como trabajan los compila-
dores y lenguajes de alto nivel
REFERENCIAS
[1] SivaramaP.Dandamudi Guide to Assembly Language
Programmingin Linux , USA Springer-Verlag Berlin
Heidelberg 2005
[2] Reiley Jeyapaul · Aviral Shrivastava, Assembly Lan-
guage Step-by-Step: Programming with Linux , USA
ACM 2009

Weitere ähnliche Inhalte

Was ist angesagt?

Unidad 2 ensamblador
Unidad 2   ensambladorUnidad 2   ensamblador
Unidad 2 ensambladoreveTalavera
 
Openmeetings+En+Xp
Openmeetings+En+XpOpenmeetings+En+Xp
Openmeetings+En+Xpguestad4dd2f
 
Administración básica de ubuntu server parte 2
Administración básica de ubuntu server   parte 2Administración básica de ubuntu server   parte 2
Administración básica de ubuntu server parte 2Santiago Márquez Solís
 
Configuracion de areas de trabajo e impresion en ubuntu
Configuracion de areas de trabajo e impresion en ubuntuConfiguracion de areas de trabajo e impresion en ubuntu
Configuracion de areas de trabajo e impresion en ubuntuJDanielBosisio
 
Presentacion
PresentacionPresentacion
Presentacioncesar4174
 
Los comandos de CMD para la terminal de Windows
Los comandos de CMD para la terminal de WindowsLos comandos de CMD para la terminal de Windows
Los comandos de CMD para la terminal de WindowsAntonio Avezon Saavedra
 
92735903 tutorial emu8086c0112
92735903 tutorial emu8086c011292735903 tutorial emu8086c0112
92735903 tutorial emu8086c0112Marco Choque
 
Exposición ted
Exposición tedExposición ted
Exposición tedCOVAEV
 
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNADArquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNADAlex Gomez
 

Was ist angesagt? (20)

UNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
UNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADORUNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
UNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
 
17 comandos basicoslinuxasoitson
17 comandos basicoslinuxasoitson17 comandos basicoslinuxasoitson
17 comandos basicoslinuxasoitson
 
Manual de Linux
Manual de LinuxManual de Linux
Manual de Linux
 
Unidad 2 ensamblador
Unidad 2   ensambladorUnidad 2   ensamblador
Unidad 2 ensamblador
 
Openmeetings+En+Xp
Openmeetings+En+XpOpenmeetings+En+Xp
Openmeetings+En+Xp
 
Administración básica de ubuntu server parte 2
Administración básica de ubuntu server   parte 2Administración básica de ubuntu server   parte 2
Administración básica de ubuntu server parte 2
 
Lenguaje máquina
Lenguaje máquinaLenguaje máquina
Lenguaje máquina
 
03.Programación en ensamblador
03.Programación en ensamblador03.Programación en ensamblador
03.Programación en ensamblador
 
Configuracion de areas de trabajo e impresion en ubuntu
Configuracion de areas de trabajo e impresion en ubuntuConfiguracion de areas de trabajo e impresion en ubuntu
Configuracion de areas de trabajo e impresion en ubuntu
 
Lenguaje Ensamblador
Lenguaje EnsambladorLenguaje Ensamblador
Lenguaje Ensamblador
 
Presentacion
PresentacionPresentacion
Presentacion
 
Que son los archivos batch
Que son los archivos batchQue son los archivos batch
Que son los archivos batch
 
Curso de batch_desde_0_por_juanla
Curso de batch_desde_0_por_juanlaCurso de batch_desde_0_por_juanla
Curso de batch_desde_0_por_juanla
 
Fase4 fernando lopez
Fase4   fernando lopezFase4   fernando lopez
Fase4 fernando lopez
 
Los comandos de CMD para la terminal de Windows
Los comandos de CMD para la terminal de WindowsLos comandos de CMD para la terminal de Windows
Los comandos de CMD para la terminal de Windows
 
92735903 tutorial emu8086c0112
92735903 tutorial emu8086c011292735903 tutorial emu8086c0112
92735903 tutorial emu8086c0112
 
Exposición ted
Exposición tedExposición ted
Exposición ted
 
Codigos de terminal linux
Codigos de terminal linuxCodigos de terminal linux
Codigos de terminal linux
 
00026966
0002696600026966
00026966
 
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNADArquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
 

Ähnlich wie NASM

Lenguaje Ensamblador00
Lenguaje Ensamblador00Lenguaje Ensamblador00
Lenguaje Ensamblador00Car_00_01
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensambladorCar_00_01
 
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONLENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONSol López
 
Coruniversitec.docx sistemas
Coruniversitec.docx sistemasCoruniversitec.docx sistemas
Coruniversitec.docx sistemasJeimicita Pte
 
Coruniversitec.docx sistemas
Coruniversitec.docx sistemasCoruniversitec.docx sistemas
Coruniversitec.docx sistemasJeimicita Pte
 
Coruniversitec.docx sistemas
Coruniversitec.docx sistemasCoruniversitec.docx sistemas
Coruniversitec.docx sistemasJeimicita Pte
 
Visual basic terminado[1]
Visual basic terminado[1]Visual basic terminado[1]
Visual basic terminado[1]Jalil Segura
 
Visual basic terminado[1]
Visual basic terminado[1]Visual basic terminado[1]
Visual basic terminado[1]Jalil Segura
 
Programación Y Simulación De Robot SCARA, documento
Programación Y Simulación De Robot SCARA, documentoProgramación Y Simulación De Robot SCARA, documento
Programación Y Simulación De Robot SCARA, documentoBronson Duhart
 
Programa informático
Programa informáticoPrograma informático
Programa informáticotomorrowland
 
Instructivo De Tic Software
Instructivo De Tic SoftwareInstructivo De Tic Software
Instructivo De Tic SoftwareMariBianchi
 
Elemento 1 miguel antonio miranda chonata - sistemas operativos
Elemento 1   miguel antonio miranda chonata - sistemas operativosElemento 1   miguel antonio miranda chonata - sistemas operativos
Elemento 1 miguel antonio miranda chonata - sistemas operativosQue te Importa
 
Instructivo de TIC. Software
Instructivo de TIC. SoftwareInstructivo de TIC. Software
Instructivo de TIC. SoftwareMariBianchi
 
Funciones y caracterisricas de los sistemas operativos
Funciones y caracterisricas de los sistemas operativosFunciones y caracterisricas de los sistemas operativos
Funciones y caracterisricas de los sistemas operativosdariosirving
 

Ähnlich wie NASM (20)

Lenguaje Ensamblador00
Lenguaje Ensamblador00Lenguaje Ensamblador00
Lenguaje Ensamblador00
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONLENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
 
Coruniversitec.docx sistemas
Coruniversitec.docx sistemasCoruniversitec.docx sistemas
Coruniversitec.docx sistemas
 
Coruniversitec.docx sistemas
Coruniversitec.docx sistemasCoruniversitec.docx sistemas
Coruniversitec.docx sistemas
 
Coruniversitec.docx sistemas
Coruniversitec.docx sistemasCoruniversitec.docx sistemas
Coruniversitec.docx sistemas
 
Visual basic terminado[1]
Visual basic terminado[1]Visual basic terminado[1]
Visual basic terminado[1]
 
Visual basic terminado[1]
Visual basic terminado[1]Visual basic terminado[1]
Visual basic terminado[1]
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Programación Y Simulación De Robot SCARA, documento
Programación Y Simulación De Robot SCARA, documentoProgramación Y Simulación De Robot SCARA, documento
Programación Y Simulación De Robot SCARA, documento
 
Programa informático
Programa informáticoPrograma informático
Programa informático
 
Consulta
ConsultaConsulta
Consulta
 
CONSULTA
CONSULTACONSULTA
CONSULTA
 
26 agosto
26 agosto26 agosto
26 agosto
 
Instructivo De Tic Software
Instructivo De Tic SoftwareInstructivo De Tic Software
Instructivo De Tic Software
 
Elemento 1 miguel antonio miranda chonata - sistemas operativos
Elemento 1   miguel antonio miranda chonata - sistemas operativosElemento 1   miguel antonio miranda chonata - sistemas operativos
Elemento 1 miguel antonio miranda chonata - sistemas operativos
 
Instructivo de TIC. Software
Instructivo de TIC. SoftwareInstructivo de TIC. Software
Instructivo de TIC. Software
 
Unidad ad 3
Unidad ad 3Unidad ad 3
Unidad ad 3
 
Funciones y caracterisricas de los sistemas operativos
Funciones y caracterisricas de los sistemas operativosFunciones y caracterisricas de los sistemas operativos
Funciones y caracterisricas de los sistemas operativos
 
T 25
T 25T 25
T 25
 

Mehr von Alex Pin

Configuracion de redes vlan
Configuracion de redes vlanConfiguracion de redes vlan
Configuracion de redes vlanAlex Pin
 
Agenda de Datos Personales en LISP
Agenda de Datos Personales en LISPAgenda de Datos Personales en LISP
Agenda de Datos Personales en LISPAlex Pin
 
ingeniera social
ingeniera socialingeniera social
ingeniera socialAlex Pin
 
Ingeniera social carlosbiscione
Ingeniera social carlosbiscioneIngeniera social carlosbiscione
Ingeniera social carlosbiscioneAlex Pin
 
programación en prolog
programación en prologprogramación en prolog
programación en prologAlex Pin
 
seguridad informática
seguridad informáticaseguridad informática
seguridad informáticaAlex Pin
 
Administración de sistemas linux
Administración de sistemas linuxAdministración de sistemas linux
Administración de sistemas linuxAlex Pin
 
Introducción a la_neuro_computación
Introducción a la_neuro_computaciónIntroducción a la_neuro_computación
Introducción a la_neuro_computaciónAlex Pin
 
Catedral y bazar una visión analítica de la técnica de desarrollo open source
Catedral y bazar una visión analítica de la técnica de desarrollo open source Catedral y bazar una visión analítica de la técnica de desarrollo open source
Catedral y bazar una visión analítica de la técnica de desarrollo open source Alex Pin
 
Analisis y-modelado-de-amenazas
Analisis y-modelado-de-amenazasAnalisis y-modelado-de-amenazas
Analisis y-modelado-de-amenazasAlex Pin
 
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...Alex Pin
 
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRS
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRSDescripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRS
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRSAlex Pin
 
Trabajo symbian
Trabajo symbianTrabajo symbian
Trabajo symbianAlex Pin
 
Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoiAlex Pin
 
manufactura inteligente
manufactura inteligentemanufactura inteligente
manufactura inteligenteAlex Pin
 
Arboles avl
Arboles avlArboles avl
Arboles avlAlex Pin
 
Tutorial perl en linux
Tutorial perl en linuxTutorial perl en linux
Tutorial perl en linuxAlex Pin
 
Informe minishell
Informe minishellInforme minishell
Informe minishellAlex Pin
 
Pilas y Colas
Pilas y ColasPilas y Colas
Pilas y ColasAlex Pin
 

Mehr von Alex Pin (20)

Configuracion de redes vlan
Configuracion de redes vlanConfiguracion de redes vlan
Configuracion de redes vlan
 
Agenda de Datos Personales en LISP
Agenda de Datos Personales en LISPAgenda de Datos Personales en LISP
Agenda de Datos Personales en LISP
 
ingeniera social
ingeniera socialingeniera social
ingeniera social
 
Ingeniera social carlosbiscione
Ingeniera social carlosbiscioneIngeniera social carlosbiscione
Ingeniera social carlosbiscione
 
programación en prolog
programación en prologprogramación en prolog
programación en prolog
 
seguridad informática
seguridad informáticaseguridad informática
seguridad informática
 
Administración de sistemas linux
Administración de sistemas linuxAdministración de sistemas linux
Administración de sistemas linux
 
LISP
LISP LISP
LISP
 
Introducción a la_neuro_computación
Introducción a la_neuro_computaciónIntroducción a la_neuro_computación
Introducción a la_neuro_computación
 
Catedral y bazar una visión analítica de la técnica de desarrollo open source
Catedral y bazar una visión analítica de la técnica de desarrollo open source Catedral y bazar una visión analítica de la técnica de desarrollo open source
Catedral y bazar una visión analítica de la técnica de desarrollo open source
 
Analisis y-modelado-de-amenazas
Analisis y-modelado-de-amenazasAnalisis y-modelado-de-amenazas
Analisis y-modelado-de-amenazas
 
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
 
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRS
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRSDescripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRS
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRS
 
Trabajo symbian
Trabajo symbianTrabajo symbian
Trabajo symbian
 
Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoi
 
manufactura inteligente
manufactura inteligentemanufactura inteligente
manufactura inteligente
 
Arboles avl
Arboles avlArboles avl
Arboles avl
 
Tutorial perl en linux
Tutorial perl en linuxTutorial perl en linux
Tutorial perl en linux
 
Informe minishell
Informe minishellInforme minishell
Informe minishell
 
Pilas y Colas
Pilas y ColasPilas y Colas
Pilas y Colas
 

NASM

  • 1. SISTEMAS OPERATIVOS, ABRIL 2013 1 programacion en lenguaje ensamblador usando NASM Alexander Pinchao Facultad de Ingenier´ıa en Sistemas Escuela Polit´ecnica Nacional alexander.pinchao@gmail.com Resumen— Creaci´on de un programa en lenguaje ensamblador usando el ensamblador de Linux (nasm), que defina una variable, asigne el valor de 100 a dicha variable, posteriormente sume 9 a la variable e imprima. La importancia de este trabajo radica en la posibilidad de manipular un valor en memoria para experimentar la forma de trabajo de la upc con la memoria, y usar las interrupciones para realizar la impresi´on ya que este es un m´etodo m´as f´acil de realizar la presentaci´on de los valores generados Index Terms— nasm, ensamblador, interrupcion. ! 1. INTRODUCCI ´ON CAda variante de procesador posee su pro- pio lenguaje m´aquina, el cual invarian- temente reconoce las instrucciones en forma de n´umeros y los almacena en la memoria, cada operaci´on posee su propio c´odigo llamado upcode. Las instrucciones pueden variar de ta- ma˜no, el upcode se encuentra invariantemente al inicio de cada instrucci´on, adem´as del up- code las instrucciones mayoritariamente suelen llevar adem´as datos (direcciones, constantes o variables), que van a ser usados por la instruc- ci´on. Hay que tener en cuenta que programar en lenguaje de maquina es muy complicado para realizarse directamente ya que las instruc- ciones se encuentran codificadas num´ericamen- te y esto resulta sumamente tedioso y compli- cado de interpretar para los humanos , para saltar esta limitaci´on se desarroll´o el lenguaje ensamblador el cual permite facilitar el traba- jo al desarrollador de software, un programa escrito en lenguaje ensamblador esta escrito y almacenado en forma textual al igual que los lenguajes de alto nivel, el cual se maneja con instrucciones de forma muy sencilla como por ejemplo: sum eax,ebx Es decir una instrucci´on representara una operaci´on que realizara la ma- quina en este caso sumar ebx a eax. A simple vista se puede ver que esto es m´as f´acil de entender y ser´ıa mucho m´as f´acil de encontrar para una depuraci´on que 03 C3 la cual es la forma de la instrucci´on en lenguaje puramente m´aquina. 2. METODOLOG´IA El lenguaje ensamblador en su estructura m´as b´asica se puede representar en forma de c´odigos nem´onicos, los m´as usados son: sum, sub, mul, div, int ya que como se sabe la computadora solo sabe sumar, restar, multipli- car y dividir, estas instrucciones son le´ıdas por el programa ensamblador y las transforma a lenguaje de m´aquina, es decir como un com- pilador en lenguaje de alto nivel, pero mucho mas sencillo ya que en ensamblador una ins- trucci´on es una instrucci´on en lenguaje maqui- na con seguridad, mientras que en lenguaje de alto nivel una instrucci´on puede necesitar muchas instrucciones en lenguajes maquina, adem´as de que los lenguajes de alto nivel son iguales sin importar que tipo de maquina se use, mientras que los lenguajes de ensamblador
  • 2. SISTEMAS OPERATIVOS, ABRIL 2013 2 var´ıan con la arquitectura del procesador exis- tiendo tres variables NASM(Netwide Assem- bler) de Linux, MASM(Microsoft Assembler) de Microsoft y TASM (Turbo Assembler) de Borland. En lenguaje ensamblador la estructura de las instrucciones es: c´odigo,operando. Los operando puede ser de distintos tipos: 1. Registros.- Se refieren directamente a los registros de la UCP 2. Memoria.- Son los datos almacenados en memoria, teniendo en cuenta que la di- recci´on de los datos puede estar descrita en una instrucci´on o calculada usando los valores de registros, ya que estas son simples desplazamientos relativos al co- mienzo de un segmento 3. Inmediato.- Son valores fijos que est´an dentro del mismo segmento de c´odigo, es decir se valores que est´an en ”section .text”no en ”section .data” 4. Impl´ıcito.- Es decir aquellos que no apa- recen de forma visible pero interact´uan con los registros o la memoria como es el caso de los decrementos, el cual resta una al valor de un registro o a un valor en memoria. Dejando de lado por un momento de los opera- dores, podemos decir que la instrucci´on esen- cial en el lenguaje ensamblador es: mov, ya que esta traslada los valores de un operando a otro es decir realiza las funciones de un operador de asignaci´on visto desde el punto de vista de los lenguajes de alto nivel, la estructura base para realizar esta operaci´on es por ejemplo: mov eax,ebx en este fragmento de programa se a asignado a eax el valor que esta dentro de ebx. Pero este operando presenta la restricci´on que los dos operandos no deben de ser operandos de memoria, adem´as de que los operando de- ben tener tama˜nos iguales. Lo cual nos plantea la duda que esta bien y que esta mal, esto se resuelve con el uso de las directivas del programa ensamblador, las directivas son pro- pias del lenguaje ensamblador no del lenguaje m´aquina, y estas se usan para comunicarle al ensamblador que realice alguna acci´on, estas se traducen luego a c´odigo maquina, sus usos mas comunes son: 1. Definir constantes 2. Definir la memoria para almacenar datos en ella. 3. Agrupar la memoria en segmentos. 4. Incluir codigo fuente condicionalmente 5. Incluir otros archivos Las directivas existentes son: Directiva equ.- esta directiva se usa para definir un s´ımbolo. Los s´ımbolos son cons- tantes que poseen un nombre que puede ser usado dentro de la estructura del pro- grama ensamblador Directiva %define.- es similar al define en C, ya que genera un macro con el cual trabajar Algunas veces el flujo ordinario de un pro- grama debe ser interrumpido para procesar eventos que requieren una respuesta r´apida. El hardware de un computador provee un me- canismo llamado interrupci´on para manipular estos eventos. Por ejemplo cuando se mueve el rat´on la interrupci´on de hardware del rat´on es el programa actual para manejar el movimiento del rat´on (para mover el cursor del mouse, etc) Las interrupciones hacen que el control se pase a un manipulador de interrupciones. Los manipuladores de interrupciones son rutinas que procesan la interrupci´on. A cada tipo de interrupci´on se le asigna un n´umero entero. En el comienzo de la memoria f´ısica una tabla de vectores de interrupci´on que contiene la di- recci´on del segmento de los manipuladores de la interrupci´on. El n´umero de la interrupci´on es esencialmente un ´ındice en esta tabla. Las interrupciones externas son levantadas desde el exterior de la CPU (el rat´on es un ejemplo de este tipo de interrupci´on). Muchos disposi- tivos de E/S levantan interrupciones (teclado, temporizador, disco duro CD ROM y tarjetas de sonido) Las interrupciones internas son le- vantadas desde la CPU, por una instrucci´on de error o por una instrucci´on de interrupci´on. Las instrucciones de error tambi´en se llaman trampas. Las interrupciones generadas desde la instrucci´on de interrupci´on son llamadas interrupciones de software. DOS usa estas inte- rrupciones para implementar su API (Interfaz de programas de Aplicaci´on). Sistemas opera- tivos m´as modernos (como Windows y Linux) usan una interfaz basada en C. Muchos mani-
  • 3. SISTEMAS OPERATIVOS, ABRIL 2013 3 puladores de interrupci´on devuelven el control al programa interrumpido cuando ella culmina. Ella restaura todos los registros con los mis- mos valores que ten´ıan antes que ocurriera la interrupci´on. As´ı el programa interrumpido se ejecuta como si nada hubiese pasado (excepto que se perdieron algunos ciclos de CPU) Las trampas generalmente no retornan. A menudo ellas acaban el programa. 2.1. Resultados obtenidos Luego de haber revisado los lineamientos de la programaci´on en lenguaje ensamblador nos permiti´o realizar el programa solicitado del cual paso a colocar el c´odigo fuente section .data m: db ”La x= ”;mensaje a mostrar lm: equ $-m ;tama˜no del mensaje x: db ”100”;se define el valor de la variable xl: equ $-x ;se define el tama˜no de la variable de: db ”9”;se define el valor de la variable 2 del: equ $-de;se define el tama˜no se: db 10,0,0; generamos un salto de linea sel: equ $-se; generamos el espacio section .bss result resw 2 ; creamos la variable resultado section .text global start: ;Punto de entrada para Linker start: mov eax,4;Especifica la llamada al sys write mov ebx,1;Standar de Output mov ecx,m;se pasa la direcion del mensaje mov edx,lm;Se pasa la longitud del mensaje int 80h;invoca la interrupcion 80h mov eax,4;Especifica la llamada al sys write mov ebx,1;Standar de Output mov ecx,x;se pasa la direcion del mensaje mov edx,xl;Se pasa la longitud del mensaje int 80h;invoca la interrupcion 80h mov eax,4;Especifica la llamada al sys write mov ebx,1;Standar de Output mov ecx,se;se pasa la direcion del mensaje mov edx,sel;Se pasa la longitud del mensaje int 80h;invoca la interrupcion 80h mov eax,[m];pasamos m a un registro mov ebx,[x];pasamos x a un registro sub eax,’0’;transforma m de String a Entero sub ebx,’0’;transforma x de String a Entero add eax,ebx;Sumamos los dos valores add eax,’0’;transforma de entero a string mov [result],eax;almacenamos en result mov eax,4;Especifica la llamada al sys write mov ebx,1;Standar de Output mov ecx,result;Se imprime resultado mov edx,1;Standar de Output int 80h;invoca la interrupcion 80h mov eax,4;Especifica la llamada al sys write mov ebx,1;Standar de Output mov ecx,se;se pasa la direcion del mensaje mov edx,sel;Se pasa la longitud del mensaje int 80h;invoca la interrupcion 80h mov eax,1;Standar de Output mov ebx,0; se especifica el codigo de salida int 80h;invoca la interrupcion 80h 2.2. Conclusiones El c´odigo fuente puede ser en algunos casos de menor tama˜no y complejidad que el lenguaje de alto nivel El lenguaje ensamblador nos permite in- teractuar de manera directa a las carac- ter´ısticas del sistema lo que puede ser complicado de lograr con los lenguaje s de alto nivel La programaci´on en ensamblador nos per- mite entender de mejor manera la forma en la que trabaja el procesador La programaci´on en ensamblador nos per- mite entender como trabajan los compila- dores y lenguajes de alto nivel REFERENCIAS [1] SivaramaP.Dandamudi Guide to Assembly Language Programmingin Linux , USA Springer-Verlag Berlin Heidelberg 2005 [2] Reiley Jeyapaul · Aviral Shrivastava, Assembly Lan- guage Step-by-Step: Programming with Linux , USA ACM 2009