Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
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
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.