PDA

Ver la versión completa : ayudaa!!



rower
07-11-2005, 19:36
hola, necesito su ayuda, no se si es el lugar o el foro, pero estoy haciendo un ejercicio para la facultad sobre programación en assembler, y me pide que cuente cuando encuentro un número q es potencia de 2(obviamente en binario), ya se q un número en binario es potencia de dos cuando sólo tiene un solo 1, pero no se como identificar q tenga un solo 1, hay alguna instrucción q me permita desplazar todos los valores del número hacia la derecha por ejemplo? o qué me recomiendan??
muchas gracias, me estoy volviendo loco :confused:

SxR
07-11-2005, 20:07
Fíjate en esto:

00010110101101 > No es múltiplo de 2
01011010100110 > Es múltiplo de 2
01011001 > no es múltiplo de 2
00101010 > es múltiplo de 2

es decir, cualquier número de la forma xxxxxxxxxx0 es múltiplo de 2. Basca con mrar si el último dígito es un 0 y contar.

Tb puedes usar el 'truco' de desplazar hacia la izquierda tantos bits como tien tu número menos uno, luego comparas con '0' si es igual, es múltiplo de 2, si es igual a '1'...

rower
07-11-2005, 20:10
gracias por responder, pero esa no es la respuesta a mi pregunta, yo debo saber si el número es potencia de 2, no múltiplo, o sea:
0001000, 010000, 100000, 0100000: son potencinas de 2
0110000, 110000, 111101100, etc no son potencias de dos
cual sería la instrucción en assembler para desplazar una posición a la izquierda??

Marchi
08-11-2005, 15:19
un codigo k creo k t podria funcionar es este (no se si anda pero en teoria deberia funcionar), supongamos k tengo el numero para comprobar en ax:

mov bx,1 ;
ini: cmp bx,ax
je espot
cmp bx, 1000000000000000b
je nopot
rol bx,1 ; esta es la instruccion k rota hacia la izq
jmp ini
nopot: call esc_num
lea dx,nopo ;
mov ah,9
int 21h
jmp sali
espot: call esc_num
lea dx,sipo ;
mov ah,9
int 21h
jmp sali


nopo db " no es potencia de 2 o esta fuera de rango$"
sipo db " es potencia de 2$"

la idea del programa es comprobar el numero con todas las potencias de dos (k entren en el registro), y como vos mismo explicaste para hallarlas lo unico k tengo k hacer es ir corriendo el "1" del registro bx (inicalmente 1d) hacia la izq.

chau saludos

rower
08-11-2005, 15:41
uh q bien, gracias che, me sirve