Pasar Decimal a Binario en 8086.

Marta
08 de Diciembre del 2005
Hola! tengo problemas para hacer un conversor Decimal a Binario que me han pedido en la Universidad. Alguien puede echarme una mano?
Muchisimas gracias.

El enunciado dice asi:
Realizar un programa en lenguaje ensamblador que pida un numero por teclado. Este numero como maximo tendra 3 digitos. Una vez introducido el numero decimal, el programa tiene que ser capaz de convertirlo en binario.

1) En primer lugar pediremos introducir un numero por teclado especificando que este no puede ser superior a 3 digitos, pero si inferior. Previamente hemos de visualizar el mensaje conveniente por pantalla.

2) En segundo lugar, se tiene que convertir en un número decimal, ya que el numero introducido se considera carácteres. Para esto restaremos 30 a cada caracter introducido y multiplicaremos y sumaremos luego cada caracter de la siguiente manera:
Ejemplo: -Entramos 234.
2x100+3x10+4x1=234

3) En tercer lugar cuando ya tenemos el numero en decimal lo convertiremos a binario segun el método del algoritmo de las divisiones.
Ejemplo: 234/2=117 etc.. hasta que no se pueda dividir mas por 2.

4) Por ultimo debe imprimir el resultado por pantalla del numero resultante en binario. Antes de imprimir el resultado debera mostrar el mensaje \"El numero convertido a binario es:\"
Ejemplo: El numero binario es: 11101010

Adjunto el codigo que he hecho:

cr EQU 13
lf EQU 10

print MACRO arg
push dx
push ax
lea dx, arg
mov ah, 09h
int 21h
pop ax
pop dx
endm

read MACRO arg
push dx
push ax
lea dx, arg
mov ah, 0Ah
int 21h
pop ax
pop dx
endm

dades SEGMENT PARA PUBLIc \\'data\\'

var DW 0
var2 DB 2
compta DW 0

mis1 DB \\'Entra un numero decimal de 3 digits maximo.\\',cr,lf,\\'$\\'
mis3 DB \\'El numero Convertido a binario es: \\',cr,lf,\\'$\\'
mis4 DB \\'Queremos cambiar a binario\\',cr,lf,\\'$\\'

blanc DB cr,lf,\\'$\\'


maxcad DB 4 lencad DB 0 numero DB 5 DUP(0)

trans DB 10 DUP(0)


dades ENDS

codi SEGMENT PARA PUBLIC \\'code\\'
main PROC FAR
ASSUME CS:codi, DS:dades, SS:pila, ES:dades
mov ax, dades ;Col·loquem els registres de segment
mov ds, ax ;en la zona adequada
mov es, ax

reiniciar:

print blanc
print blanc

print mis1
print blanc
read maxcad
print blanc

mov bx, 0
mov cx,0

salt:
mov cl, numero[bx]
sub cx, 30h

mov ax, 0
mov ax, cx
imul di
add dx, ax
mov ax,10
imul di
mov di, ax

push cx
inc bx
cmp bl, lencad
jne salt
mov bx,0

salt2:
pop cx
mov trans[bx],cl
dec bx
cmp bl, lencad
jne salt2

mov trans[bx],\\'$\\'


print blanc
print mis3
print blanc
print trans
print blanc

mov ax, 4c00h
int 21h

main ENDP


codi ENDS
pila SEGMENT PARA STACK \\'stack\\'
DB 128 DUP(0)
pila ENDS
END main