Pascal/Turbo Pascal - problemas shifteo

   
Vista:

problemas shifteo

Publicado por Nicolas (11 intervenciones) el 02/11/2007 13:56:23
Hola querria hacerles una consulta acerca del tema del shifteo (para la parte de assembler) en turbo pascal. Quiero hacer un shl ax,6 (un shifteo con seis 0 a la izquierda) y no me lo permite. Luego probando con un shl ax,1 no me devuelve ningun error. Yo se que haciendo una subrutina podria repetir 6 veces la operacion shl ax,1 para que me haga 6 veces el shifteo, pero querria saber porque no puedo hacerlo de una. Ademas cuando defino una variable del tipo word, le ingreso el 1 por ejemplo, al hacer un shifteo por izquierda me muestra por pantalla el numero 2 en vez del 01.Gracias. Nicolas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problemas shifteo

Publicado por Nicolas (11 intervenciones) el 02/11/2007 14:59:28
Me respondo a mi mismo, pero sigo teniendo otra duda. Para poder shiftear mas de una vez en un solo paso (por ej shl ax,6) tuve que habilitar una opcion del compilador que se llama 286 instructions. Pero sigo cayendo en el mismo problema de que al ingresar el 1, cuando hago el shifteo por izquierda me aparece el 2. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas shifteo

Publicado por M@rceloL (25 intervenciones) el 03/11/2007 17:02:21
Hola Niucolás.

Si uno tiene una variable word con el valor 1, en binario sería:

00000000 00000001

Y le hace un corrimiento a izquierda, nos queda:

00000000 00000010

Que en decimal es 2.

Supongo que de ahí viene tu el problema.

Si usás write para mostrar el valor de la variable, te va a mostar el valor decimal.

Espero te sirva. Saludetes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas shifteo

Publicado por Nicolas (11 intervenciones) el 03/11/2007 20:23:56
Te agradezo M@rceloL; como podria hacer para mostrar entonces por pantalla el valor decimal en vez del binario? Gracias.
Saludos, Nicolas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas shifteo

Publicado por M@rceloL (25 intervenciones) el 04/11/2007 19:33:12
¿Dirás el binario en vez del decimal?

Buscate en la sección de código fuente. Ahí hay algunas cosas que te pueden servir.

Saludongos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas shifteo

Publicado por Nicolas (11 intervenciones) el 05/11/2007 14:09:27
Para hacer una prueba con la ayuda que me dieron(muchas gracias desde ya) arme este programa (jeje ojala fuera a ser tan corto lo que tengo que hacer pero se trata de una codificacion hamming). Cuando ingreso el 1,hace lo correcto porque le agrega dos ceros (100) y me devuelve el 4.Cuando le ingreso el 10 queriendo que me lo tome en binario como el 2,me devuelve 40(supuestamente me toma el 10 como decimal,cuando lo que defini es word,arma el binario de 10-->1010 y hace el shifteo con eso;de esta manera quedaria 101000 lo que es en decimal 40).Lo que quiero es que cuando ingrese el 10 me tome este valor como binario (el 2),pero se ve que no lo hace. Si me pueden contestar se los agradeceria. Saludos Nicolas.

Program binario;
uses crt;
var
k,m:word;
begin
read(k);
asm
mov cx,k
shl cx,02
mov m,cx
end;
writeln(m);
readkey;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas shifteo

Publicado por micropais (209 intervenciones) el 05/11/2007 10:53:53
hola Nicolas.
Un poco tarde pero...
...Si que se pueden hacer desplazamientos sin usar la emulacion o el propio coprocesador matmatico solo que se realizan sobre el registro cl o cx , en cl o cx el numero de desplazamientos y usando un bucle y shl , o shr de esta forma es compatible para cualquier maquina...

   MOV    CL, 03
MOV    AL, 10110111B    ; AL = 10110111
SHR   AL, 01            ; AL = 01011011    Un corrimiento a la derecha
SHR    AL, CL                   ; AL = 00001011    Tres corrimientos adicionales a la derecha


Saludos de micropais
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas shifteo

Publicado por Nicolas (11 intervenciones) el 05/11/2007 14:08:27
Para hacer una prueba con la ayuda que me dieron(muchas gracias desde ya) arme este programa (jeje ojala fuera a ser tan corto lo que tengo que hacer pero se trata de una codificacion hamming). Cuando ingreso el 1,hace lo correcto porque le agrega dos ceros (100) y me devuelve el 4.Cuando le ingreso el 10 queriendo que me lo tome en binario como el 2,me devuelve 40(supuestamente me toma el 10 como decimal,cuando lo que defini es word,arma el binario de 10-->1010 y hace el shifteo con eso;de esta manera quedaria 101000 lo que es en decimal 40).Lo que quiero es que cuando ingrese el 10 me tome este valor como binario (el 2),pero se ve que no lo hace. Si me pueden contestar se los agradeceria. Saludos Nicolas.

Program binario;
uses crt;
var
k,m:word;
begin
read(k);
asm
mov cx,k
shl cx,02
mov m,cx
end;
writeln(m);
readkey;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar