Introduccin
El ensamblador es el lenguaje mas directo con el ordenador, aunque tambin se
le ha llamado Cdigo Mquina, en realidad no es as, esto es debido a la mala
utilizacin del trmino Lenguaje Mquina o Cdigo Mquina, ste lenguaje en
realidad est formado por unos y ceros, que son los datos que realmente utilizan
los ordenadores.
Lenguaje Ensamblador, es en realidad el lenguaje propio del microprocesador del
ordenador, el microprocesador , tambin llamado uP, es en realidad el centro del
ordenador, normalmente los conocemos por sus nombre, 286, 386, 486 , Pentium,
etc.. Estos son los nombres que les dan las fbricas de dichos
microprocesadores.
El lenguaje que utilizan los microprocesadores es el lenguaje ensamblador, ste
lenguaje est formado por una serie de palabras o instrucciones las cuales son
las ms directas con el microprocesador, es por ello , por lo que es el lenguaje
ms rpido que hay, dado que es el lenguaje directo y no necesita ninguna
conversin, y es por ello , por lo que se recurre a ste lenguaje para hacer
determinadas funciones o programas que requieren mucha velocidad , como los
juegos , inteligencia artificial, etc...
ste curso pretende que una vez terminado, tenga usted los conocimientos
necesarios para adentrarse profundamente en la utilizacin de ste lenguaje para
cuando le sea necesario hacer ritunas, funcione, etc. que le requieran ms
velocidad.
2. El Microprocesador
La parte principal de todo ordenador es el microprocesador , que es el encargado
de ejecutar las instrucciones que le especificamos en un programa y realizar las
comunicaciones con los demas perifricos para realizar la tarea que se le ha
encomendado.
Aunque el curso es integramente de ensamblador, quiero que tengas una base de
conocimiento de usos que realiza el microprocesador con el resto de
componentes de tu ordenador.
Para que te sirva de referencia , te dire que el microprocesador para realizar las
tareas que se le encomienden, debe realizar primero la puesta en memoria del
programa que le decimos que debe ejecutar y seguir una serie de pasos antes de
realizar dicha ejecucin.
Para ello, el programa se alojara en la memoria a partir de una direccin
determinada, a sta direccin a partir de ahora la vamos a llamar "direccin de
inicio" o "direccin de comienzo".
Por ello, en donde est sta direccin comenzar a guardarse nuestro programa
hasta que est completamente alojado en la memoria, desde la direccin de inicio
hasta la ltima posicin de memoria que ocupe nuestro programa, en esas
direcciones no se alojar ningun otro programa hasta que el nuestro termine sus
funciones.
Toda la gestin de memoria y alojamiento de programas en la memoria la realiza
el microprocesador a travs del DMA o Acceso Directo A memoria, el cual le
proporciona el control de la memoria tanto para lectura como para escritura en la
misma.
Para realizar las escrituras y lecturas de memoria, utiliza una serie de patillas que
el microprocesador tiene conectadas con el entorno de trabajo, osea con el resto
de componentes del ordenador.
Una vez que pulsas con el raton sobre el icono, el microprocesador aloja el
programa que has pulsado en la memoria, le asigna una direccin de inicio y
espera a que se carge todo el programa en la memoria para saber donde termina
y asi saber donde debe ir el siguiente programa para no usar la misma zona de
memoria para dos programas distintos.
Una vez cargado en la memoria, el microprocesador va a la direccin de inicio y
empieza la ejecucin de las instrucciones que tiene en dicho programa y hace las
funciones que se le ha encomendado.
No quiero entrar en ms epecificaciones tcnicas sobre la electrnica del propio
microprocesador , pues no lo considero necesario y solo queria que supieras que
es lo que realiza el micro con tus programas y cuales son los pasos que sigue
cada vez que pulsamos con el ratn sobre un icono de un programa.
la barrera de los 64K osea que como maximo podian acceder a 65535 posiciones
de memoria, quedando la restante inutil.
Hoy en dia con la aparicion de la memoria Extendida y Expandida, esto es algo
que ya ha pasado a la historia, pero cuando tenian que acceder a los 64K que se
tenian por registro, para poder acceder a una direccion de memoria superior se
creo los llamados registros de segmento.
Un registro de segmento lo que hace en realidad es dividir la memoria en zonas
de 64K, y cada segmento podia trabajar con dicha memoria, con esto y en
conjuncion con los registros normales se podia acceder a la totalidad de la
memoria disponible, con la simple instruccion de cambio de segmento y del
correspondiente registro de segmento.
A partir desde ahora cuando hablemos de regitros de segmentos lo haremos con
las palabra CS, DS y ES.
Aunque los registros sean conocidos y usados por sus nombres AX, BX, CX ,
etc.., en realidad cada uno de estos registros, podemos decir que se dividen en
dos, su parte alta o AH y su parte baja o AL, esto se debe a que con ello podemos
acceder de forma independiente al mismo registro pero teniendo dos valores
posibles.
Esto es algo que debemos tener en cuenta , pues si lo vamos a usar, el valor del
registro AX no sera el mismo que los valores por separado de su parte alta AH y
su parte baja AL.
Esto se debio a que cuando se crearon los microprocesadores 80X86 se penso
en la necesidad de acceder de forma independiente a las dos zonas de que esta
compuesto todo registro, aunque ahora no le vea la utilidad , con el transcurso del
tiempo ira viendo como ademas de ser util ses acostumbra a usar este sistema.
Esto es lo que por el momento quiero que sepa de los registros, conforme
vayamos avanzando ire aplicandole nuevos conceptos de los registros, pues al ya
tener una base de ellos no le sera dificil asimilar los nuevos conceptos que le
exponga.
5. Sistemas Numricos
Aunque no parezca razonable pasar de la instruccion Move a los sistemas
numricos , en realidad el capitulo anterior cumple la funcion de darle a conocer
el manejo de determinados registros y determinadas formas de hacerlo.
El presente capitulo pretende darle a conocer los tipos de sistemas numricos
que normalmente va a usar, como se pasa o realiza la conversion de un sistema a
otro.
Sistema decimal
El sistema decimal es el que practicamente todos usamos, osea de 1 al infinito,
dicho sistema de basa en la unidad , osea el uno, todos son multiplos o producto
de la suma de unidades (2 = 1 + 1) y asi sucesivamente.
Sistema Hexadecimal
El sistema hexadecimal esta basado en los valores del 1 al 15 , compuesto por los
numeros del 0 al 9 y por las letras A,B,C,D,E,F quedando la tabla de valore de la
siguiente forma:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
Sistema Binario
El sistema se basa en valores, el 0 y el 1, aunque con la union de ambos es
puede crear cualquier numero. Para cada valor posee una determinada
caracteristica , siendo su tabla de valores del 0 al 15 asi:
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 10
1011 11
1100 12
1101 13
1110 14
1111 15
Esto se denomina numeracion binaria en base de 4 bits, el significado de la
palabras bit , identifica a cada uno de los valores de que esta compuesto, puesto
que esta compuesto de 4 posible valores de 0 o 1 , por ejemplo el 1 e 0001 , osea
3 ceros y un 1, osea 4 bit.
Bit tambien es la unidad ms pequea de informacion que utilizan los
ordenadores, se dice la mas pequea puesto que esta ya no se puede dividir en
mas valores que el 0 el 1.
En este sistema para pasar del decimal al hexadecimal , primero debera pasarlo a
binario y la operacion de binario a hexadecimal es:
Se coge el numero binario en grupos de 4 bits de derecha a izquierda,
sirvamonos del numero en binario 111101
lo cogemos de derecha a izquierda en grupo de 4 , quedando asi: 11 y 1101,
como el primer grupo se nos queda con solo 2 cifras (11) , le aadimos al pricipio
los ceros que necesite para completarse a cuatro bits, en este caso 2 ceros,
quedando entonces asi 0011 y por lo tanto el numero quedaria asi: 0011 y 1101
Cogemos el primer grupo de 4 bits osea el 0011 y cogemos la tabla de valores del
sistema binario
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 10
1011 11
1100 12
1101 13
1110 14
1111 15
Como puede observar
El 0011 corresponde al 2
El
1101
corresponde
al
13
Ahora cogemos los valores que antes nos pusimos en la tabla para el sistema
hexadecimal y deciamos que teniamos:
0 1 2 3 4 5 6 7 8 9 AB C D E F
El 2 que teniamos de la tabla de binario al buscarlo en la hexadecimal
corresponde tambien al 2
El 13 que teniamos de la tabala de binario corresponde en la hexadecimal a la D,
puesto que a partir del 9, la A es el 10, la B es el 11, la C es el 12, la D es el 13, la
E es el 14 y la F es el 15.
Por lo tanto
El numero 111101 en hexadecimal es el 2D, tenga cuidado por que los numeros
hexadecimales se representan siempre terminados en H osea 2DH seria nuestro
numero, pero la H no tiene ningun valor mas que el de informar que se trata de un
numero hexadecimal.
6. El ASCII y el BCD
Introduccin
El ASCII
El ASCII o American Standard Code for Information Interchange (Codigo estandar
americano para el intercambio de informacion) es una serie completa de los
caractere y numeros que forman las palabras, a los cuale se les da un
determinado numero que va desde el 0 al 255 y con los cuales se realizan
intercambio de informacion independientemente del ordenador y tipo de sistema
operativo que utilizemos.
Este sistema es utilizado normalmente para texto , y su almacenamiento en
memoria o fichero es de un byte por cada letra/numero/simbolo de forma que la
palabra "hola" ocuparia 4 bytes, uno por cada una de las letras que la componen.
Tabla ASCII
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
!
"
#
$
%
&
'
(
)
*
+
,
.
/
0
1
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
El BCD
El BCD o Binary Coded Decimal (Codigo Binario-decimal) es un sistema que se
utiliza para representar numeros de forma que cada numero ocupe 4 bits , osea
que en un byte podriamos almacenar dos numeros en vez de uno como el sistema
ASCII, para ello se utiliza el siguiente sistema:
Un byte son 8 bits y por lo tanto si lo dividimos en grupos de 4 obtenemos dos
grupos de 4 bits por byte.
Pues ahora recordemos el sistema binario de la leccion anterior y tenemos la
siguiente tabla:
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
Son los numeros del 0 al 9 en binario, solo necesitamos del 0 al 9 pues los demas
son combiaciones de ellos, osea, el 10 es el 1 y el 0 y asi cualquier numero.
Pues como podemos observar con tan solo 4 bits podemos reprentar cualquier
numero del 0 al 9, y entonces tenemos que si tenemos 2 grupos de 4 bits por
caba byte, entonces podemos almacenar dos numeros en byte en vez de uno
como con el ASCII, para ello supongamos que queremos al macenar el numero
90.
Sacamos el 9 que es 1001 y el 0 que es 0000, entonces los unimos y tenemos:
10010000 al contar tenemos 8 bits y hemos almacenado dos numeros dentro del
byte.
8. Las Interrupciones