fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

cifras decimales de...
 
Avisos
Vaciar todo

cifras decimales de un DD

6 Respuestas
4 Usuarios
0 Reactions
6,176 Visitas
growdes
Respuestas: 2
Topic starter
(@growdes)
New Member
Registrado: hace 16 años

Hola soy un estudiante, de ingenieria
informatica de cienfuegos y necesito que me aclaren una duda de ensamblador si esta en
sus posibilidades, la cuestion es la sgte:
Se necesita separar las cifras decimales
de una doble palabra, a un arreglo de byte, lo que tengo hecho es lo sgte
Dato DD
54545H
ARR DB ?,?,?,?,?,?,?,?,?,?

Mov AX, word ptr Dato ; pongo el lsb
en ax
MOv DX, word ptr Dato +2 , pongo el msb en dx

Lo que me
sucede es que no puedo dividir por 10 o por 100 y luego por 1000 por que el cociente y
el resto no me cabrian en ax o dx, mi pregunta es como puedo extraer estas cifras
decimales del numero de doble palabra, saludos al experot y disculpe la molestia;
por favor responder tambien a:
inf200717@ucf.edu.cu

Responder
5 respuestas
juanjo
Respuestas: 451
(@juanjo)
Ardero
Registrado: hace 18 años

Buenas,

Puedes hacer lo siguiente, división entera:

Dividendo = 57 decimal = 0011 1001
Divisor = 12 decimal = 0000 1100

El registro que contiene el Divisor lo has de desplazar a la izquierda, es decir multiplicar por 2 hasta que el bit más significativo sea 1. Esto te dará un número de desplazamientos que lo vamos a llamar "k". "C" será el cociente, y Ck cada uno de los bits del cociente.

Luego has de restar al Dividendo el divisor desplazado. Esto puede darte dos resultados:

Si el resultado es negativo el valor binario de Ck es 0.
Si el resultado es positivo el valor binario de Ck es 1. Y se toma el resto de la división como nuevo Dividendo.

Se desplaza a la derecha el divisor anterior para seguir con la siguiente iteración.

Proceso:

Primero.- Multiplicamos el divisor por 2 hasta que el bit más significativo sea 1. Divisor = 0000 1100, al desplazarlo nos quedará 1100 0000 y el valor de k = 4.

Segundo.- Procedemos con la primera resta.

0011 1001
1100 0000
---------------
Resultado negativo, esto implica que C4 = 0

Tercero.- Desplazamos el Divisor y el dividendo sigue siendo el mismo.

0011 1001
0110 0000
---------------
Resultado negativo, esto implica que C3 = 0

Cuarto.- Desplazamos el Divisor y el dividendo sigue siendo el mismo.

0011 1001
0011 0000
--------------
0000 1000 Resultado positivo, esto implica C2 = 1 y el dividendo para la sigiente iteración será 0000 1000.

Quinto.- Desplazamos el Divisor y el dividendo es el resto del anterior ya que el resultado fue positivo.

0000 1000
0001 1000
----------------
Resultado negativo, esto implica C1 = 0.

Sexto.- Desplazamos el Divisor y el dividendo sigue siendo el mismo.

0000 1000
0000 1100
--------------
Resultado negativo, esto implica C0 = 0. Está es la última iteración ya que hemos obtenido el último bit del Cociente.

Cociente = 0000 0100

Si quieres hacerlo con más registros de 8 bits, tan solo tienes que tener en cuenta el bit the carry para realizar las operaciones y el bit que desplazas cuando salga de un regitro en el que se encuentran los bits de mayor peso los has de desplazar a los registros donde se encentran los bits de mayor peso. De esta forma puedes hacer operaciones con 8, 16, 24, 32, etc bits. Si prefieres realiza operaciones con 2 registros de 8 bits manualmente antes de programar el algoritmo.

Espero que te sirva.

Responder
Página 2 / 2
Compartir: