Академический Документы
Профессиональный Документы
Культура Документы
ensamblador
lenguaje de programación
?
Información general
Extensiones comunes .asm
Paradigma Imperative,
unstructured
Apareció en 1949
Lenguaje de máquina del Intel 8088. El código de
máquina en hexadecimal se resalta en rojo, el
equivalente en lenguaje ensamblador en magenta, y
las direcciones de memoria donde se encuentra el
código, en azul. Abajo se ve un texto en hexadecimal
y ASCII.
Características
El código escrito en lenguaje
ensamblador posee una cierta dificultad
de ser entendido ya que su estructura se
acerca al lenguaje máquina, es decir, es
un lenguaje de bajo nivel.
El lenguaje ensamblador es difícilmente
portable, es decir, un código escrito para
un microprocesador, puede necesitar
ser modificado, para poder ser usado en
otra máquina distinta. Al cambiar a una
máquina con arquitectura diferente,
generalmente es necesario reescribirlo
completamente.
Los programas hechos por un
programador experto en lenguaje
ensamblador pueden ser más rápidos y
consumir menos recursos del sistema
(ej: memoria RAM) que el programa
equivalente compilado desde un
lenguaje de alto nivel. Al programar
cuidadosamente en lenguaje
ensamblador se pueden crear
programas que se ejecutan más
rápidamente y ocupan menos espacio
que con lenguajes de alto nivel.
Conforme han evolucionado tanto los
procesadores como los compiladores
de lenguajes de alto nivel, esta
característica del lenguaje ensamblador
se ha vuelto cada vez menos
significativa. Es decir, un compilador
moderno de lenguaje de alto nivel puede
generar código casi tan eficiente como
su equivalente en lenguaje
ensamblador.[1]
Con el lenguaje ensamblador se tiene un
control muy preciso de las tareas
realizadas por un microprocesador por
lo que se pueden crear segmentos de
código difíciles y/o muy ineficientes de
programar en un lenguaje de alto nivel,
ya que, entre otras cosas, en el lenguaje
ensamblador se dispone de
instrucciones del CPU que generalmente
no están disponibles en los lenguajes de
alto nivel.
Programa ensamblador
Generalmente, un programa ensamblador
(assembler en inglés) moderno crea
código objeto traduciendo instrucciones
mnemónicas de lenguaje ensamblador en
opcodes, y resolviendo los nombres
simbólicos para las localizaciones de
memoria y otras entidades.[2] El uso de
referencias simbólicas es una
característica clave del lenguaje
ensamblador, evitando tediosos cálculos y
actualizaciones manuales de las
direcciones después de cada modificación
del programa. La mayoría de los
ensambladores también incluyen
facilidades de macros para realizar
sustitución textual - ej. generar cortas
secuencias de instrucciones como
expansión en línea en vez de llamar a
subrutinas.
Número de pasos …
Lenguaje
El lenguaje ensamblador refleja
directamente la arquitectura y las
instrucciones en lenguaje de máquina de
la CPU, y pueden ser muy diferentes de
una arquitectura de CPU a otra.
Instrucciones de CPU …
Ensamblado …
La transformación del lenguaje
ensamblador en código máquina la realiza
un programa ensamblador, y la traducción
inversa la puede efectuar un
desensamblador. A diferencia de los
lenguajes de alto nivel, aquí hay
usualmente una correspondencia 1 a 1
entre las instrucciones simples del
ensamblador y el lenguaje de máquina. Sin
embargo, en algunos casos, un
ensamblador puede proveer "pseudo
instrucciones" que se expanden en un
código de máquina más extenso a fin de
proveer la funcionalidad necesaria y
simplificar la programación. Por ejemplo,
para un código máquina condicional como
"si X mayor o igual que", un ensamblador
puede utilizar una pseudoinstrucción al
grupo "haga si menor que", y "si = 0" sobre
el resultado de la condición anterior. Los
Ensambladores más completos también
proveen un rico lenguaje de macros que se
utiliza para generar código más complejo
y secuencias de datos.
Ejemplos …
La sentencia
Elementos básicos …
Mnemónicos de opcode
Secciones de datos
Directivas de ensamblador
Mnemónicos de opcode y mnemónicos
extendidos …
LD HL, BC
LD L, C
LD H, B .[4]
Secciones de datos …
Macros …
foo: macro a
load a*b
Perspectiva histórica …
Uso actual …
Detalles adicionales
Para un determinado computador
personal, mainframe, sistema empotrado,
y consola de juegos, tanto del pasado
como del presente, ha sido escrito al
menos uno, y posiblemente docenas de
ensambladores. Para algunos ejemplos,
vea la lista de ensambladores.
Ejemplos de lenguaje
ensamblador
; -------------------------
--------------------
; Programa que imprime un
string en la pantalla
; -------------------------
--------------------
.model small
; modelo de memoria
.stack
; segmento del stack
.data
; segmento de datos
Cadena1 DB 'Hola
Mundo.$' ; string a
imprimir (finalizado en $)
.code
; segmento del código
; -------------------------
--------------------
; Inicio del programa
; -------------------------
--------------------
programa:
; -----------------
---------------------------
---------------------------
---------------------------
--
; inicia el
segmento de datos
; -----------------
---------------------------
---------------------------
---------------------------
--
MOV AX, @data
; carga en AX la dirección
del segmento de datos
MOV DS, AX
; mueve la dirección al
registro de segmento por
medio de AX
; -----------------
---------------------------
---------------------------
---------------------------
--
; Imprime un string
en pantalla
; -----------------
---------------------------
---------------------------
---------------------------
--
MOV DX, offset
Cadena1 ; mueve a DX la
dirección del string a
imprimir
MOV AH, 9
; AH = código para indicar
al MS DOS que imprima en la
pantalla, el string en
DS:DX
INT 21h
; llamada al MS DOS para
ejecutar la función (en
este caso especificada en
AH)
; -----------------
---------------------------
---------------------------
---------------------------
--
; Finaliza el
programa
; -----------------
---------------------------
---------------------------
---------------------------
--
INT 20h
; llamada al MS DOS para
finalizar el programa
end programa
.begin
.org 2048
2048 ld length,%
.org a_start
3000 a:</tt
ORG 0
Inicio
bcf STATUS,RP0
clrf PORTB
movlw 0xFF
movwf PORTA
bsf STATUS,RP0
Principal
movf PORTA,W
movwf Contador
movf Contador,F
btfsc STATUS,Z
goto PuntoDecimal
sublw d'9'
btfss STATUS,C
END
Véase también
Lenguaje ensamblador x86
Anexo:Listados de instrucciones
x86
Ensamblador
Macro ensamblador
Ensamblador de alto nivel
Desensamblador
Compilador
Decompilador
Intérprete (informática)
Depurador
Lenguaje de alto nivel
Lenguaje de bajo nivel
Lenguaje de máquina
Conjunto de instrucciones
Tipos de datos máquina
Little man computer
Ensambladores
Comparación de ensambladores
High Level Assembly
Netwide Assembler
Flat assembler
GNU Assembler
Microsoft Macro Assembler
RosASM
A86 y A386 assemblers
Turbo Assembler
GNU toolchain
Desensambladores
Interactive Disassembler
Depuradores
SoftICE
GNU Debugger
OllyDbg
Valgrind
RosASM
A86 y A386 assemblers
Data Display Debugger
Otros
Sistemas operativos escritos
completamente en assembler:
MenuetOS
KolibriOS
BareMetal OS
Referencias
1. "DSP: C versus Assembly" , Steven W.
Smith, Ph.D., 2011
2. David Salomon (1993). Assemblers
and Loaders
3. Beck, Leland L. (1996). «2». System
Software: An Introduction to Systems
Programming. Addison Wesley.
4. http://www.z80.de/z80/z80code.htm
5. «Macros (C/C++), MSDN Library for
Visual Studio 2008» . Microsoft Corp.
Consultado el 22 de junio de 2010.
6. «Concept 14 Macros» . MVS
Software. Consultado el 25 de mayo
de 2009.
7. Answers.com. «assembly language:
Definition and Much More from
Answers.com» . Consultado el 19 de
junio de 2008.
8. NESHLA: The High Level, Open
Source, 6502 Assembler for the
Nintendo Entertainment System
9. «Eidolon's Inn : SegaBase Saturn» .
Archivado desde el original el 13 de
julio de 2008. Consultado el 25 de
julio de 2008.
10. Jim Lawless (21 de mayo de 2004).
«Speaking with Don French : The Man
Behind the French Silk Assembler
Tools» . Archivado desde el original
el 21 de agosto de 2008. Consultado
el 25 de julio de 2008.
11. «Writing the Fastest Code, by Hand,
for Fun: A Human Computer Keeps
Speeding Up Chips» . New York
Times, John Markoff. 28 de
noviembre de 2005. Consultado el 4
de marzo de 2010.
12. «Bit-field-badness» . hardwarebug.org.
30 de enero de 2010. Archivado desde
el original el 5 de febrero de 2010.
Consultado el 4 de marzo de 2010.
13. «GCC makes a mess» .
hardwarebug.org. 13 de mayo de
2009. Archivado desde el original el
16 de marzo de 2010. Consultado el 4
de marzo de 2010.
14. Randall Hyde. «The Great Debate» .
Archivado desde el original el 16 de
junio de 2008. Consultado el 3 de julio
de 2008.
15. «Code sourcery fails again» .
hardwarebug.org. 30 de enero de
2010. Archivado desde el original el 2
de abril de 2010. Consultado el 4 de
marzo de 2010.
16. «x264.git/common/x86/dct-32.asm» .
git.videolan.org. 29 de septiembre de
2010. Archivado desde el original el 4
de marzo de 2012. Consultado el 29
de septiembre de 2010.
17. «68K Programming in Fargo II» .
Consultado el 3 de julio de 2008.
18. Hyde, Randall (30 de septiembre de
1996). «Foreword ("Why would anyone
learn this stuff?"), op. cit.» . Archivado
desde el original el 22 de febrero de
2010. Consultado el 5 de marzo de
2010.
19. «256bytes demos archives» .
Consultado el 3 de julio de 2008.
20. Randall Hyde. «Which Assembler is
the Best?» . Archivado desde el
original el 18 de octubre de 2007.
Consultado el 19 de octubre de 2007.
21. "vid". «FASMLIB: Features» .
Consultado el 19 de octubre de 2007.
22. Principles of Computer Architecture
(POCA) – ARCTools computadora
virtual disponible para descarga y
ejecución del código, acceso el 24 de
agosto de 2005
23. Murdocca, Miles J. y Heuring, Vincent
P.:Principles of Computer Architecture
(2000), Prentice Hall, ISBN 0-201-
43664-7
Bibliografía
Dominic Sweetman: See MIPS Run.
Morgan Kaufmann Publishers, 1999.
ISBN 1-55860-410-3
Robert Britton: MIPS Assembly
Language Programming. Prentice Hall,
2003. ISBN 0-13-142044-5
John Waldron: Introduction to RISC
Assembly Language Programming.
Addison Wesley, 1998. ISBN 0-201-
39828-1
ASM Community Book "An online book
full of helpful ASM info, tutorials and
code examples" by the ASM Community
Jonathan Bartlett: Programming from
the Ground Up . Bartlett Publishing,
2004. ISBN 0-9752838-4-7
Also available online as PDF
Archivado el 6 de febrero de 2009 en la
Wayback Machine.
Paul Carter: PC Assembly Language.
Free ebook, 2001.
Website
Jeff Duntemann: Assembly Language
Step-by-Step. Wiley, 2000. ISBN 0-471-
37523-3
Randall Hyde: The Art of Assembly
Language. No Starch Press, 2003. ISBN
1-886411-97-2
Draft versions available online as PDF
and HTML
Peter Norton, John Socha, Peter Norton's
Assembly Language Book for the IBM
PC, Brady Books, NY: 1986.
Michael Singer, PDP-11. Assembler
Language Programming and Machine
Organization, John Wiley & Sons, NY:
1980.
Enlaces externos
Wikilibros alberga un libro o manual
sobre Programación en lenguaje
ensamblador.
The Art of Assembly Language
Programming ,
Computer-Books.us , Online Assembly
Language Brooks
PC Assembly Tutorial using NASM and
GCC by Paul Carter
Programming from the Ground Up by
Jonathan Bartlett
The ASM Book by the ASM Community
Inline::ASM módulo Perl en CPAN para
programar en lenguaje ensamblador
dentro de programas Perl. (en inglés)
Ejemplos prácticos de ensamblador en
GNU/Linux
Datos: Q165436
Multimedia: Assemblers
Libros: Programación en lenguaje
ensamblador
Obtenido de
«https://es.wikipedia.org/w/index.php?
title=Lenguaje_ensamblador&oldid=122506962»