Universidad Autónoma del Estado de México
Centro Universitario UAEM Valle de México
Ingeniería en Computación
Unidad de Aprendizaje: Lenguaje Ensamblador
Tema: Sistemas Numéricos
El abor ó: Dr. en C. Héctor Rafael Or oz co Agui r r e
Octubre de 2016
Propósito de la Unidad de
Aprendizaje
Programar en lenguaje ensamblador aplicaciones de software o
hardware para tener el control total de un sistema de cómputo utilizando
para dicho aprendizaje un equipo de cómputo (PC) o un
microcontrolador/microprocesador comercial.
El alumno desarrollará programas en lenguaje ensamblador de uso
práctico para manejar los componentes básicos de un sistema de
cómputo, usando las instrucciones y las metodologías propias del la
estructura del lenguaje ensamblador.
El alumno deberá realizar, explicar, documentar cada programa
realizado, de tal forma que realce la comprensión de las instrucciones
individuales y el estilo de programación
Contenido
Organización de datos
Sistemas numéricos
Representación de valores
Conversiones entre sistemas o bases
Operaciones aritméticas en las bases
Complementos a 1 y a 2
Guion explicativo
Esta presentación tiene como fin dar a conocer a los
alumnos los siguientes aspectos:
¿Cuáles son los sistemas numéricos que hay?
¿Qué es un sistema posicional y no posicional?
Tipos de notaciones para representación de valores
Técnicas empleadas para cambios entre bases
¿Cómo realizar operaciones aritméticas en las
bases?
Representaciones en complemento a 1 y a 2 entre
las bases
6
Guion explicativo
El contenido de esta presentación contiene temas de
interés contenidos en la Unidad de Aprendizaje de
Lenguaje Ensamblador.
Las diapositivas deben explicarse en orden, y deben
revisarse aproximadamente en 6 horas, además de
realizar preguntas y dejar ejercicios a la clase sobre el
contenido mostrado.
7
Organización de datos
Las computadoras comprenden el lenguaje
de los números.
La organización de una computadora
depende entre otros factores del sistema de
representación numérica adoptado.
Se trabaja con el sistema binario, de donde
proviene el término bit como contracción de
“binary digit o binary digit”.
8
Sistemas numéricos
Los sistemas de
numeración o
Números como
sistemas
numéricos son un cantidades:
conjunto de reales negativos
símbolos que se reales positivos
utilizan para
enteros negativos
representar
cantidades según enteros positivos
ciertas reglas.
9
Sistemas numéricos
Un sistema de numeración puede
representarse como N = S + R
donde:
N es el sistema de numeración considerado
S son los símbolos permitidos en el sistema.
R son las reglas de generación que nos indican qué
números son válidos y cuáles son no-válidos en el sistema.
10
Sistemas numéricos
Sistema decimal: Es el sistema de numeración utilizado en la
vida cotidiana, cuya base es diez, utilizando los símbolos 0, 1,
2, 3, 4, 5, 6, 7, 8 y 9.
Sistema binario: los dos símbolos utilizados son el 0 y el 1, los
que reciben el nombre de bit.
Sistema octal: de base 8, los símbolos utilizados son 0, 1, 2,
3, 4, 5, 6,7.
Sistema hexadecimal: de base 16, los símbolos utilizados son
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
11
Sistemas numéricos
Imagen tomada de: [Link]
12
Sistemas numéricos
Imagen tomada de: [Link]
13
Sistema no posicional
Sistema de Los números
numeración no romanos son un
posicional: cada claro ejemplo de
cifra siempre tiene ello.
el mismo valor,
LX = 50 + 10 = 60
independientemen
XL = 50 – 10 = 40
te del lugar que
VI = 5 + 1 = 6
éstas ocupen.
IV = 5 – 1 = 4
14
Sistema posicional
Sistema de El sistema decimal,
numeración el binario, el octal y
posicional: cada el hexadecimal son
los más usados.
cifra tiene un valor
propio y un valor 01112 = 710
según la posición 01112 = 78
en la que se 01112 = 716
encuentra.
15
Teorema fundamental de los
números
La representación
de una cantidad
en un sistema de B = base del sistema de
numeración.
numeración i = posición respecto al punto.
distinto a decimal, d = número de cifras a la
derecha.
es dado por la n = Numero de cifras a la
izquierda del numero menos 1.
formula: X = Cada una de las cifras que
componen el número.
16
Representación de un valor
Se toma un número b,
base del sistema de
numeración y todo
número N se representa
como la combinación de
potencias de aquel
coeficiente que toman
valores de 0 a b-1, en la
forma:
17
Representación de un valor
En un sistema de numeración posicional de
base b, la representación de un número se
define a partir de la regla:
(…a3a2a1a0.a-1 a-2 a-3 …)b= …+ a2b2+ a1b1+ a0b0+ a-1b-1+ a-2b-2+ a-3b-3+ …
b es un entero no negativo mayor a 1 y cuando los ai
pertenecen al conjunto de enteros en el rango 0 ≤ai< b
El punto que aparece entre los dígitos a0 y a-1 se denomina
punto fraccionario.
Cuando b = 10 se le llama punto decimal y cuando b = 2,
punto binario.
18
Representación de un valor
Entonces este número
se denota
abreviadamente:
Este caso expresa que el
valor de cada cifra depende
del lugar que ocupa.
19
Representación yuxtaposicional
Los dígitos más a El que se encuentra
más a la izquierda se
la izquierda y más denomina como el dígito
a la derecha más significativo (MSD).
tienen una valor
significativo. El que se encuentra
más a la derecha se
denomina como el dígito
menos significativo
(LSD).
20
Representación yuxtaposicional
(195950.715)10
Base del sistema Parte entera n = 6
numérico b = 10. dígitos.
Parte decimal m = 3
dígitos.
21
Representación polinomial
Cualquier número 424.5910
N puede ser
N = 424.5910
escrito como un = 4*102 + 2*101
polinomio en + 4*100 + 5*101
potencias + 9*10-2
de la base.
22
Conversiones ente sistemas o
bases
• Sea el número akak-1….a1, un entero en base R. Para convertir este número de
base R a base Q se utiliza la conversión:
akRk-1+ak-1Rk-2+…+a1R0
• R es la base en la que se encuentra el número (base actual), k es el número
de dígitos que conforman el número y Q es la nueva base (se debe trabajar
con aritmética en base Q).
Ejemplos:
1) Convertir (100110)2 ( )10
R=2 k=6 Q=10 a6=1, a5=0, a4=0, a3=1, a2=1, a1=0
1*26-1+0*26-2+0*26-3+1*26-4+1*26-5+0*26-6= 1*25+0*24+0*23+1*22+1*21+0*20=
1*25+1*22+1*21= 32+4+2=38
Finalmente obtenemos que: (100110)2 (38)10
23
Conversiones ente sistemas o
bases
Convertir 1001102 ?10
R=2 k=6 Q=10 a6=1, a5=0, a4=0, a3=1,
a2=1, a1=0
1*26-1 + 0*26-2 + 0*26-3 + 1*26-4 + 1*26-5 + 0*26-6 =
1*25 + 0*24 + 0*23 + 1*22 + 1*21 + 0*20 = 1*25 +
1*22 + 1*21 = 32 + 4 + 2 = 38
Por lo tanto: 1001102 3810
24
Conversiones ente sistemas o
bases
• Ejercicios en clase:
• 1111111001102 ?10
• 1010100001102 ?10
• 1000111001102 ?10
• 1001100111102 ?10
25
Conversiones ente sistemas o
bases
Convertir 43025 ?3
R=5 Q=3 k=4 a4=4, a3=3, a2=0, a1=2
Se debe trabajar con aritmética en base 3, por ende,
se necesitan las tablas de suma y multiplicación en
base 3.
+ 0 1 2 * 0 1 2
0 0 1 2 0 0 0 0
1 1 2 10 1 0 1 2
2 2 10 11 2 0 2 11
26
Conversiones ente sistemas o
bases
43025 = 4*53 + 3*52 + 0*51 + 2*50 = 11*123 + 10*122 +
2*120
= 11*11122+10*221+2*1
= 200112 + 2210 + 2 = 210101
12*12 221*12 11122*11 221*10 200112
101 1212 11122 000 + 2210
12 221 11122 221 2
221 11122 200112 2210 210101
Se tiene por consiguiente que: 43025 2101013
27
Conversiones ente sistemas o
bases
• Ejercicios en clase:
• 34205 ?3
• 325 ?3
• 4205 ?3
• 305 ?3
28
Conversión de base X a base 10 (X 10)
Algoritmo A.
1. ik, num 0
2. Mientras i1 hacer Donde R es la base actual, k es el
num num*R+ai número de dígitos que componen el
número y ai es el i-ésimo dígito del
i i-1 número en base X (derecha a izquierda)
fin_mientras
3. Fin
I num R a4 a a a k
Convertir 43025 ?10 3 2 1
4 0 5 4 3 0 2 4
3 4
2 23
1 115 Por lo tanto: 43025 57710
0 577
29
Conversión de base 10 a base S (S 10)
Algoritmo B.
1. i1, q0, p 0 Donde x inicialmente es el número a
2. Repetir convertir, s es la nueva base y ai es el i-
ésimo dígito del número en base s
q [x/s] (parte entera)
tomando el orden akak-1…a1
p x-q*s (residuo)
ai p, i i+1, x q
hasta q=0 x q p ai i s
57 0 0 1 3
3. Fin
7
19 19 1 1 2
Convertir 57710 ?3 2 2
64 64 0 0 3
21 21 1 1 4
Se concluye que: 57710 2101013 7 7 0 0 5
2 2 1 1 6
0 0 2 2 7
30
Conversión de base X a base 10 (X 10)
Números fraccionarios
Algoritmo C.
1. im, num0 Donde m es el número de dígitos que
componen el número que queremos
2. Mientras i1hacer convertir, R es la base actual y num es el
num (num+bi)/R número en la nueva base.
i i-1
fin_mientras i num m R b b2 b3
3. Fin 1
3 0 3 16 A 0 6
2 .375
Convertir .A0616 ?10
1 .023437
5
0 .626464
84
Por lo tanto: .A0616 .6264648410
31
Conversión de base 10 a base S (S 10)
Números fraccionarios
Donde m es el número de dígitos que se
Algoritmo D. desean obtener, x es el número a
1. i1 convertir inicialmente, s es la nueva
2. Mientras i m hacer base y bi es el i-ésimo dígito del número
en base s tomando el orden b1b2…bm
x x*s
y [x] (parte entera) i x y b m s
x x-y, bi y, i i+1 i
1 .62646484 3 7
fin_mientras
4.3852538 4
3. Fin 8
2 .38525388 4
Convertir .6264648410 ?7 2.6967771 2
6
Se tiene que: .6264648410 .4247 3 .69677716 2
4.8774401 4
2
4 .87744012 4
32
Método de restas sucesivas
Represar 10410 en base 3
104 - 81 = 23 , 81 = 34 x 1
23 - 0 = 23 , 0 = 33 x 0
23 - 18 = 5 , 18 = 32 x 2
5 - 3 = 2 , 3 = 31 x 1
2 - 0 = 2 , 0 = 30 x 2
10410 = 102123
33
Método de restas sucesivas
• Ejercicios en clase:
• 1342010 ?3
• 53210 ?8
• 42010 ?2
• 73010 ?16
34
Método del resto de cocientes
Represar 10410 en base 3
104 % 3 = 2 , 104 / 3 = 34
34 % 3 = 1 , 34 / 3 = 11
11 % 3 = 2 , 11 / 3 = 3
3%3=0, 3/3= 1
1%3=1, 1/3= 0
10410 = 102123
35
Método del resto de cocientes
Mediante la siguiente tabla se puede entender
mejor cómo represar 10410 en base 3
Leídos de abajo hacia arriba
Dividendo Divisor Cociente Residuo
104 3 34 2
34 3 11 1
11 3 3 2
3 3 1 0
1 3 0 1
10410 = 102123
Escritos de izquierda a derecha
36
Método del resto de cocientes
• Ejercicios en clase:
• 1342010 ?3
• 53210 ?8
• 42010 ?2
• 73010 ?16
37
Método de restas sucesivas para
fracciones
Represar 0.430410 en base 5
0.4304 – 0.4000 = 0.0304 , 0.4000 = 5-1 x 2
0.0304 – 0.0000 = 0.0304 , 0.0000 = 5-2 x 0
0.0304 – 0.0240 = 0.0064 , 0.0240 = 5-3 x 3
0.0064 – 0.0064 = 0.0000 , 0.0064 = 5-4 x 4
0.430410 = 0.20345
38
Método de restas sucesivas para
fracciones
• Ejercicios en clase:
• 0.125010 ?2
• 0.430010 ?8
• 0.250010 ?5
• 0.635010 ?16
39
Método del resto de cocientes
para fracciones
Represar 0.430410 en base 5
0.4304 x 5 = 2.1520
0.1520 x 5 = 0.7600
0.7600 x 5 = 3.8000
0.8000 x 5 = 4.0000
0.430410 = 0.20345
40
Método del resto de cocientes
para fracciones
• Ejercicios en clase:
• 0.125010 ?2
• 0.430010 ?8
• 0.250010 ?5
• 0.635010 ?16
41
Inexactitud para fracciones
Las fracciones no siempre pueden ser
convertidas en forma exacta, con una
expresión finita.
(0.3)3 = 2 * 3-1 = 2 + 1/3
En definitiva, las fracciones en una base
sólo pueden ser estimadas como una
expresión finita en otra.
42
Conversión de potencias de 2
Para convertir números de base 2 a base k, donde k puede
expresarse como una potencia de 2, es decir, k=2x donde x>1
y es un número entero, se llevan a cabo los siguientes pasos:
1. Se agrupan de x en x los dígitos que se encuentran a la
izquierda del punto, comenzando a partir de él y aumentando
ceros a la izquierda cuando es necesario.
2. Se agrupan de x en x los dígitos que se encuentran a la
derecha del punto comenzando a partir de éste y aumentando
ceros a la derecha cuando sea necesario.
3. Se sustituyen los grupos por los dígitos correspondientes en la base
k.
43
Conversión de potencias de 2
Convertir 1110010100.0110112 ?16
16 = 24
Se agregaron dos ceros a la derecha
0011 1001 0100 . 0110 1100
3 9 4 6 C
Por lo tanto: 1110010100.0110112 394.6C16
44
Conversión de potencias de 2
Para convertir números de base k=2x a base 2, se
sustituye cada dígito en base k por los x dígitos
binarios correspondientes.
7402.618 ?2
8 = 23
7 4 0 2 . 6 1
111100 000 010 110 001
7402.618 111100000010.1100012
45
Conversiones ente sistemas o
bases
Imagen tomada de: [Link]
46
Conversiones ente sistemas o
bases
Base 10 Base 2 Base 8
0 000 0
1 001 1
2 010 2
3 011 3
4 100 4
5 101 5
6 110 6
7 111 7
47
Conversiones ente sistemas o
bases
Base 10 Base 2 Base 16 Base 10 Base 2 Base 16
0 0000 0 8 1000 8
1 0001 1 9 1001 9
2 0010 2 10 1010 A
3 0011 3 11 1011 B
4 0100 4 12 1100 C
5 0101 5 13 1101 D
6 0110 6 14 1110 E
7 0117 7 15 1111 F
48
Operaciones aritméticas en base 2
111
101101
+ 0 1 División
Suma 0 0 1 +10110
1 1 10 1000011
/ 0 1
Carry o acarreo 0 e 0
1 e 1
Resta 101101 ___1000001
- 0 1 1 11
- 10110 1101 1101010110
0 0 1
-1101
1 1 0 010111 0000010110
Borrow (deber uno) - 1101
01001
Multiplicación 101101*1101
111
1 101101
* 0 1 1
0 0 0 1
000000
1 0 1 1
101101
101101_______
1001001001
49
Conversión de números con signo
Para la magnitud con signo, el bit más a la
izquierda es usado como indicador de signo. 1
implica que el número es negativo, 0 que es
positivo.
Si se usan números de 8 bits, se va a poder representar el
rango [-(27-1), 27-1]. En general, sobre números de n bits se
puede representar el rango [-(2(n-1)-1), 2(n-1)-1].
La suma es igual que en el sistema decimal,
incluyendo el concepto de acarreo.
50
Conversión de números con signo
En caso de llegar con
un acarreo al bit 8,
existe una situación
de overflow.
51
Conversión de números con signo
El complemento de un número se
obtiene restándo dicho número al
número más grande que puede
representarse con el tamaño del número
o palabra con que se cuenta.
El acarreo se suma al dígito menos
significativo.
El complemento a r en d dígitos del
número N es (rd-1)-N.
52
Conversión de números con signo
-5210 = 99910 – 5210 = 94710
16710 – 5210 = 16710 + 94710
= 11410 + 110 = 11510
53
Conversión de números con signo
Para el complemento a 1, la idea es igual a
la vista en base 10. En este caso, el rango
representado es el mismo que el que se
tiene para una magnitud con signo.
-1012 = 11112 – 01012 = 10102
Nota: el complemento a 1 de un número
binario es invertir los dígitos.
54
Conversión de números con signo
En el caso del complemento a 2, la idea detrás
de este método es la misma que se presentó
como complemento a 1, salvo que se realizerá la
resta sobre el menor número que resulta mayor a
todos los números representables con el tamaño
de número o palabra con el que se cuenta:
El rango representable con complemento a 2 es [-(2n-1),
2n-1-1]
El complemento a r en d dígitos del número N es rd-N si
N distinto de 0 y 0 en caso contrario.
55
Conversión de números con signo
-1012 = 100002 – 001012 = 10112
Nota: complemento a 2 no es
más que complemento a 1, más 1.
56
Representación decimal de un
número en complemento a 2
Para los positivos es trivial, se hace lo
que visto anteriormente, evaluando el
polinomio que corresponda a la
expresión binaria.
57
Algoritmo de suma utilizando la representación de
números negativos mediante signo y magnitud
[Link] anan-1…a0 y bnbn-1…b0 2 números binarios con signo y magnitud.
[Link] signos iguales ? (an=bn)
Si: sumar magnitudes quedando el resultado en cn-1cn-2…c0 , cn bn
an
No: Compar magnitudes y dejar en cn el signo del mayor. Restar a la
magnitud mayor la menor y el resultado queda en cn-1cn-2…c0
3. La magnitud de cn-1cn-2…c0 excede el rango ?
Si: Indicar error (overflow – sobreflujo)
No: El resultado está en cncn-1…c0
58
Algoritmo de suma utilizando la representación de
números negativos mediante signo y magnitud
Obtener el resultado de las siguientes sumas binarias a 4 dígitos:
• 510+(-3) 10 = 01012+10112 = 0010, su equivalente decimal es 2
• Los signos son diferentes, y la magnitud del primer número es > que la
del segundo, así que restamos 011 de 101 y el signo del
resultado será positivo
+100
• -410 + (-6) 10 = 11002 + 11102 = 10102 1110
Nota: El Overflow se genera
1010
Overflow cuando ya no hay
lugar para un dígito
• Los signos son iguales, así que se suman magnitudes más. En base binaria
corresponde a un
Error ! Existe overflow cambio de signo
59
Algoritmo de suma algebraica en complemento a 1
[Link] el complemento a 1 de los números negativos
[Link] los operandos
[Link] carry? Si: sumar 1 al resultado
[Link] overflow? Si: indicar error
No: Escribir el resultado
Utilizando 4 dígitos
(-4)10 + (-3) 10 = 0100 2c1 + 00112c1 = 10112 + 11002 = 1 0111 Existe carry
= 01112 +12 = 10002 No existe overflow
60
Algoritmo de suma algebraica en complemento a 2
[Link] el complemento a 2 de los números negativos
[Link] los operandos
[Link] overflow? Si: mensaje de error
No: Se toman las primeras n posiciones de derecha a
izquierda como resultado ignorando el carry si es que lo
hay.
Tomando 4 dígitos
710 + (-5) 10 = 01112 + 01012c2 = 01112+10112 = 1 00102
Existe carry, así que el resultado es 0010
61
Representación decimal de un
número en complemento a 2
En el caso de los negativos, se debe
hacer el procedimiento inverso
Se invierten los bits,
Se suma 1,
Se convierte a decimal
Se le coloca el signo – adelante
Esto es equivalente a obtener el
complemento a 1 y sumarle 1.
62
Actividades reto
Realice en Realice otro
lenguaje C un programa en C
programa que para realizar
permita hacer sumas, restas,
conversiones de multiplicaciones y
números entre las divisiones de
distintas bases. valores binarios.
Para obtener los programas, favor de escribir a: hrorozcoa@[Link]
63
Referencias
Null, L. and J. Lobur. The Essentials of Computer Organization
and Architecture, Jones and Bartlett Publishers, Feb. 2003
Kip, I. Lenguaje ensamblador para computadoras basadas en
Intel, Pearson, Quinta edición.
Willian H. Murray III Chris H. Pappas. Programación en
lenguaje ensamblador, McGraw-Hill.
64