PDF de programación - Lenguaje Ensamblador para PC

Imágen de pdf Lenguaje Ensamblador para PC

Lenguaje Ensamblador para PCgráfica de visualizaciones

Actualizado el 12 de Mayo del 2021 (Publicado el 22 de Mayo del 2018)
1.095 visualizaciones desde el 22 de Mayo del 2018
1,0 MB
193 paginas
Creado hace 13a (09/08/2007)
Lenguaje Ensamblador para PC

Paul A. Carter

9 de agosto de 2007

Copyright c(cid:13) 2001, 2002, 2003, 2004 by Paul Carter

Traducido al espa˜nol por Leonardo Rodr´ıguez M´ujica. Sus comentaros y su-
gerencias acerca de la traducci´on por favor a: [email protected]

Este documento puede ser reproducido y distribuido totalmente (incluida
esta paternidad literaria, copyright y aviso de autorizaci´on), no se puede
cobrar por este documento en s´ı mismo, sin el consentimiento del autor.
Esto incluye una “utilizaci´on racional” de extractos como revisiones y anun-
cios, y trabajos derivados como traducciones.

Observe que esta restricci´on no est´a prevista para prohibir el cobro por el
servicio de impresi´on o copia del documento

A los docentes se les recomienda usar este documento como recurso de clase;
sin embargo el autor apreciar´ıa ser notificado en este caso.

Prefacio

Prop´osito

El prop´osito de este libro es dar al lector un mejor entendimiento de
c´omo trabajan realmente los computadores a un nivel m´as bajo que los len-
guajes de alto nivel como Pascal. Teniendo un conocimiento profundo de
c´omo trabajan los computadores, el lector puede ser m´as productivo desa-
rrollando software en lenguajes de alto nivel tales como C y C++. Aprender
a programar en lenguaje ensamblador es una manera excelente de lograr este
objetivo. Otros libros de lenguaje ensamblador a´un ense˜nan a programar el
procesador 8086 que us´o el PC original en 1981. El procesador 8086 s´olo
soporta el modo real. En este modo, cualquier programa puede acceder a
cualquier direcci´on de memoria o dispositivo en el computador. Este modo
no es apropiado para un sistema operativo multitarea seguro. Este libro, en
su lugar discute c´omo programar los procesadores 80386 y posteriores en
modo protegido (el modo en que corren Windows y Linux). Este modo so-
porta las caracter´ısticas que los sistemas operativos modernos esperan, como
memoria virtual y protecci´on de memoria. Hay varias razones para usar el
modo protegido

1. Es m´as f´acil de programar en modo protegido que en el modo real del

8086 que usan los otros libros.

2. Todos los sistemas operativos de PC se ejecutan en modo protegido.

3. Hay disponible software libre que se ejecuta en este modos.

La carencia de libros de texto para la programaci´on en ensamblador de PC
para modo protegido es la principal raz´on por la cual el autor escribi´o este
libro.

C´omo lo dicho antes, este libro hace uso de Software Libre: es decir el
ensamblador NASM y el compilador de C/C++ DJGPP. Ambos se pue-
den descargar de Internet. El texto tambi´en discute c´omo usar el c´odigo
del ensamblador NASM bajo el sistema operativo Linux y con los com-
piladores de C/C++ de Borland y Microsoft bajo Windows. Todos los

i

ii

PREFACIO

ejemplos de estas plataformas se pueden encontrar en mi sitio web: http:
//www.drpaulcarter.com/pcasm. Debe descargar el c´odigo de los ejemplos,
si desea ensamblar y correr los muchos ejemplos de este tutorial.

Tenga en cuenta que este libro no intenta cubrir cada aspecto de la
programaci´on en ensamblador. El autor ha intentado cubrir los t´opicos m´as
importantes que todos los programadores deber´ıan tener

Reconocimientos

El autor quiere agradecer a los muchos programadores alrededor del mun-
do que han contribuido al movimiento de Software Libre. Todos los progra-
me y a´un este libro en s´ı mismo fueron producidos usando software libre.
El autor desear´ıa agradecerle especialmente a John S. Fine, Simon Tatham,
Julian Hall y otros por desarrollar el ensamblador NASM ya que todos los
ejemplos de este libro est´an basados en ´el; a DJ Delorie por desarrollar el
compilador usado de C/C++ DJGPP; la numerosa gente que ha contribuido
al compilador GNU gcc en el cual est´a basado DJGPP; a Donald Knuth y
otros por desarrollar los lenguajes de composici´on de textos TEX y LATEX 2ε
que fueron usados para producir este libro; a Richar Stallman (fundador de
la Free Software Fundation), Linus Torvalds (creador del n´ucleo de Linux) y
a otros que han desarrollado el software que el autor ha usado para producir
este trabajo.

Gracias a las siguientes personas por correcciones:

John S. Fine

Marcelo Henrique Pinto de Almeida

Sam Hopkins

Nick D’Imperio

Jeremiah Lawrence

Ed Beroset

Jerry Gembarowski

Ziqiang Peng

Eno Compton

Josh I Cates

Mik Mifflin

Luke Wallis

iii

Gaku Ueda

Brian Heward

Chad Gorshing

F. Gotti

Bob Wilkinson

Markus Koegel

Louis Taber

Dave Kiddell

Eduardo Horowitz

S´ebastien Le Ray

Nehal Mistry

Jianyue Wang

Jeremias Kleer

Marc Janicki

Recursos en Internet

P´agina del autor
P´agina de NASM en SourceForge
DJGPP
Ensamblador con Linux
The Art of Assembly
USENET
Documentaci´on de Intel

http://www.drpaulcarter.com/
http://nasm.sourceforge.net/
http://www.delorie.com/djgpp
http://www.linuxassembly.org/
http://webster.cs.ucr.edu/
comp.lang.asm.x86
http://www.intel.com/design/Pentium4/documentation.htm

Comentarios

El autor agradece cualquier comentario sobre este trabajo.

E-mail:
WWW:

[email protected]
http://www.drpaulcarter.com/pcasm

iv

PREFACIO

Cap´ıtulo 1

Introducci´on

1.1. Sistemas de numeraci´on

La memoria en un computador est´a compuesta de n´umeros. La memoria
del computador no almacena estos n´umeros en decimal (base 10). Porque
se simplifica mucho el hardware, los computadores almacenan toda la in-
formaci´on en binario (base 2). Primero haremos una revisi´on del sistema
decimal.

1.1.1. Decimal

Los n´umeros con base 10 est´an compuestos de 10 posibles d´ıgitos (0-9).
Cada d´ıgito de un n´umero tiene una potencia de 10 asociada con ´el, basada
en su posici´on en el n´umero. Por ejemplo:

234 = 2 × 102 + 3 × 101 + 4 × 100

1.1.2. Binario

Los n´umeros en base dos est´an compuestos de dos posibles d´ıgitos (0 y
1). Cada d´ıgito de un n´umero tiene una potencia de 2 asociada con ´el basada
en su posici´on en el n´umero. Por ejemplo:

110012 = 1 × 24 + 1 × 23 + 0 × 22 + 0 × 21 + 1 × 20

= 16 + 8 + 1
= 25

Esto muestra c´omo los n´umeros binarios se pueden convertir a decimal.
El Cuadro 1.1 muestra c´omo se representan los primeros n´umeros en binario.

La Figura 1.1 muestra c´omo se suman los d´ıgitos binarios individuales

(bits). A continuaci´on un ejemplo:

1

2

CAP´ITULO 1. INTRODUCCI ´ON

Decimal Binario
0000
0001
0010
0011
0100
0101
0110
0111

0
1
2
3
4
5
6
7

Decimal Binario
1000
1001
1010
1011
1100
1101
1110
1111

8
9
10
11
12
13
14
15

Cuadro 1.1: Decimal de 0 a 15 en binario

No hay carry antes

S´ı hay carry antes

0
+0
0

0
+1
1

1
+0
1

1
+1
0
c

0
+0
1

0
+1
0
c

1
+0
0
c

1
+1
1
c

Figura 1.1: Suma binaria (c es carry)

110112
+100012
1011002

Si uno considera la siguiente divisi´on decimal:

1234 ÷ 10 = 123 r 4

podemos ver que esta divisi´on suprime el d´ıgito del extremo derecho del
n´umero y desplaza los otros d´ıgitos una posici´on a la derecha. Dividiendo
por dos hacemos una operaci´on similar, pero para los d´ıgitos binarios de un
n´umero. Consideremos la siguiente divisi´on binaria1:

11012 ÷ 102 = 1102 r 1

Este hecho se puede usar para convertir un n´umero decimal a su repre-
sentaci´on equivalente en binario como muestra la Figura 1.2. Este m´etodo
encuentra primero el bit del extremo derecho, llamado bit menos significati-
vo (lsb). El bit del extremo izquierdo es llamado bit m´as significativo (msb).
La unidad b´asica de memoria est´a compuesta de 8 bits y es llamado byte

1El sub´ındice 2 se usa para mostrar que el n´umero est´a representado en binario no en

decimal

1.1. SISTEMAS DE NUMERACI ´ON

3

Decimal

Binario

25 ÷ 2 = 12 r 1 11001 ÷ 10 = 1100 r 1
12 ÷ 2 = 6 r 0
1100 ÷ 10 = 110 r 0
110 ÷ 10 = 11 r 0
6 ÷ 2 = 3 r 0
11 ÷ 10 = 1 r 1
3 ÷ 2 = 1 r 1
1 ÷ 2 = 0 r 1
1 ÷ 10 = 0 r 1

As´ı 2510 = 110012

Figura 1.2: Conversi´on a decimal

1.1.3. Hexadecimal

Los n´umero hexadecimales tienen base 16. Los hexadecimales (o hex) se
pueden usar como una representaci´on resumida de los n´umeros binarios. Los
n´umeros hexadecimales tienen 16 d´ıgitos posibles. Esto crea un problema
ya que no hay s´ımbolos para estos d´ıgitos adicionales despu´es del nueve.
Por convenci´on se usan letras para estos d´ıgitos adicionales. Los 16 d´ıgitos
hexadecimales son: 0-9 y luego A, B, C, D, E, F. El d´ıgito A equivale a 10
en decimal, B es 11 etc. Cada d´ıgito de un n´umero hexadecimal tiene una
potencia de 16 asociada con ´el. Por ejemplo:

2BD16 = 2 × 162 + 11 × 161 + 13 × 160

= 512 + 176 + 13
= 701

Para convertir de decimal a hex use la misma idea que la empleada para la
conversi´on binaria excepto que se divide por 16. Vea la Figura 1.3 para un
ejemplo.

La raz´on por la cual los hexadecimales son ´utiles es que hay una manera
f´acil para convertir entre hex y binario. Los n´umero binarios se tornan lar-
gos y molestos r´apidamente. La representaci´on hexadecimal es una manera
mucho m´as compacta de representar los n´umeros binarios.

Para convertir un n´umero hexadecimal a binario simplemente convierta
cada d´ıgito hexadecimal a un n´umero binario de 4 bits. Por ejemplo, 24D16
es convertido en 0010 0100 11012. Observe que ¡los ceros delanteros son im-
portantes! Si los ceros del d´ıgito de la mitad de 24D16 no se usan el resultado
es err´oneo. Convertir de binario a hex es igual de f´acil; uno hace el proceso

4

CAP´ITULO 1. INTRODUCCI ´ON

589 ÷ 16 = 36 r 13
36 ÷ 16 = 2 r 4
2 ÷ 16 = 0 r 2

As´ı 589 = 24D16

Figura 1.3:

inverso, convierte cada segmento de 4 bits a hexadecimal comenzando desde
el extremo derecho, no desde el izquierdo, del n´umero binario. Esto asegura
que el segmento de 4 bits es correcto2. Ejemplo:

110
6

0000

0101

1010

0111

0

5

A

7

11102
E16

Un n´umero de 4 bits es llamado nibble . As´ı cada d´ıgito hexadecimal
corresponde a un nibble. Dos nibbles conforman un byte y por lo tanto un
byte puede ser representado por dos d´ıgitos hexadecimales. Los valores de
un byte van de 0 a 11111111 en binario, 0 a FF en hex y 0 a 255 en decimal.

1.2. Organizaci´on del computador

1.2.1. La Mem
  • Links de descarga
http://lwp-l.com/pdf11220

Comentarios de: Lenguaje Ensamblador para PC (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad